Сеанс WWDC 2012 706 - Рекомендации по работе в сети объясняет HTTP-конвейеризация.
- По умолчанию отключено на iOS
- В беседе он описал это как огромный выигрыш в производительности.
Почему вы не хотите его использовать?
Сеанс WWDC 2012 706 - Рекомендации по работе в сети объясняет HTTP-конвейеризация.
Почему вы не хотите его использовать?
Чтобы конвейерная обработка работала, ответы должны возвращаться в том порядке, в котором они были запрошены. Наивная реализация сервера может просто отправить ответ, как только он будет рассчитан. Если несколько запросов отправляются параллельно, и первый запрос занимает больше времени для обработки (например, обработка большего изображения), тогда ответы будут не в порядке.
Это проблема для клиента, поскольку HTTP - это протокол без состояния, клиент не имеет возможности сопоставлять запросы с ответами. Он зависит от того, как ответы вернулись.
Сервер ДОЛЖЕН отправить свои ответы на эти запросы в том же порядке, что и полученные запросы.
Даже если сервер правильно поддерживает конвейерную обработку, могут возникнуть проблемы с производительностью, потому что все последующие запросы должны ждать завершения первого (блокировка строки).
В этой статье говорится о потере производительности при некоторых обстоятельствах и возможности атаки на отказ в обслуживании.
В этой статье также указывается, что конвейерная обработка не является массовой победой.
WWDC 2015 - Networking with NSURLSession объясняет, что глава блокировки строк очень хорошо работает. (Решением является переход на HTTP 2, который поддерживает приоритеты)
Таким образом, проблемы с конвейерной обработкой HTTP: