Назад | Перейти на главную страницу

Более быстрый вариант: перенаправить через PHP на PHP или переписать мод Apache перенаправить на PHP?

Я хочу определить, является ли перезапись мода Apache .htaccess более быстрым способом перенаправления в файл PHP по сравнению с перенаправлением из одного файла PHP в другой с использованием основной функции перенаправления заголовка PHP.

Я огляделась и ничего не нашла на эту тему. Любая помощь будет оценена.

Примечание: я предполагаю, что под «перенаправлением» вы имеете в виду правило перезаписи, которое фактически не использует флаг [R], а вместо этого «перенаправляет» запрос в другой файл PHP - например, без флагов вообще или с флагом [L].

Если это предположение неверно, то взгляните на мой аргумент «Замечание по производительности», который все еще актуален.

Правило .htaccess определенно будет быстрее!

Вот почему:

  1. с использованием правила .htaccess: когда запрос поступает в Apache, он проверяет .htaccess, чтобы узнать, нужно ли что-то делать с этим запросом; заметив правило перезаписи, он перенаправит запрос на PHP, и посетитель сайта сразу получит окончательный результат
  2. используя PHP header: приходит запрос, обрабатывается Apache, затем передается в PHP, затем PHP отправляет браузеру вашего посетителя заголовок перенаправления страницы, браузер отправляет другой запрос, Apache обрабатывает его, передает его PHP, и только после этого ваш посетитель наконец получает то, что хотел!

Примечание по производительности: в любом сценарии (даже в гигабитной локальной сети) вариант №1 выше будет быстрее. Регулярные выражения могут работать медленно, но Apache - это программа на языке C, уже находящаяся в памяти, а PHP - это интерпретируемый язык, который должен прочитать и загрузить файл сценария перед его обработкой. Таким образом, я действительно ожидал лучшей производительности от правила перезаписи Apache. Однако основным фактором является дополнительный HTTP-запрос-ответ для метода №2.

Если вы настаиваете на том, чтобы делать это с помощью PHP, примите во внимание следующее:

  1. кешировать весь вывод, который вы генерируете в своем приложении PHP
  2. если вы обнаружите условие перенаправления - уничтожьте кешированный вывод, а затем
  3. включите требуемый файл PHP для генерации нового вывода - или вызовите функцию, которая выдаст желаемый результат, если вам нужно что-то другое

Этот подход также будет быстрее, чем header-исходя из.

Что касается производительности, вы должны учитывать два ее аспекта. Во-первых, это производительность обработки на сервере, а во-вторых, производительность, с которой сталкиваются конечные пользователи.

Если вы используете какой-либо вид перенаправления, будь то с помощью правила перенаправления PHP или Apache (которое может быть в файле конфигурации .htaccess или Apache, конечный клиент должен сначала дождаться первого ответа (перенаправления), а затем отправить другой запрос на этот URL-адрес, прежде чем окончательно получить желаемый ответ.

Если производительность конечного пользователя важна для вас (например, если ваша целевая аудитория находится в Китае или что-то в этом роде), вам не следует использовать перенаправление (ни PHP, ни Apache), а вместо этого переписать исходный запрос, чтобы пользователь получил правильный ответ на первая просьба.

Следует иметь в виду, что использование файлов .htaccess все замедляет (если этот параметр даже включен). Поместите вашу перезапись в один из ваших файлов .conf для Apache (httpd.conf или virtual-hosts.conf), а затем установите AllowOverride none будет еще быстрее.

Что касается php vs mod_rewrite, сложно сказать. Они оба так быстры, что я сомневаюсь, что это важно.

Моя интуиция подсказывает мне, что htaccess будет иметь чтобы быть быстрее, но ничто не может заменить его собственное тестирование в вашей конкретной среде.