Збільшення числа паралельних з'єднань браузера до одного домену з html

Більшість розробників сайтів вже знають, що число з'єднань до сервера у браузерів лімітовану. Більш ранні версії браузерів використовують тільки два з'єднання на сервер, свіжіші побільше (наприклад, «Опера» 11.10 - аж 16).

У загальному випадку алгоритм використання цих сполук досить складний і відрізняється від браузера до браузеру (мається на увазі чи будуть паралельно завантажуються стильові таблиці, скрипти та інше), але загальне правило незмінно - більше свого ліміту браузер з'єднань до сервер не плодить.

Тим часом, це не завжди добре, адже якщо всі з'єднання зайняті, то браузер чекає даних по ним, не ініціюючи нові, навіть якщо канал до сервера дозволяє завантажити щось ще.

Якщо сайт і канал цілком витримають і більшу кількість з'єднань від одного користувача (з урахуванням відвідуваності), тобто хитрість, яку часто використовують - завантажувати статику (картинки, файли стилів та інше) з інших доменів. Їх не обов'язково розташовувати на інших серверах, досить дати одного сервера кілька імен і використовувати їх для завантаження.

Виглядати це може так: static1.example.org, static2.example.org і так далі. «Яндекс», наприклад, вантажить свої дані з домену yandex.st. Як бачите, підходить інший домен будь-якого рівня.

Добре, коли є можливість завести будь-яку кількість доменів якогось рівня на своєму хостингу. Далеко не всі хостери нададуть таку можливість безкоштовно, а простому блогеру платити за ще одне ім'я тільки заради прискорення завантаження навряд чи захочеться.

Нічого страшного, найчастіше у користувача такого хостингу аж чотири домена, просто мало хто про це підозрює. Перші два досить очевидні - хостер часто, крім якогось example.org, заводить ще й www.example.org. Але ж це два різних домену!

Ще два не так очевідни- це домени «example.org.» І «www.example.org.». Зверніть увагу на точку в кінці домену.

Мої експерименти (перевіряв на сервісі BrowserShots. Операційні системи Linux, Windows XP, Mac OS X) говорять про те, що браузери вміють з ними працювати, тобто картинки з URL, де ім'я домену закінчувалося на точку, вантажилися нормально.

Для того, щоб перевірити чи вважають браузери домени з крапкою в кінці і без різними, я створив невеликий скрипт, який віддає картинку без кешування з секундною затримкою.

В експерименті я виставив максимальну кількість з'єднань до сервера в одиницю ( «Опера» і «FireFox» дозволяють це зробити, де це робиться в браузерах на WebKit я не знаю, підкажіть, якщо знаєте) і створив дві HTML-сторінки: одну, де дві картинки з мого скрипта вантажаться з одного домену, другу, де одна з них вантажиться з домена з точкою.

Збільшення числа паралельних з'єднань браузера до одного домену з html

На скріншоті добре помітний результат і видно де який експеримент (по колонці «Домен»). За скриншоту видно, що я використовував добре всім знайомий FireBug, але на Dragonfly з «Опери» картина така ж.

IMHO проблема криється в сесії. У PHP в session_start варто семафор по id сесії, тобто поки виконується один виклик скрипта, всі інші запущені паралельно стоять і чекають. Порівняйте результат з вимкненими сесіями. При виклику скрипта з різних доменів, сесії у них теж будуть різні і блокування не відбувається.

А це не баг? Раптом виправлять?
Існування домену з точкою - НЕ баг, більш того, насправді він рівно так і записується. Те, що домени вважаються різними - баг, можливо на тих браузерах, які я ще не перевірив (IE, WebKit-based), це не працює. У будь-якому випадку, гірше від цього не стане.

IMHO проблема криється в сесії
Ви не праві, більш того, ви абсолютно не в тому напрямку думаєте. Сесії і PHP тут абсолютно ні до чого.

Ви не праві, більш того, ви абсолютно не в тому напрямку думаєте. Сесії і PHP тут абсолютно ні до чого.
Судячи по картинці з firebug, таки при чому. Ризикну припустити, що сіре на шкалі - очікування, синє - прийом. І з цього випливає, що запит браузер в обох випадках послав одночасно.

Втім, ідея-то вантажити картинки з "різних" доменів звичайно правильна. Але ось тест - схоже помилковий.

Судячи по картинці з firebug, таки при чому. Ризикну припустити, що сіре на шкалі - очікування, синє - прийом. І з цього випливає, що запит браузер в обох випадках послав одночасно.
Ні, непрічём.

Сіре - це «блокування» (зайнятий канал з'єднання з сервером).

Економія на сірниках. Зробити заплутану неочевидну схему заради виграшу в 0.1%.

Як Гугл недавно порадував винаходом власного http-протоколу, виграш якого в тому, що в послідовних запитах не передаються поля типу user-agent.

У вас є аргументи або ви «так відчуваєте», що це «економія на сірниках»? Користь такої економії давно порахована, є купа статей на цю тему.