Объединение нескольких файлов JS в один файл имеет следующие преимущества:
- Браузеры могут скачать один файл более эффективно и быстрее, чем загружать несколько файлов меньшего размера. Одно HTTP-соединение, загружающее файл, обычно быстрее, чем многие HTTP-соединения, загружающие файлы меньшего размера.
- У браузера есть ограничение на количество одновременных подключений, которые он сделает в том же домене, и, если он достигнет этого предела, некоторые соединения должны ждать, пока другие не закончат. Это вызывает задержки при загрузке. Скачивание меньшего количества файлов делает его менее вероятным для достижения этого предела. Эти ограничения распространяются на все подключения к домену (загрузка JS-файлов, загрузка файлов CSS, загрузка фреймов, ajax-звонков и т. Д.).
- Масштабируемость сервера может быть увеличена, потому что для загрузки каждой страницы требуется меньше http-соединений для обслуживания контента.
- Бывают случаи, когда контроль версий и взаимодействие между обновлениями версий и просмотром кеширования JS-файлов могут быть проще с одним большим JS-файлом. Когда все ваши JS-файлы объединены, вы можете назначить один номер версии для этого объединенного JS-файла (например, jQuery с его версиями). Тогда любое изменение JS в любом месте вызывает ошибку в номере версии для главного комбинированного файла. Поскольку данный браузер получает весь объединенный файл все или ничего, никогда не будет возможности для браузера случайно получить одну версию одного файла с сервера и другую версию другого файла из устаревшего кеша браузера. Кроме того, сохранение одного номера версии мастера намного проще, чем управление версиями большого количества небольших файлов.
Мини-файл JS уменьшает его загрузку и анализ, что повышает производительность загрузки.
Если вы оба объединяете несколько файлов и уменьшаете, минимизация может быть более эффективной. При минировании нескольких небольших файлов по отдельности вы не можете минимизировать имена переменных, которые разделяются между разными файлами - они должны сохранять свои исходные имена. Но, если вы объедините все JS-файлы и затем уменьшите, вы можете минимизировать все символы, которые распределяются между различными файлами JS (если они не используются совместно с внешними).
Очевидно, что есть некоторые ограничения здесь и вещи, не получают сколь угодно лучше, если весь мир ставит их JS в один файл. Некоторые вещи, чтобы думать о том, решая, что упаковать в один файл:
Вы не хотите большую группу ваших страниц, чтобы быть разбора и выполнения большого блока кода, что они не будут использовать. Это, очевидно, компромисс, потому что если код эффективно кэшируется, то это не столько проблема с загрузкой, сколько скорее проблема эффективности выполнения. Каждое использование должно будет решить, как нарисовать эту линию компромиссов.
Возможно, вы не хотите, чтобы код пакета, который был исправлен достаточно регулярно, с кодом, который почти никогда не изменяется, поскольку это снижает эффективность кеширования браузера, если большой комбинированный JS всегда меняется.
В командной среде, где используется код обмена несколькими проектами, очень важно подумать о том, как упаковать вещи в комбинированные и уменьшенные куски, которые работают для большого количества проектов, совместно использующих код. Обычно вы хотите оптимизировать упаковку для более широких потребностей, а не только для одного проекта.
Мобильный доступ часто имеет меньшие тайники, более медленные процессоры и более медленные соединения, поэтому важно учитывать потребности ваших наиболее посещаемых мобильных страниц в том, как вы также упаковываете вещи.
И некоторые минусы объединения и минимизации:
Непосредственно отладки свернутого сайт может быть довольно сложно, как многие символы потеряли свои значимые имена. Я обнаружил, что для отладки/устранения неполадок часто требуется использовать неограниченную версию сайта (или, по крайней мере, некоторые файлы).
Сообщения об ошибках в браузерах будут ссылаться на объединенный/сведенный к минимуму файл, а не на фактические исходные файлы, поэтому может быть сложнее определить, какой код вызывает указанную ошибку браузера, о которой сообщалось.
Комбинированный и минимизированный сайт должен быть протестирован, чтобы убедиться, что эти дополнительные действия не вызвали никаких проблем.
Меньше запросов от клиента на сервер ..? – DontVoteMeDown