Intereting Posts
Как сохранить выбранное значение поля выбора после формы POST или GET Ошибка PHP-кода в PHP MySQL «не может анализировать запрос» Инструмент автоматического комментирования В чем разница между конструкцией языка и встроенной функцией в PHP? make html table <thead> исправлено при прокрутке в динамическом <tbody> в php Генерировать XML из файла в каталоге через PHP Как я могу упорядочить результат запроса так же, как идентификатор, указанный в условии WHERE? Facebook Restful PHP Client – получение событий пользователя Ошибка (# 200) Пользователь не разрешил приложению выполнять это действие Почему strip_tags не работает в PHP? Echo многомерный массив в PHP Каков наилучший способ вывода всех данных из таблицы на страницу без сбоя страницы? Как преобразовать вариант объекта массива 8209 в VT_VARIANT Добавление класса, если условие соответствует в Angular JS WAMPserver – почему стек установлен с двумя файлами php.ini?

Обработка Php против Apache RewriteRules и RegExp: какой из них быстрее?

Я уже прочитал это, но он не отвечает на мой вопрос.

Вот мой сценарий: я работал над своей собственной структурой, которой я горжусь (многоязычный, шаблонный и т. Д.). Но мне пришлось столкнуться с одной проблемой: многоязыковая обработка шаблонов была выполнена в Php. 800 строк кода, проанализируйте хост, чтобы посмотреть, где искать, чтобы прочитать шаблоны и так далее. Это было грязно, и я уверен, что это было неэффективно, хотя я не проверял его эффективность . Он имел дело с множеством массива ( array_push() , array_key_exists() и так далее)

Я переписал весь Php-файл, теперь он создает свой собственный «кеш-файл», и почти вся работа выполняется Apache перед тем, как перейти в файл Php. Файл Php анализирует только то, что находится в _GET .

Но я беспокоюсь об одном: быстро ли RegExp? В моем предыдущем файле Php я много играл с array_xx() , но раньше не было Apache RewriteRules .

Я не знаю о производительности RegExp, и я не знаю об Apache RewriteRules и времени, которое требуется для инициализации переменных среды. Я делаю это много (см. После). Возможно, после этих объяснений кто-то может сказать мне, что «нет проблем, ваш RegExp не сложный, Apache справляется с этим быстро», или «немедленно прекратите это, вы можете столкнуться с RegExp» и так далее.

Это советы и предупреждения о производительности на «Apache RegExp RewriteRules» и «Обработка URL-адресов Php вместо Apache».

Здесь все мои RewriteRule, и мне просто интересно, могут ли они замедлить работу моего веб-сервера Apache больше, чем мой предыдущий файл Php .

 RewriteMap maprns dbm:/rns.map RewriteMap mapdps dbm:/dps.map RewriteMap mapcts dbm:/cts.map RewriteMap ts dbm:/ts.map RewriteRule /404.php - [QSA,E=PLOCAL:${ts:www\.}] RewriteCond %{ENV:PLOCAL} ^default\.([a-zA-Z0-9\-]+)\.$ RewriteRule /404.php - [QSA,E=L:%1,E=PLOCAL:${ts:%1\.}] RewriteCond %{ENV:PLOCAL} !^$ RewriteCond %{HTTP_HOST} ([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ RewriteRule (.*) /404.php?L=%{ENV:L}&Pt=%{ENV:PLOCAL}&Pt_cm=${ts:cm.}&h_static=%{ENV:L}.s.%2.%3 [QSA,L] RewriteCond %{HTTP_HOST} ((([a-zA-Z0-9\-]+)\.)+)(s|static)\.(([a-zA-Z0-9\-]+\.)+)([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ RewriteRule (.*) - [QSA,E=L:%3,E=PLOCAL:${ts:%1%5|notfound},E=Pcm:${ts:cm.%5},E=STATIC:1] RewriteCond %{ENV:PLOCAL} ^$ RewriteCond %{HTTP_HOST} ((([a-zA-Z0-9\-]+)\.)+)(s|static)\.([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ RewriteRule (.*) - [QSA,E=L:%3,E=PLOCAL:${ts:%1|notfound},E=Pcm:${ts:cm.},E=STATIC:1] RewriteCond %{ENV:PLOCAL} ^$ RewriteCond %{HTTP_HOST} (([a-zA-Z0-9\-]+)\.)((([a-zA-Z0-9\-]+)\.)+)([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ RewriteRule (.*) - [QSA,E=L:%2,E=PLOCAL:${ts:%1%3|notfound},E=Pcm:${ts:cm.%3}] RewriteCond %{ENV:PLOCAL} ^$ RewriteCond %{HTTP_HOST} (([a-zA-Z0-9\-]+)\.)([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ RewriteRule (.*) - [QSA,E=L:%2,E=PLOCAL:${ts:%1|notfound},E=Pcm:${ts:cm.}] RewriteCond %{ENV:PLOCAL} ^default\.([a-zA-Z0-9\-]+)\.(([a-zA-Z0-9\-]+\.)+) RewriteRule (.*) - [QSA,E=L:%1,E=PLOCAL:${ts:%1\.%2|notfound},E=Pcm:${ts:cm.%2}] RewriteCond %{ENV:PLOCAL} ^default\.([a-zA-Z0-9\-]+)\.$ RewriteRule (.*) - [QSA,E=L:%1,E=PLOCAL:${ts:%1\.|notfound},E=Pcm:${ts:cm.}] RewriteCond %{ENV:PLOCAL} ^$ [OR] RewriteCond %{ENV:PLOCAL} notfound RewriteRule .* - [R=404,L] RewriteRule (.*) $1?L=%{ENV:L}&Plocal=%{ENV:PLOCAL}&Pcm=%{ENV:Pcm} [QSA] RewriteCond %{ENV:STATIC} !^$ RewriteRule (.*)(\.(css|js|pdf|jpg|jpeg|gif|png)){1}$ $1$2 [QSA,E=EXT:$3] RewriteCond %{ENV:EXT} (jpg|jpeg|gif|png) RewriteRule (.*) - [QSA,E=EXT:img] RewriteCond %{ENV:STATIC} !^$ RewriteCond %{ENV:EXT} !([az]+) RewriteRule .* - [L,R=404] RewriteCond %{ENV:STATIC} !^$ RewriteCond %{ENV:EXT} (css|js)$ RewriteRule (.*) /%1.php?%1=$1&static=1 [QSA,L] RewriteCond %{ENV:STATIC} !^$ RewriteCond %{DOCUMENT_ROOT}/%{ENV:PLOCAL}/%{ENV:EXT}%{REQUEST_FILENAME} -f RewriteRule ^(.+) %{DOCUMENT_ROOT}/%{ENV:PLOCAL}/%{ENV:EXT}%{REQUEST_FILENAME} [QSA,L] RewriteCond %{ENV:STATIC} !^$ RewriteCond %{DOCUMENT_ROOT}/%{ENV:Pcm}/%{ENV:EXT}%{REQUEST_FILENAME} -f RewriteRule ^(.+) %{DOCUMENT_ROOT}/%{ENV:Pcm}/%{ENV:EXT}%{REQUEST_FILENAME} [QSA,L] RewriteCond %{ENV:STATIC} !^$ RewriteRule .* - [L,R=404] RewriteRule ^/$ /index.php [QSA,L] RewriteRule /d-envoyer-lte-par-mail/ /d_envoyer_lte_par_mail.php [QSA,L] RewriteRule /d-creer-editer/ /d_creer_editer.php [QSA,L] RewriteRule /d-mail-ver/(.*)/$ /d_mail_ver.php?chaine_vation=$1 [QSA,L] RewriteRule /d-mail-ver/ /d_mail_ver.php [QSA,L] RewriteRule /i/lg/$ /i/lg.php [QSA,L] RewriteRule /i/lg-ver/$ /i/lg_ver.php [QSA,L] RewriteCond %{HTTP_HOST} ^s\.(.*) [NC] RewriteRule /contact-([0-9]+)-([0-9]+)-([a-z0-9]+)\.png$ /d_image_telephone.php?no=$1&id=$2&chaine_vation=$3 [QSA,L] RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule /d-contact/numero-([0-9]+)-([a-z0-9]+)/$ /d_message.php?id=$1&chaine_vation=$2 [QSA,L] RewriteRule ^/d-(dtl|ann)/offre/(.*)/$ /d-$1/$2/$3?d_type=1 [QSA,NC] RewriteRule ^/d-(dtl|ann)/demande/(.*)/$ /d-$1/$2/$3?d_type=2 [QSA,NC] RewriteRule ^/d-dtl/(.*)/numero-([0-9]+)/$ /d-dtl/?val_ct=$1&id=$2 [QSA,NC,E=ct:${mapcts:$1|notfound}] RewriteRule ^/d-ann/(.*)/numero-([0-9]+)-([a-z0-9]+)/$ /d-ann/?val_ct=$1&id=$2&chaine_ann=$3 [QSA,NC,E=ct:${mapcts:$1|notfound}] RewriteCond %{ENV:ct} ([0-9]+) RewriteRule /d-(dtl|ann)/ /d_$1.php?ct=%{ENV:ct} [QSA,NC,L] RewriteRule ^/d/offres/(rn|dp|ct)/(.*)/$ /d/$1/$2/?d_type=1 [QSA,NC] RewriteRule ^/d/demandes/(rn|dp|ct)/(.*)/$ /d/$1/$2/?d_type=2 [QSA,NC] RewriteRule ^/d/(.*)/d-([0-9]+)-a-([0-9]+)/$ /d/$1/$2/?start=$3&end=$4 [QSA,NC] RewriteRule ^/d/rn/([az\-\_0-9]+)/(.*)/$ /d/$2/?val_rn=$1 [QSA,NC,E=rn:${maprns:$1|notfound}] RewriteRule ^/d/rn/(.*)/$ /d/?val_rn=$1 [QSA,NC,E=rn:${maprns:$1|notfound}] RewriteRule ^/d/dp/(.*)/$ /d/?val_dp=$1 [QSA,NC,E=dp:${mapdps:$1|notfound}] RewriteRule ^/d/ct/(.*)/$ /d/?val_ct=$1 [QSA,NC,E=ct:${mapcts:$1|notfound}] RewriteCond %{ENV:rn} notfound [OR] RewriteCond %{ENV:dp} notfound [OR] RewriteCond %{ENV:ct} notfound RewriteRule .* - [L,R=404] RewriteCond %{SCRIPT_FILENAME} /d/ RewriteCond %{QUERY_STRING} !start=(.+) RewriteRule (.*) $1?start=1 [NC,QSA] RewriteCond %{SCRIPT_FILENAME} /d/ RewriteCond %{QUERY_STRING} !end=(.+) RewriteRule (.*) $1?end=20 [NC,QSA] RewriteCond %{ENV:rn} ([0-9]+) [OR] RewriteCond %{ENV:dp} ([0-9]+) [OR] RewriteCond %{ENV:ct} ([0-9]+) RewriteRule /d/ /d_lte.php?rn=%{ENV:rn}&dp=%{ENV:dp}&ct=%{ENV:ct} [QSA,L] RewriteRule .* - [L,R=404] 

Это будет зависеть от ваших серверов, памяти и т. Д. Единственный способ узнать наверняка – запустить тест производительности, взглянуть на httperf для одного.

Субъективно, я могу сказать вам, что у нас есть около 450 строк правил перезаписи в нашем .htaccess на работе, и, хотя всегда лучше всего как можно меньше, правила перезаписи НЕ являются узким местом приложения на сегодняшний день (и мы служим несколько тысяч запросов в секунду).

Поэтому, имея в виду это, я не стал бы слишком беспокоиться об этом. У вас больше шансов столкнуться с проблемами с неоптимизированными базами данных, недостаточным кэшированием и многими другими вещами, прежде чем вы перейдете к тому, что правила перезаписи являются самой медленной частью вашей системы.

Ваш набор правил перезаписи выглядит как бы дезорганизованным, поэтому я попытаюсь потратить некоторое время на его организацию в более значимую структуру URL-адресов (и добавить 301 переадресацию из старого URL-адреса). Вы можете посмотреть, как маршрутизация обрабатывается в общих рамках HMVC, таких как Kohana, Codeigniter или Symfony.

Для переносимости производительности и серверной платформы вам необходимо переписать Apache на ваш index.php, а затем попытаться смягчить сложную обработку пути / запроса на PHP с помощью $ _SERVER ['REQUEST_URI'].

Я бы сделал что-то подобное в PHP.

 $uri = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $request = parse_url($uri); 

Затем вы можете играть с помощью $ request и извлекать / обрабатывать его любым способом.

Лучше всего поместить это в файл конфигурации apache vhost / httpd. Затем его только разобрал и только выполнил, что действительно быстрее, чем в файле .htaccess!