Производительность парсинга Javascript и CSS

Я пытаюсь повысить производительность веб-приложения. У меня есть показатели, которые я могу использовать для оптимизации времени, затрачиваемого на возврат главной HTML-страницы, но меня беспокоят внешние файлы CSS и JavaScript, которые включаются с этих HTML-страниц. Они обслуживаются статически с заголовками HTTP Expires, но используются всеми страницами приложения.

Я обеспокоен тем, что браузер должен анализировать эти файлы CSS и JavaScript для каждой отображаемой страницы, и поэтому совместное использование всех CSS и JavaScript для сайта в общих файлах отрицательно скажется на производительности. Следует ли мне пытаться разделить эти файлы так, чтобы с каждой страницы я ссылался только на CSS и JavaScript, необходимые для этой страницы, или я получу небольшую отдачу от своих усилий?

Есть ли какие-нибудь инструменты, которые могут помочь мне создать для этого метрики? Взаимодействие с другими людьми

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
9
0
3 258
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Ответ принят как подходящий

Контекст: Хотя верно, что накладные расходы HTTP более значительны, чем синтаксический анализ JS и CSS, игнорирование влияния синтаксического анализа на производительность браузера (даже если у вас меньше мегабайта JS) - хороший способ навлечь на себя проблемы.

YSlow, Fiddler и Firebug - не лучшие инструменты для отслеживания скорости парсинга. Если они не обновлялись совсем недавно, они не разделяют количество времени, необходимое для получения JS через HTTP или загрузки из кеша, от количества времени, потраченного на синтаксический анализ фактической полезной нагрузки JS.

Скорость синтаксического анализа немного сложно измерить, но мы несколько раз отслеживали эту метрику в проектах, над которыми я работал, и влияние на загрузку страниц было значительным даже с ~ 500 КБ JS. Очевидно, что больше всего страдают старые браузеры ... надеюсь, Chrome, TraceMonkey и подобные им помогут разрешить эту ситуацию.

Предложение: В зависимости от типа трафика на вашем сайте, возможно, стоит потратить время на разделение полезной нагрузки JS, чтобы некоторые большие куски JS, которые никогда не будут использоваться на самых популярных страницах, никогда не будут отправлены клиенту. . Конечно, это означает, что когда новый клиент попадает на страницу, где требуется этот JS, вам придется отправить его по сети.

Однако вполне может случиться так, что, скажем, 50% вашего JS никогда не понадобятся 80% ваших пользователей из-за ваших шаблонов трафика. Если это так, вам определенно следует использовать меньшие, упакованные полезные нагрузки JS только на тех страницах, где JS необходим. В противном случае 80% ваших пользователей понесут ненужные штрафы за парсинг JS на каждая загрузка страницы.

Нижняя линия: Трудно найти правильный баланс между кэшированием JS и меньшими, упакованными полезными нагрузками, но, в зависимости от модели вашего трафика, определенно стоит рассмотреть другой метод, а не разбивать весь ваш JS на каждую отдельную загрузку страницы.

Чтобы добавить к отличному ответу kamen, я бы сказал, что в некоторых браузерах время синтаксического анализа для больших ресурсов js растет нелинейно. То есть, для синтаксического анализа JS-файла размером 1 мегабайт потребуется больше времени, чем для анализа двух файлов по 500 КБ. Поэтому, если большая часть вашего трафика - это люди, которые, вероятно, будут кэшировать ваш JS (вернувшиеся посетители), и все ваши файлы JS устойчивы к кешированию, может иметь смысл разбить их, даже если вы в конечном итоге загрузите их все на каждый просмотр страницы.

Важно отметить, что IE имеет произвольный верхний предел запросов, которые он будет делать. Если у вас слишком много разных JS-файлов, то после определенного момента IE больше не будет загружать ваши скрипты. Об этом свидетельствует проект Drupal, где страница загружала бы скрипты наполовину, если бы агрегирование JS было отключено, но как только мы снова включили агрегирование JS, все заработало. (Агрегация JS - это функция Drupal, которая собирает весь ваш JS для страницы в один файл, чтобы уменьшить количество запросов.

Metagrapher 01.12.2010 17:01

Также добавив, levik, ваше предложение о разделении файлов работает, потому что некоторые браузеры будут запрашивать и анализировать оба файла почти одновременно. Другие браузеры будут ждать, пока первый не будет проанализирован, чтобы загрузить второй. Я обнаружил, что чем меньше запросов, тем лучше, а также более лаконичный и релевантный код.

Metagrapher 01.12.2010 17:03

Другие вопросы по теме