.png)
Какой из этих двух вариантов проще/быстрее обработает сервер Linux, работающий под управлением Apache?
А) Символическая ссылка, указывающая на php-файл:
file-sym.php ---> file-orig.php
Б) Файл PHP ( file-inc.php
), включающий другой файл PHP ( file-orig.php
), например:
Содержимое файла-inc.php
<?php
include('file-orig.php');
?>
Интересно, проводил ли кто-нибудь какие-либо тесты!
решение1
Моя интуиция подсказывает мне, что симлинк будет быстрее, потому что вам придется читать меньше данных при работе с первым звеном в этой цепочке. Я не уверен, что есть большая разница, попробуйте сравнить эти два варианта, чтобы увидеть разницу.
А)
- прочитать файл (в ext2+ символические ссылки включены в inode, поэтому только один поиск)
- прочитать другой файл
- выполнить php
Б)
- прочитать файл
- выполнить php
- прочитать другой файл
- выполнить php
Полагаю, вариант include() подойдет пользователям Windows, поскольку в их системах не могут быть символические ссылки.
решение2
Многие администраторы отключают символические ссылки Apache из соображений безопасности и производительности.
Для повышения производительности, пожалуйста, просмотрите эту страницу по настройке Apache:http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
Везде, где в вашем URL-пространстве нет Options FollowSymLinks или есть Options SymLinksIfOwnerMatch, Apache придется делать дополнительные системные вызовы для проверки символических ссылок. Один дополнительный вызов на компонент имени файла. Например, если у вас есть:
<Directory />
DocumentRoot /www/htdocs
Options SymLinksIfOwnerMatch
</Directory>
и делается запрос для URI /index.html. Затем Apache выполнит lstat(2) для /www, /www/htdocs и /www/htdocs/index.html. Результаты этих lstats никогда не кэшируются, поэтому они будут появляться при каждом запросе.
Вы можете видеть, как символические ссылки могут стать причиной экспоненциального снижения производительности в зависимости от вашей среды и кода.