Тестил вчера, долго и упорно.
1. Время выполнения я замерял в PHP через microtime(), схематично так:
<?php
$tstart = microtime(1);
//<---
Коннект к базе, memcahced
Сам скрипт
//--->
$tend = microtime(1);
echo round(1000000*(tend-tstart));
?>
Полноценные запросы 7-10 мс (разумеется при условии что нет сложных выборок из базы, либо выборки закешированы).
А вот с POST не бред.
Сделал такой маленький тест, вместо полноценного скрипта, php-заглушка.
<?php
echo 'test';
?>
Делаем к этому скрипту Ajax-запрос методом GET. Время отклика (firebug) 60-80мс.
Изменяем скрипт и делаем запрос методом POST. И, фантастика, время загрузки резко увеличивается до 140-180мс. нет никаких запросов к базе, скрипт не меняли (firebug показывает, что основное време тратится на "Ожидание", в то время как "DNS", "Подключение" и "Отправка" по нулям, "Загрузка" 3-5мс).
Далее, переделал 1 простой запрос (выборка 1 значения: обращение к memcached и к базе если нет в кеше) от клиента к серверу из POST в GET. Обработка данных такая же, а время загрузки ответа от сервера упало с 170мс до 70-90мс.
Далее, отказался от PHP. Написал небольшую fcgi-c++ программку (выборка 1 значения из таблицы). Запустил на сервере. Запросы POST к ней идут 150-300мс. GET запросы 65-100мс.
Цитата перевода статьи с
developer.yahoo.com
Цитата:
|
Команда Yahoo! Mail обнаружила, что при использовании XMLHttpRequest, POST выполняется в браузерах как двухэтапный процесс: сначала отправляются заголовки, затем данные. Поэтому лучше использовать GET, который отправляет только один TCP-пакет (если только у Вас небольшое количество cookies). Максимальная длина URL в IE - 2K, так что, если Вы посылаете больше, чем 2 К данных, то Вы не сможете использовать GET.
Был обнаружен интересный побочный эффект: POST без отправки каких-либо данных, ведёт себя как GET. Согласно HTTP-спецификации, GET предназначен для получения информации, поэтому имеет смысл (семантически) использовать GET только тогда, когда Вы просто запрашиваете данные, а не передаёте их для хранения на стороне сервера.
|