Я оптимізував час завантаження сторінки веб-сайту. Одним із способів було поєднання декількох HTTP-запитів для CSS в один об'єднаний HTTP-запит. Але один із рецензентів задав цікаве запитання: чи не паралельне завантаження декількох файлів CSS скоротить час завантаження сторінки?
Я ніколи не розглядав цей варіант, тому що єдине, що я читав в Інтернеті, це те, що зменшення кількості (блокування) запитів HTTP є ключовим фактором для швидшої веб-сторінки (хоча ця сторінка Google Pagespeed Insights, очевидно, не чітко визначає це 1 ).
Я бачу кілька причин, через які паралелізація не підвищила б продуктивність або мала дуже мало значення (переважила користь використання меншої кількості HTTP-запитів):
- Налаштування нового з'єднання дорого. Хоча налаштування декількох підключень може здійснюватися паралельно, браузери використовуватимуть щонайменше приблизно 4-6 підключень (залежно від браузера), тому завантаження паралельно CSS блокує завантаження інших ресурсів, таких як JavaScript та зображення.
- Налаштування HTTPS-з'єднання потребує додаткових даних. Я читав, це легко може бути декілька КБ даних. Це кілька додаткових даних, які потрібно надсилати по дроту, замість CSS, які ми насправді хочемо надсилати.
- Завдяки алгоритму повільного запуску TCP, чим більше даних буде надіслано через з'єднання, тим швидше буде з'єднання. Отже, триваліші з'єднання фактично надсилатимуть дані набагато швидше, ніж нові. Дивіться, наприклад, протокол SPDY, який використовує єдине з'єднання для покращення часу завантаження сторінки.
- TCP - це абстракція: все ще є (як правило) лише одне базове з'єднання. Тож хоча використовується декілька запитів, дані, що надсилаються по дроту, не обов'язково можуть скористатися безліччю з'єднань взагалі для підвищення швидкості.
- Підключення до Інтернету за своєю суттю ненадійне, особливо в мобільному. Один запит може бути виконаний значно швидше, ніж інший. Використання декількох запитів для CSS означає, що надання веб-сторінки блокується до останнього запиту, що закінчиться, що може бути значно пізніше, ніж середнє з'єднання.
Отже, чи є взагалі якась користь у паралелізації HTTP-запитів на файли CSS?
Примітка / оновлення: всі файли CSS блокуються візуалізацією. Файли CSS, які вже не переміщені за межі критичного шляху.