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