воскресенье, 20 июня 2004 г.

PHP: include() vs. require()

По материалам ru_php следует, что для включения php-файла нужно пользоватся include(), а не require(), и не изобретать своих функций.
В то же время, функциями include_once() и require_once() пользоваться вообще не нужно. Они намного (в 100-105 раз) медленнее чем изобретенная функция my_include_once().

На основе проведенных тестов справедливо утверждать, что скорость выполнения php-скрипта может варьироваться от 0,005 до 25 секунд.

Технические подробности ниже.

Результаты тестирования:

0.00478544235229 my_include_once()
0.42984147071838 include_once()
0.43468303680420 require_once()
0.47337899208069 my_include()
0.56996216773987 include() (первое включение файла - самое медленное)
0.57470202445984 require() (первое включение файла - самое медленное)

При вложенном файле на 65 КБ:

0.00593957901000 my_include_once()
0.44436344146729 include_once()
0.45239635467529 require_once()
4.86428661346440 my_include()
23.6450767993930 include()
24.7919821739200 require()

Apache/1.3.27 (Win32), PHP 4.3.6 (module), Pentium IV 2.4 GHz


Код волшебной функции my_include_once():

function my_include_once($f)
{
static $ar = array();
if (!array_key_exists(($rf = crc32($f)), $ar))
{
$ar[$rf] = true;
my_include($f);
}
}

Код функции my_include():

function my_include($f)
{
eval('?>'. file_get_contents($f) .'
}

1 комментарий:

Unknown комментирует...

Функция работает ровно с такой-же скоростью, как и инклюд.