Наши веб-приложения продолжают расти в своих масштабах, амбициях и функциональности – и это хорошо. Однако неумолимый марш к более богатому вебу стимулирует другую тенденцию: объем данных, загружаемых каждым приложением, продолжает неуклонно расти. Чтобы обеспечить высокую производительность, мы должны оптимизировать доставку каждого байта!
Как выглядит современное веб-приложение? Ответить на этот вопрос нам поможет HTTP Archive. В рамках проекта периодически сканируются самые популярные сайты (более 300 000 из списка Alexa Top 1M), а также регистрируются и агрегируются аналитические данные о количестве ресурсов, типах контента и других метаданных для каждого отдельного сайта.

На диаграмме выше показана тенденция роста объема скачанных данных для популярных сайтов в период с января 2013 г. по январь 2014 г. Конечно, не все сайты растут с одинаковой скоростью и требуют одинакового объема данных, поэтому мы выделяем разные квантили в распределении: 50-й (медиана), 75-й и 90-й.
В начале 2014 года средний сайт состоял из 75 запросов, которые в сумме составляли 1054 КБ переданных байтов, а общее количество байтов (и запросов) неуклонно росло в течение предыдущего года. Это не должно удивлять, но имеет важные последствия для производительности: да, скорость интернета растет, но она растет с разной скоростью в разных странах, и многие пользователи по-прежнему сталкиваются с ограничениями на передачу данных и дорогими тарифными планами с оплатой за трафик, особенно на мобильных устройствах.
В отличие от настольных аналогов, веб-приложения не требуют отдельного процесса установки: введите URL-адрес, и мы приступим к работе – это ключевая особенность Интернета. Однако для этого нам часто приходится извлекать десятки, а иногда и сотни различных ресурсов, которые могут составлять мегабайты данных и должны объединяться за сотни миллисекунд, чтобы обеспечить мгновенную работу в Интернете, к которой мы стремимся.
Добиться мгновенной загрузки веб-страниц с учетом этих требований – непростая задача, поэтому крайне важно оптимизировать эффективность контента: исключить ненужные загрузки, оптимизировать кодировку передачи каждого ресурса с помощью различных методов сжатия и по возможности использовать кеширование, чтобы исключить избыточные загрузки.