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

SymLinks против PHP включает (производительность)

Что из этих двух проще / быстрее для обработки на сервере Linux с Apache?

А) Символьная ссылка, указывающая на файл php:

file-sym.php ---> file-orig.php

Б) Файл PHP (file-inc.php) включая другой файл PHP (file-orig.php) вот так:

Содержимое file-inc.php

<?php 
    include('file-orig.php'); 
?>

Любопытно, проводил ли кто-нибудь тесты!

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

А)

  1. читать файл (на ext2 + символические ссылки включены в inode, следовательно, только один поиск)
  2. читать другой файл
  3. выполнить php

Б)

  1. читать файл
  2. выполнить php
  3. читать другой файл
  4. выполнить php

Я думаю, вариант include () хорош для пользователей Windows, так как в их системах не может быть символических ссылок.

Многие администраторы отключают символические ссылки 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 никогда не кэшируются, поэтому они будут выполняться при каждом запросе.

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