Несмотря на то, что необходимо минимизировать количество http-запросов, иногда (или часто, в зависимости от задачи) бывает полезно загружать часть «тяжелого» функционала только тогда, когда он действительно понадобится на странице.
У jQuery есть механизм, позволяющий осуществить это — $.getScript
, однако, он обладает рядом недостатков:
- не запоминаются уже загруженные или загружаемые в данный момент скрипты, при повторном запросе опять идет их загрузка.
- нельзя указать сразу несколько скриптов
- выключен кэш (к каждому урлу насильно приписываются параметры типа
?_=1242843920520
). Зачем это было так жестко сделано, для меня осталось загадкой. - у коллбэка нельзя задать контекст (это вообще болезнь коллбэков jQuery, хотя, как недавно рассказал Азат, разработчиками уже делаются шаги в этом направлении).
Я написал небольшой плагин, лишенный вышеперечисленных недостатков:
$.requireScript(url, callback, [context], [options])
Cкачать и попробовать можно с code.google.
2 комментария:
Полезная штука, сам подобное как то писал.
Только без колбак ф-ии не работает почему то. Исправил, внеся в плагин изменение:
if(!callback) callback = function(){};
Дмитрий, у меня к вам вопрос. Среди последних комментариев на хабре к этой же статье написано, цитирую "Существует xLazyLoader, который собираются интегрировать в jQuery Core". По приведённой в этом комментарии ссылке находится roadmap jQuery версии 1.4. А на дворе нынче версия 1.7, в которой уже произошло множество изменений. Мне интересно, Дмитрий, у меня к вам вопрос. Среди последних комментариев на хабре к этой же статье написано, цитирую "Существует xLazyLoader, который собираются интегрировать в jQuery Core". По приведённой в этом комментарии ссылке находится roadmap jQuery версии 1.4. А на дворе нынче версия 1.7, в которой уже произошло множество изменений. Мне интересно, не внесли ли они этот xLazyLoader в Core?не внесли ли они этот xLazyLoader в Core?
Отправить комментарий