PHP-скрипты по умолчанию интерпретируются каждый раз, когда они вызываются сервером http, поэтому каждый вызов инициирует разбор сценариев и, возможно, компиляцию с помощью Zend Engine. Вы можете избавиться от этого узкого места, используя кеширование сценариев, например APC. Он хранит однажды скомпилированный PHP-скрипт в памяти/на диске и использует его для всех последующих запросов. Прирост часто бывает значительным, особенно в PHP-приложениях, созданных с использованием сложных фреймворков, таких как ZF.
Каждый запрос по умолчанию открывает соединение с базой данных, поэтому вы должны использовать какой-то пул соединений с базой данных или постоянные соединения (которые не всегда работают, в зависимости от конфигурации http server/php). Я никогда не пробовал, но, возможно, есть способ использовать memcache для хранения ручек подключения к базе данных.
Вы также можете использовать memcache для хранения данных сеанса, если они используются для каждого запроса. Их упорство не так важно, и memcache помогает сделать это очень быстро.
Фактическая проблема заключается в том, что PHP работает немного иначе, чем другие фреймворки, поскольку он работает в режиме SSI (на стороне сервера) - каждый запрос обрабатывается сервером http, и если для его выполнения требуется PHP-скрипт, его интерпретатор инициализируется, а скрипты загружаются, анализируются, компилируются и запускаются. Это можно сравнить с тем, чтобы попасть в машину, запустить двигатель и идти на 10 метров.
Другим способом является, скажем, способ приложения-сервера, в котором сам веб-приложение обрабатывает запросы в своем собственном цикле, всегда обмениваясь соединениями с базой данных и не инициализируя время выполнения снова и снова. Это решение дает гораздо более низкую задержку. С другой стороны, это можно сравнить с тем, что он уже находится в бегущей машине и использует его для управления теми же 10 метрами. ;)
Вышеупомянутые решения для кэширования/предварительной компиляции и объединения в пул наилучшим образом уменьшают накладные расходы init.PHP/MySQL по-прежнему остается решением на основе RDBMS, и есть веская причина, по которой BigTable - это просто крупная распределенная хэш-таблица с крупным распределением (немного упрощение, я знаю) - прочитал High Scalability.
это не может быть сделано с PHP и MySQL ... –
200ms = 0.2 секунд. Вы должны уметь делать * это * в php? – krosenvold
Во-первых, это время, когда Google отображает фактическое время, необходимое для создания страницы (conect, query, echo ...), или это просто время, необходимое для выполнения запроса? Я считаю, что это всего лишь запрос. У меня есть много страниц, которые занимают 0,05 секунды, чтобы загрузить всю страницу. –