Несмотря на то, что необходимо минимизировать количество http-запросов, иногда (или часто, в зависимости от задачи) бывает полезно загружать часть «тяжелого» функционала только тогда, когда он действительно понадобится на странице.
У jQuery есть механизм, позволяющий осуществить это —
$.getScript, однако, он обладает рядом недостатков:
- не запоминаются уже загруженные или загружаемые в данный момент скрипты, при повторном запросе опять идет их загрузка.
- нельзя указать сразу несколько скриптов
- выключен кэш (к каждому урлу насильно приписываются параметры типа
?_=1242843920520). Зачем это было так жестко сделано, для меня осталось загадкой.
- у коллбэка нельзя задать контекст (это вообще болезнь коллбэков jQuery).
Пришлось написать небольшой плагин, лишенный вышеперечисленных недостатков:
$.requireScript(url, callback, [context], [options])
Где:
url — урл загружаемого скрипта (может быть массивом урлов)
callback — коллбэк-функция, вызываемая после загрузки скриптов
context — контекст, в котором вызывается коллбэк-функция (опционален)
options — параметры; в данный момент поддерживается только один параметр —
parallel, указывающий, нужно ли использовать параллельную загрузку для нескольких скриптов (по умолчанию —
true)
Может кому-то пригодится. Скачать и попробовать можно с
code.google.
UPDATE: согласно замечаниям в комментах,
$.loadScript переименован в
$.requireScript, и теперь можно указать несколько урлов сразу.