Замедлит ли сайт ненужные php файлы? - PullRequest
8 голосов
/ 04 февраля 2010

Этот вопрос может побудить некоторых людей сразу сказать окончательное ДА или НЕТ, но, пожалуйста, продолжайте читать ...

У меня есть простой веб-сайт, где есть 30 php-страниц (у каждого есть свой php-код на стороне сервера + HTML / CSS и т. Д.). Нет сложной иерархии, ничего. Всего 30 страниц.

У меня также есть набор чисто фоновых php-файлов, в которых есть код для сохранения материалов в базе данных, аутентификации, отправки электронных писем, обработки заказов и тому подобного. Они будут повторно использованы этими 30 страницами контента.

У меня есть главный php-файл, в который я отправляю параметр. Это указывает, какой из этих 30 файлов необходим, и включает соответствующую страницу содержимого. Но для каждого из них может потребоваться переменное количество фоновых файлов. Например, для одной страницы содержимого может не потребоваться ничего от серверной части, в то время как для другой может потребоваться код базы данных, в то время как для чего-то еще может потребоваться адрес электронной почты, база данных и код аутентификации и т. Д. *

Я предполагаю, что любая необходимая внутренняя страница может быть включена в соответствующую страницу содержимого, но одно небольшое изменение в пути, и мне нужно отредактировать десятки файлов. Будет слишком громоздко проверять , какая страница контента запрашивается (тип переключателя) и включать соответствующие фоновые файлы в основной файл php. Опять же, я должен сделать много изменений, если меняется один путь.

Из-за лени, я включил ВСЕ фоновые файлы в мастер-файл, чтобы ни одна страница контента не могла запросить что-то, что не включено.

Первый вопрос - это хорошая практика? если это вообще сделано кем-либо.

Во-вторых, будут ли проблемы с производительностью или какие-либо другие проблемы из-за меня, включая все фоновые файлы независимо от того, нужны ли они?

EDIT

Сайт посещает от 3000 до 4000 посещений в день.

Ответы [ 9 ]

7 голосов
/ 04 февраля 2010

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

Но вы можете сэкономить время и просто включить APC в php.ini (это расширение PECL, поэтомувам нужно установить это).Он будет кешировать проанализированный контент ваших файлов, что значительно ускорит процесс.

Кстати: нет ничего плохого в лени, это даже достоинство ;)

4 голосов
/ 04 февраля 2010

Если ваш сайт является объектно-ориентированным, я бы рекомендовал использовать автозагрузку (http://php.net/manual/en/language.oop5.autoload.php).

При этом используется магический метод (__autoload) для поиска класса в случае необходимости (он ленив, как и вы!), Поэтому, если конкретной странице не нужны все классы, ей не нужно их получать!

Опять же, это зависит от того, является ли он объектно-ориентированным или нет ...

1 голос
/ 04 февраля 2010

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

1 голос
/ 04 февраля 2010

Это замедлит ваш сайт, хотя, вероятно, не на заметную сумму.Это не похоже на здоровый способ организовать ваше приложение;Я бы переосмыслил это.Попробуйте отделить логику приложения (например, большую часть кода на стороне сервера) от уровня представления (например, HTML / CSS).

0 голосов
/ 06 февраля 2010

Это действительно замедлит ваш сайт.Большинство из-за относительной медленной загрузки и обработки PHP.Чем больше кода вы хотите включить, тем медленнее будет работать приложение.

0 голосов
/ 04 февраля 2010

Как уже говорили другие, это не должно сильно замедлять ход событий, но это не «идеал».

Если основная проблема в том, что вы слишком ленивы, чтобы менять пути для всех включенных файлов (если путь когда-либо потребуется обновить в будущем). Затем вы можете использовать константу для определения пути в вашем главном файле и использовать эту константу в любое время, когда вам нужно включить / потребовать файл.

define('PATH_TO_FILES', '/var/www/html/mysite/includes/go/in/here/');

require_once PATH_TO_FILES.'database.php';
require_once PATH_TO_FILES.'sessions.php';
require_once PATH_TO_FILES.'otherstuff.php';

Таким образом, если путь изменяется, вам нужно изменить только одну строку кода.

0 голосов
/ 04 февраля 2010

Учитывая размер вашего сайта;если вы не заметили замедления, зачем пытаться это исправить?

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

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

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

Расмус Лердорф (человек, стоящий за PHP) согласен: http://pooteeweet.org/blog/538

0 голосов
/ 04 февраля 2010

Некоторые недостатки PHP-компиляции можно перенести, используя XCache . Этот PHP-модуль будет кэшировать PHP-код операции, что уменьшает время компиляции и производительность.

0 голосов
/ 04 февраля 2010

Я живу по принципу «включай как можно меньше, столько, сколько нужно», поэтому я обычно просто включаю свою конфигурацию и обработку сеанса для всего, и тогда каждая страница включает в себя только то, что им нужно, используя путь включения, определенный в конфигурации включения, такдля изменения пути вам все еще нужно изменить один файл.

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

...