Закрытие пользователя Google для ленивой загрузки javascript

Мне особенно нравится возможность требовать другие классы javascript с помощью Google Closure, но мне интересно, можно ли использовать goog.require для ленивой загрузки других классов javascript. Когда я пытаюсь использовать goog.require после загрузки страницы, кажется, что она обновляется или становится пустой :( Любой способ получить скрипт по запросу и, возможно, настроить его с обратным вызовом, чтобы я мог запустить некоторый javascript, когда он загрузится ?


person chrismarx    schedule 27.09.2010    source источник


Ответы (2)


Менеджер модулей библиотеки закрытия:

https://github.com/google/closure-library/blob/master/closure/goog/module/modulemanager.js

person falko    schedule 17.12.2010

goog.require не предназначен для загрузки какого-либо скрипта. Однако нет ничего особенного в ленивой загрузке файлов сценариев по запросу. Просто создайте узел динамически и добавьте его на свою страницу:

function require(src)
{
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = src;
    document.body.appendChild(script);
}

Вышеупомянутая функция загрузит скрипт с URL-адреса, указанного параметром src.

Обратный звонок — это отдельная история. Вы не получаете событие, запущенное после загрузки скрипта. Если вы хотите получать уведомления о загрузке скрипта, вам нужно уведомить о загруженном скрипте из самого скрипта. Например, вы можете вызвать предопределенную функцию на своей странице в качестве последнего оператора в загружаемом файле javascript. Как только эта функция вызывается, вы знаете, что скрипт завершил загрузку. Однако для этого вам необходимо иметь возможность изменять загруженный файл сценария.

Аналогичный подход для уведомления о загрузке скрипта используется с JSONP. Данные JSONP извлекаются с использованием того же подхода, что и выше — вы добавляете на страницу динамически созданный узел скрипта. Однако по умолчанию возврат данных с сервера не приводит к изменению состояния. Вызов функции необходим, чтобы указать, что что-то произошло (например, данные прибыли). При использовании JSONP вы указываете имя функции в URL-адресе запроса JSONP. Затем сервер возвращает фрагмент javascript, в котором вызывается указанная вами функция, передавая данные JSON в качестве аргумента.

Все это говорит о том, что вам нужно иметь возможность вызывать функцию на странице после загрузки скрипта.

person bugventure    schedule 27.09.2010
comment
добавление файлов сценария не сложно, но красота goog.require (который действительно запускает включение файла сценария, когда вы запускаете свое приложение перед компиляцией закрытия) заключается в том, что он выясняет, был ли этот файл сценария уже включен на страницу, и не загружает его снова, если он есть. Значит, вы не знаете, существуют ли такие вещи в закрытии? (например, некоторые удобные методы и т. д.). - person chrismarx; 28.09.2010
comment
Я считаю, что вы могли бы реализовать тот же принцип, кэшируя URL-адреса ваших ресурсов сценария. Если скрипт, который вы хотите получить, имеет кешированный URL-адрес, это означает, что он уже был получен. - person bugventure; 29.09.2010