Теоретический вопрос:
Все мы знаем о pro's уменьшения и объединения файлов JavaScript для сокращения Запросов HTTP для ускорения веб-сайта. Но когда популярными библиотеками JavaScript пользуются (jQuery, например), не слишком глупо предположить, что они уже были загружены на клиентский компьютер от другой страницы.
Таким образом, каков должен быть preferrered? Как делает больших парней в промышленном дескрипторе это?
A) Объедините и уменьшите каждый сценарий в крупный и служите ему от моего собственного CDN.
B) Объедините все "самозаписанные" сценарии в один файл и используйте доступный CDN's библиотек, если это возможно.
Спасибо!
«Объедините и минимизируйте каждый сценарий в один массивный и обслуживайте его из моего собственного CDN »
Если у вас есть CDN, о чем мы говорим? :) Вы имеете в виду сервер, не так ли?
«Как большие парни в индустрии справляются с этим?»
Большие парни всегда используют свои собственные серверы.
«... не слишком глупо предположить, что они уже были загружены на клиентский компьютер с другой страницы.»
К сожалению, это так. Факты:
Я думаю, это зависит от вашего сайта:
Лучший способ узнать, что делать, - это проверить, какая комбинация методов экономит вам больше всего трафика / соединений.
P.S .: Мне лично не нравится идея позволить другим людям обслуживать файлы для моей веб-страницы, потому что что произойдет, если CDN выйдет из строя, но ваш сервер останется живым? Если для вас это не проблема, попробуйте сервер всех используемых вами библиотек из надежного CDN.
Я думаю, это сводится к нескольким вещам:
Также существует разница между использование популярных пакетов Javascript, таких как jQuery, и использование личного пакета, который будет доступен только посетителям, посетившим ваш сайт.
Повышение производительности может происходить в двух местах: 1) кеш браузера и 2) кеш DNS, который, даже если файл не хранится локально, DNS-сервер имеет маршрут, который минимизирует время запроса или даже временно обслуживает файл.
Я бы посоветовал использовать CDN и размещать файлы локально. В зависимости от ваших ресурсов (оборудование / пропускная способность) вам все равно может потребоваться использование CDN. Было бы неплохо использовать планировщики на стороне сервера для проверки статуса CDN и перенаправления пути, если это применимо.
Также помните, что некоторые пользователи предпочитают отключать кеш браузера. Так что минимизация вашего JS - это всегда плюс. Вы должны разделить свой JS на два файла: 1) Требуется при загрузке и 2) Не требуется при загрузке. По сути, сначала получите необходимый код, чтобы улучшить воспринимаемое время загрузки. Затем загрузите все остальные дополнения (например, слайд-шоу, средства смены цвета и т. Д.).
И последнее, что нужно сделать - использовать заголовки Expires, поскольку все это не имеет значения, если вы не оптимизируете это. Это то, что действительно снизит скорость для вернувшихся посетителей с включенным кешем. YSlow - хорошее дополнение для Firefox, которое поможет оценить вашу производительность загрузки.
Чтобы ответить на ваш вопрос: Уменьшите количество HTTP-запросов, но сделайте свою собственную оценку размера файла JS.
(Крайность) Вам не нужен один JS-файл размером 10 МБ, иначе ваш сайт будет загружаться слишком долго. Вы также не хотите 1000 файлов размером 10 КБ из-за накладных расходов HTTP. Опять же, используйте это, чтобы проиллюстрировать, что вам нужен баланс между размером и количеством файлов - и, как я сказал ранее, упакуйте их в требуемую производительность по сравнению с желаемой.
Нет особой причины, по которой получение одного скрипта было бы быстрее, чем его разделение. Это происходит потому, что одновременные загрузки браузера ограничены, но не на одну.
Я думаю, что идея должна состоять в том, чтобы сначала обрабатывать синхронные сценарии пользовательского интерфейса, а затем сценарии «реакции пользователя» (например, проверки и т. Д.).
При прочих равных вариант B выглядит наилучшим.
В частности, на ваш вопрос о том, как крупные игроки отрасли обрабатывают сценарии на стороне клиента, вы всегда можете посмотреть и увидеть. stackoverflow.com кажется прекрасным, полагаясь на версию jquery lib от Google. Другие решительно этого не делают ....
Я думаю, что лучший подход - использовать минифицированный файл 'application.js' (содержащий весь javascript, специфичный для приложения), а затем использовать сервис, такой как Google AJAX Libraries API (найден здесь) для загрузки jQuery, Prototype и т.д.
Омар аль-Забир ведет сайт под названием pageflakes, на котором есть множество статей о том, как повысить производительность. Одна из них, в частности, объясняет, как сжимать и комбинировать всевозможные вещи на стороне сервера перед отправкой клиенту.
Вы также можете использовать спрайты изображений css для уменьшения HTTP-запросов. Они очень помогают для часто используемых изображений.
* У меня, конечно, нет огромного производственного сайта, но эти вещи определенно помогли сэкономить на пропускной способности.