Относительно хорошей практики, этот ответ как всегда ... это зависит.
Стиль вашей страницы
Против:
- Если вы, например, используете скрипт для замены некоторых шрифтов страницы, то эффект будет таким, что изменение шрифта станет еще более заметным для пользователя.
- Если ваш скрипт изменит высоту некоторых элементов, это будет очень заметно.
PRO:
- Если вы загружаете скрипт для обработки определенной формы, которую пользователь сначала должен отредактировать, проблем вообще не возникает
- Если вы загружаете скрипт, который запускает анимацию, которую можно заменить одной анимацией загрузки, вы можете сделать это.
- Если ваша страница представляет собой приложение со многими видами и моделями, вы можете использовать
getScript
, как getJson
, в этом случае скорость вашей страницы значительно улучшится.
Ваш стиль кодирования
Не каждая страница и сценарий структурированы для использования таким образом. JQuery $(document).ready()
запускает каждый зарегистрированный обработчик один раз, даже после того, как событие произошло. Это не обязательно означает, что каждый обработчик работает таким образом, определенно не события DOM2.
Если у вас есть встроенные скрипты, они больше не будут работать.
Вы больше не можете гарантировать определенный порядок, который будет иметь ваш код инициализации, так что вы можете столкнуться с проблемами, нужно добавить больше проверок, например, ожидаемый видимый контейнер все еще виден.
Какая награда?
На страницах с высокой производительностью вы получаете некоторые четкие данные. Но теги сценариев в конце страницы могут сделать то же самое с половиной работы (в основном: удалить встроенные сценарии). По моему мнению, getScript
- это что-то вроде последней награды, вам не следует злоупотреблять ею, потому что потенциал не только отпугнуть других разработчиков, но и ваших клиентов явно присутствует. Я бы использовал его только в среде веб-приложения, потому что вот реальные преимущества
ОБНОВЛЕНИЕ ответ на ваш комментарий
Использование getScript на вашей странице должно выглядеть так:
//since you need it there will be some kind of wrapper
var initClosure = function() {...}
if(typeof optionalNamespace == 'undefined') {
$.getScript('/foo.js', initClosure);
} else {
initClosure();
}
Весь зависимый код находится в initClosure, и вы проверяете пространство имен или имя переменной (даже что-то вроде window['blub']
или просто blub
будет работать). Вам это понадобится, поскольку зависимая функция on getScript
, которая обычно устанавливает значения по умолчанию или добавляет что-либо в dom, должна вызываться только один раз.
Тем не менее, я не вижу смысла в циклических ссылках, потому что это будет означать:
загрузить скрипт 1 -> ждать -> загружен -> загрузить скрипт 2 -> ждать -> загружен -> [...] -> загрузить скрипт 1
Этой ситуации следует избегать как минимум по 2 причинам
- Браузер не может предсказать это. Если имеется несколько тегов сценария, ваш браузер позаботится о параллельной загрузке, поэтому общая скорость (упрощенная и грубая) - это время, которое потребуется для загрузки самого большого файла. В моем примере это займет сумму загрузок скрипта.
- Инициализация ваших сценариев будет выполняться дважды, поэтому любое состояние будет потеряно.