Тест web фреймворков
Oleg Alistratov
ali at ali.org.ua
Tue Jun 14 08:41:21 PDT 2011
> У меня есть встречное предложение, щаз попробую его сформулировать.
Вот что меня интересовало, с точки зрения HP фреймворков.
Какую подготовительную работу проводит фреймоворк, прежде чем отдать
управление в пользовательский хандлер? что делает сразу, а что умеет
отложить?
Пример: у хандлера обычно уже есть доступ ко всем HTTP-заголовкам,
разложенным в массив, хеш или Env. Единственный интерфейс, который
позволяет без нужды _не_ парсить заголовки из потока — это mod_perl.
А ведь ситуацию, когда заголовки не нужны, представить не сложно.
Скажем, мы хотим всегда редиректить с http:// на https://,
поэтому, если в потоке не встречается строка HTTPS,
мы ставим редирект, не делая больше ничего (скажем, не принимаем тело
запроса). Или еще нагляднее: если первыми символами в запросе
идут HTTP/0.9, сразу все бросить и вернуть 505.
Ну а обычно фреймворк уже разобрал заголовки, распарсил куки,
если тело multipart - разложил его, сука, по файлам даже, хотя
его не просили :)
Итак, вопрос вот в чем: в каком фреймворке какие данные доступны
lazy образом? могу ли я получить protocol_version() без того, чтобы
к моменту вызова еще не были распарсены заголовки? Уверен ли я в том,
что могу сделать отлуп по куке до того, как фреймоворк распатронит
query?
Скорее всего да, но сравнить фреймворки на предмет lazy вычислений
мне хотелось. Это, собственно, и половина ответа, почему одни пошустрее
могут быть, а другие нет.
Почему я этим не занялся, ну кроме лени? Потому что, подумав,
решил, что почти все задачи, где можно сэкономить микросекунды
на разборе запроса, решаются обычно конфигурацией сервера и до
приложения просто не доходят.
Я попробовал себя убедить, что держать логику такого рода редиректов,
рерайтов и возвратов гораздо удобней внутри приложения (ну наглядней, и
редактировать легче), но не убедил :)
Так что вопрос исключительно академический, хотя если есть интерес —
можно попробовать разобраться.
--
Али
More information about the Kiev-pm
mailing list