Почему include('Код.php') быстрее...

_RVK_

Новичок
Почему include('Код.php') быстрее...

На досуге провел следующий тест.
Замерил время выполнения 10ти циклов
PHP:
$i=0;
while ($i<10000) $i++;
$i=0;
while ($i<20000) $i++;
......
$i=0;
while ($i<100000) $i++;
Далее разбросал эти циклы по файлам и каждый подключил include(); Замерил время.

Уменя получилось что второй вариант в среднем на 5-10% БЫСТРЕЕ!

А как же время на чтение файла? Я понимаю что 5% это ничего, но их вообще быть не должно....
 

_RVK_

Новичок
Второй выглядит так:
PHP:
include 'part1.php';
include 'part2.php';
include 'part3.php';
include 'part4.php';
include 'part5.php';
include 'part6.php';
include 'part7.php';
include 'part8.php';
include 'part9.php';
include 'part10.php';
В файле part1.php код
PHP:
<?php $i=0; 
while ($i<10000) $i++; ?>
В файле part2.php код
PHP:
<?php $i=0; 
while ($i<20000) $i++; ?>
и.тд.
 

Demiurg

Guest
что то ты придумываешь.
без инклудов:
Concurrency Level: 1
Time taken for tests: 19.142 seconds
Complete requests: 20
Failed requests: 0
Broken pipe errors: 0
Total transferred: 3300 bytes
HTML transferred: 0 bytes
Requests per second: 1.04 [#/sec] (mean)
Time per request: 957.10 [ms] (mean)
Time per request: 957.10 [ms] (mean, across all concurrent requests)
Transfer rate: 0.17 [Kbytes/sec] received

с инклудами:
Concurrency Level: 1
Time taken for tests: 19.379 seconds
Complete requests: 20
Failed requests: 0
Broken pipe errors: 0
Total transferred: 3300 bytes
HTML transferred: 0 bytes
Requests per second: 1.03 [#/sec] (mean)
Time per request: 968.95 [ms] (mean)
Time per request: 968.95 [ms] (mean, across all concurrent requests)
Transfer rate: 0.17 [Kbytes/sec] received
 

_RVK_

Новичок
это ab? Я тестировал дедовским методом вычисляя разницу между временем начала и конца работы участка кода.

Да, сори. В первом случае код выглядел так:
PHP:
<?php
 $i=0; 
while ($i<10000) $i++; ?>
<?php $i=0;
while ($i<20000) $i++; 
?>
...... 
<?php $i=0; 
while ($i<100000) $i++;?>
 

young

Новичок
Почему include('Код.php') быстрее...
такое бывает только в одном случае

Конструкция

if ($a) {
тут мого кода
} else {
тут много кода
}

работает медленнее

if ($a) {
include ...
} else {
include ...
}

Все аналогичные (к примеру switch) конструкции имеют те же свойства
 

_RVK_

Новичок
young БН-ОЕПБШУ, ОНВЕЛС Б ЩРНЛ ЯКСВЮЕ РЮЙ. include ДНКФЕМ АШРЭ ЛЕДКЕМЕЕ РЮЙ ЙЮЙ ЯСРЭ НДМЮ,МН ЕЯРЭ МЮЙКЮДЙХ МЮ ВРЕМХЕ Я ДХЯЙЮ. бН-БРНПШУ, С ЛЕМЪ ЯРЮАХКЭМН БРНПНИ ЯОНЯНА БШХЦПШБЮЕР С ОЕПБНЦН. оНЩРНЛС Х БНОПНЯ. ю ЕЯКХ С дЕЛХСПЦЮ БЯЕ МЮНАНПНР РН РСР ЕЫЕ НДХМ БНОПНЯ БНГМХЙЮЕР, ОНВЕЛС?

-~{}~ 03.02.04 17:52:

blin! nepoymu, eto na servere bag 4to li c kodirovkoy? ranshe normalno bilo...
 

Altex

Новичок
Diesel
хоть бы перевел чтоли!
young во-первых, почему в этом случае так. include должен быть медленее так как суть одна,но есть накладки на чтение с диска. Во-вторых, у меня стабильно второй способ выигрывает у первого. Поэтому и вопрос. А если у Демиурга все наоборот то тут еще один вопрос возникает, почему?
-~{}~ 04.02.04 02:10:

/* off-topic */
Diesel
Чтобы расшифровать твою коодировку - нужно сделать преобразование из КОИ в ВИН 2 раза подряд. Думай сам где глюки..
 

Demiurg

Guest
Diesel
в примерах, которые привел young, во втором случае нет необходимости парсить кучу кода.
 

_RVK_

Новичок
это почему во втором случае нет необходимости парсить кучу кода? include включает код из файла. суть от этого не меняется тк код парсится после этого включения. Стого говаря мой пример не отличается от примера с if, тк в while тоже каждый шаг приходится проверять условия. В php нет оператора goto (и слава богу), но логика while такова
PHP:
 l1:
if (i<10000)
{
   i++;
   /*тут много кода*/
   goto(l1);
}
else
{
   goto(l2);
}
l2:
 

Фанат

oncle terrible
Команда форума
про твои примеры тебе никто ничего не говорит.
с ними все давно ясно - руки кривые.
тебе привели пример .
только в одного случая
когда инклюд будет быстрее.
если уж ты не можешь сообразить, что во втором случае инклюд не исполняется и следовательно = не парсится, то тебе вообще не стоит забивать голову такими вещами.
 

_RVK_

Новичок
про твои примеры тебе никто ничего не говорит.
А я созал этот топик для того что бы поговорить именно о моем примере и понять почему этот конкретный пример работает так.

с ними все давно ясно - руки кривые.
Фанат Скажи как кривость моих рук могла повлиять на результат теста. В конце концов это тоже будет ответ на мой вопрос.

Вчера протестировал на FreeBSD у своего провайдера. Там include проигрывает, хотя и не значительно(так и должно быть). Но дома на локале под Win2k стабильно выигрывает ок 10%.
 

_RVK_

Новичок
PHP:
function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
    }

$time_start = getmicrotime();
/*тут код*/
$time_stop = getmicrotime();
 print 'Time:'.($time_stop-$time_start);
 

_RVK_

Новичок
Так. Значит я измеряю время выполнения. Те то время, когда код уже включен в основной, так? Если все так, то по моему тесту должны получаться обсолютно одинаковые результаты.
И почему, в таком случае, когда я нагрузил диск копированием, пример с include стал тормозить и проигрывать примеру без оного жутко.
 

Demiurg

Guest
Diesel
ты знаешь как работает движок php ? я не знаю. И вллбще ты гоняешь за копейками.
 

Falc

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

_RVK_

Новичок
Demiurg мне показался интересным данный вопрос. Поэтому я и спросил. Конечно, в реальных условиях, при большом количестве операций ввода/вывода, это приемущество сойдет на нет.

Falc руки тут не причем. То что есть зависимость от компа, ос, файловой системы, спору нет. Почему то все говорят что этого не может быть, потому что быть этого не может. Хоть бы кто то высказал предположение отличное от того, что мои руки кривые.

Хотя если никому не интересно, можете закрыть тему.....
 
Сверху