- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
<?php
function load ($file) {
static $files = null;
$files or $files = [];
if (!isset($files[$file])) {
require($file);
$files[$file] = true;
}
}
$times = 1000000;
$time1 = microtime(true);
for ($i = 0; $i < $times; $i ++) {
require_once('inc.php');
}
$end1 = microtime(true) - $time1;
$time2 = microtime(true);
for ($i = 0; $i < $times; $i ++) {
load('inc.php');
}
$end2 = microtime(true) - $time2;
echo "require_once = $end1 vs \nload = $end2";
Вот это да... require_once работает в ~8 раз медленнее чем функция load. Вывод:
require_once = 16.962311029434 vs
load = 2.6861710548401
Содежания файла inc.php:
<?php echo 'Hello, world!';
Щито я делаю не так?
А что возвращает require_once? Результат, который вернул модуль при его первой и единственой загрузке?
upd: @require_once('nonexistent') вернет вообще ебаное ничего, лол. вар_дамп отказывается это выводить.
Оно ничего не возвращает, это ж фатальная ошибка. До var_dump дело не доходит:
require is identical to include except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include only emits a warning (E_WARNING) which allows the script to continue.
Шах и мат, собакоёбы.
Тут вон были личности, которые волшебные кавычки яростно защищали...
Ждем седьмой версии и phpng короче.
врач сказал - в морг, значит, в морг
Чтобы пройти минное поле нужен хороший проводник :)
Вывод php -v:
Да, [] заменил на array().
require_once = 2.6988000869751 vs load = 0.74880003929138
В том же php 5.4 + xdebug:
require_once = 3.0107998847961 vs load = 24.398400068283
А вообще никто не мешает запустить одновременно несколько FastCGI-серверов на разных портах и использовать в вебе одновременно несколько пыхов.