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