Много ли встроенных JS-скриптов замедляют время загрузки страницы?

Я пытаюсь оптимизировать время загрузки сайта с большим количеством спагетти JS. Некоторые из них выглядят так:

<script>var x="foo";</script>
<script>var y="bar";</script>

Вместо кода системного программиста:

<script>
    var x="foo";
    var y="bar";
</script>

Итак, мне было интересно, действительно ли это на самом деле наносит вред? Помимо эстетики, объединение сценариев в один тэг script принесет пользу времени загрузки?

Ответы

Ответ 1

Когда браузер обнаруживает элемент script во время разбора HTML-страницы страницы, происходит следующее:

  • Браузер приостанавливает обработку HTML.
  • Браузер инициирует экземпляр своего интерпретатора JavaScript.
  • интерпретатор JavaScript компилирует JavaScript и добавляет его в глобальный пул JavaScript в текущей странице.
  • Браузер продолжает разбор HTML, повторяя 2. и 3. столько раз, сколько есть элементов script в HTML.

Таким образом, наличие нескольких элементов script замедляет рендеринг страницы. Чем меньше элементов script присутствует в HTML, тем быстрее будет отображаться страница.

Если ваш документ содержит скрипты с помощью src attrbute (например, <script src="http://example.com/myscript.js">), вы можете использовать атрибут async для задержки script обработка. Это функция, поддерживаемая в новых браузерах (например, Firefox 3.6 и браузеры на основе Webkit, выпущенные с сентября 2010 года). Но встроенные скрипты по-прежнему будут блокировать разбор, пока они не будут интерпретированы.

Ответ 2

Поскольку загружается больше байтов, первый пример медленнее.

Однако я уверен, что вы никогда не сможете отличить незначительную микро-оптимизацию последнего примера и прежнего примера. Помимо организации, нет причин беспокоиться.

Тем не менее, ради организации, я определенно буду беспокоиться! Сохранение организованного кода ускорит время разработки. Сохранение всего вашего JavaScript в одном месте будет препятствовать запуску поиска фрагмента.

Я бы попытался перенести столько кода сначала во внешний файл и все остальное в подставку вашего документа.

  • Вы получите наибольшую выгоду за счет использования внешнего файла (из-за кеширования браузера), чем что-либо еще.
  • Вы разрешаете разметку браузера перед загрузкой или исполнением вашего JavaScript, если вы переместите теги <script> в нижний колонтитул страницы. Это создаст иллюзию более быстрой загрузки.

Кстати, (и так же тривиально) наиболее оптимизированная версия вашего script (помимо использования внешнего файла) будет:

<script>
    var x='foo', y='bar';
</script>

Ответ 3

Существует разница между временем перцептивного загрузки и фактическим временем загрузки.

Первое является самым важным для конечного пользователя. Некоторые сайты никогда не загружаются полностью, потому что у них есть реклама, которая всегда продолжает обновлять и загружать новый контент - поэтому вы видите, что строка состояния все еще работает, даже если она похожа на завершение страницы.


Ваш вопрос кажется теоретическим, поэтому я попытаюсь теоретически ответить.

  • Если ваш первый случай может быть быстрее

    Оптимальное время загрузки зависит от того, что делают два сценария и что требует ваш сайт. Если ваш сайт ориентирован на JS, то это означает, что макет, стиль и элементы HTML создаются/контролируются в основном JavaScript, тогда первый способ может быть быстрее. Вы хотите сделать все визуальные обработки и создания элементов в первом script. На самом деле, у вас может быть пустая HTML-страница и сайт, созданный исключительно JS (крайне неудобный), но возможно. Это почти никогда не бывает, но в этом случае все визуальные элементы и элементы должны быть размещены там. Второй script должен включать в себя весь другой код, который пользователь не заметил бы в течение секунды (анимация слайд-шоу, зависание, методы нажатия).

    Не цитируйте меня на этом, но я думаю, это потому, что каждый script (в голове HTML) интерпретируется после его загрузки, прерывая необходимые и ненужные сценарии, может ускорить некоторую предварительную обработку.

  • Скорость сети/Интерпретация | Второй случай для большинства

    Большинство сайтов не зависят от JavaScript, поэтому второй случай - это общий способ сделать что-то. Существуют причины размера/кэширования для взлома пользовательского кода, но для нестандартного кода, такого как различные фреймворки, есть причина, по которой не существует объединенной структуры jQuery/Prototype для людей, которые используют оба. Есть также некоторые ситуации, когда размещение встроенного кода (в теле) может быть более полезным.

    В большинстве случаев предпочтительным является второй метод или метод, аналогичный тому, что перечислено в списке Стивена. Это происходит только потому, что вы уменьшаете служебные данные байта, которые передаются по сети; Кроме того, вы минимизируете количество символов, которые браузер должен переводить. Истинный переоптимизированный метод был бы <script type="text/javascript">x='foo',y='bar';</script> (нет var).

Ответ 4

При вводе больше вещей (js в вашем случае) на странице увеличивается размер страницы, что окончательно замедляет производительность.

Вы должны комбинировать свой код в одном теге <script>, а также в файле js.

Вы можете использовать "Скорость Google" (аддон Firebug), который предложит вам о том, как вы можете улучшить производительность своего сайта:)

Ответ 5

На самом деле лучше сделать это вторым способом, который у вас есть. Это упрощает ведение и чтение кода в этой форме. Другой способ - использовать внешние скрипты.

Причина, по которой вы иногда видите это в первую очередь, состоит в том, что сайт включает разные файлы в разное время.

Ответ 6

вам следует попробовать использовать этот классный инструмент cuzillion. Это поможет вам найти мелкозернистые тонкие эффекты скорости, подобные тем, о которых вы упоминаете.

В вашем случае кажется, что существует очень маленький, но уже существующий эффект открытия нескольких раз тега.