PHP - Гуру. Разъясните, please.
326 сообщений
#15 лет назад
Цитата ("VOPLI"):Это тут причём? Обе функции microtime() идентичны для обеих операций, и на результат никак повлиять не могут!
Ё! И вот так Вы программируете!
Посмотрите результат выполнения такого:
echo microtime().' : '.microtime(true)
У меня вот что получилось:
0.57152300 1254048886 : 1254048886.5715
Вы вычитаете строковые значения, содержащие пробелы!
326 сообщений
#15 лет назад
Цитата ("VOPLI"):Несколько раз F5 нажал! Результаты разные, усреднять не стал...
Надо бы несколько миллионов раз. Ну хотя-бы тысяч, если операции тяжёлые
2989 сообщений
#15 лет назад
Цитата ("oren"):Вы ыичитаете строковые значения, содержащие пробелы!
В php это не так уж приципиально. Все равно при арифметических операциях сначала будут приведены типы и результа будет числовой.
756 сообщений
#15 лет назад
Цитата ("elosoft"):Цитата ("VOPLI"):что в корне не верно?
В корне все верно... Просто есть правило, что при сборе статистики одиночные результаты не учитаваются. Правильнее было бы загнать цикл, провести хотя бы несколько сотен измерений и вывести усредненный результат.
Если в результате получим разницу в 10 раз, то в цикле будет тоже самое! Сомниваюсь что это в корне изменит результат!
2989 сообщений
#15 лет назад
Цитата ("VOPLI"):Сомниваюсь что это в корне изменит результат!
Не попробуешь - не узнаешь.
205 сообщений
#15 лет назад
Цитата ("VOPLI"):Цитата ("e1it3"):любопытно посмотреть на код вашего не верного бенчмарка
<?php
$start=microtime();
$id = intval($_GET);
$end=microtime();
$total1=$end-$start;
$start=microtime();
$id = (int) $_GET;
$end=microtime();
$total2=$end-$start;
echo '<br>---------------------------------------------------------------------------------------<br>';
echo "intval = $total1 <br> int = $total2"
?>
статистики нет, тестируете через вебсервер и все в одном скрипте
так вот вы измерили скорость работы вебсервера + браузера + ос + php + напряжение в сети

а теперь самый интересный вопрос, вас чего прет от копеечных оптимизаций которые ничего не решают?
326 сообщений
#15 лет назад
Цитата ("elosoft"):В php это не так уж приципиально. Все равно при арифметических операциях сначала будут приведены типы и результа будет числовой
Да Вы пример мой видели? Посмотрите внимательно! Да как-же так можно программировать!??? Разница принципиальна!
Ещё пример:
$a1 = microtime();
$b1 = microtime(true);
sleep(1);
$a2 = microtime();
$b2 = microtime(true);
echo ($a2-$a1).' : '.($b2-$b1);
По вашему слева и справа от ":" должны быть идентичные результаты?
Смотрите:
-0.00030799999999999 : 0.99970102310181
что там говорите в php не принципиально? Думать говорите на надо?
1172 сообщения
#15 лет назад
Цитата ("elosoft"):В php это не так уж приципиально. Все равно при арифметических операциях сначала будут приведены типы и результа будет числовой.
Абсолютно верно в том плане, что PHP выкинет все, что идет от пробела и сам пробел и приведет к типу float.
НО! Если операции идут очень долго, то при таком методе вы получите только дробные части секунды. И вы не узнаете, выполнялся скрипт 0.15сек или 999.15сек.
oren дело говорит.
Цитата ("oren"):
Смотрите:
-0.00030799999999999 : 0.99970102310181
Да, и такой случай тоже может возникнуть. Обратите внимание на отрицательное число. Оно означает, что для PHP ваш скрипт заканчивается раньше, чем начался, что не есть гуд. ))
205 сообщений
#15 лет назад
Цитата ("VOPLI"):Если в результате получим разницу в 10 раз, то в цикле будет тоже самое! Сомневаюсь что это в корне изменит результат!
ссылка посмотри на график плотности вероятности внимательно, максиум в нуле (зеленый), допустим мы измерили величину как ноль,так вот от нуля есть отклонение, причем в обе стороны.
756 сообщений
#15 лет назад
Цитата ("elosoft"):Цитата ("VOPLI"):Сомниваюсь что это в корне изменит результат!
Не попробуешь - не узнаешь.
Проверил! В 100 циклах!
Результаты:
intval = 3.0000000000002E-5
int = 3.000000000003E-6
Как я и предпологал!
Цитата ("e1it3"):
так вот вы измерили скорость работы вебсервера + браузера + ос + php + напряжение в сети
+скорость выполнения операции $id = intval($_GET) и $id = (int) $_GET!
Цитата ("e1it3"):
копеечных оптимизаций
С операции по нитке- скрипту быстродействие!
Оффтопик
Удивляюсь что ещё не кто не придолбался что у меня теги <br> не по последней спецификации w3c
Удивляюсь что ещё не кто не придолбался что у меня теги <br> не по последней спецификации w3c

756 сообщений
#15 лет назад
Цитата ("oren"):Ещё пример:
Код:
$a1 = microtime();
$b1 = microtime(true);
sleep(1);
$a2 = microtime();
$b2 = microtime(true);
echo ($a2-$a1).' : '.($b2-$b1);
Правельней нужно было сделать так:
$a1 = microtime();
sleep(1);
$a2 = microtime();
$b1 = microtime(true);
sleep(1);
$b2 = microtime(true);
echo ($a2-$a1).' : '.($b2-$b1);
326 сообщений
#15 лет назад
Цитата ("Lisio"):Да, и такой случай тоже может возникнуть. Обратите внимание на отрицательное число. Оно означает, что для PHP ваш скрипт заканчивается раньше, чем начался, что не есть гуд. ))
Всё верно. Видите у меня "sleep(1)"? Вторая разница (с micritime(true)) показала верный результат: 0.99970102310181. Первая разница отбросила секунды и получилось отрицательное число. Впрочем для некоторых здесь это не принципиально

2989 сообщений
#15 лет назад
Цитата ("oren"):что там говорите в php не принципиально? Думать говорите на надо?
Во первыхЦитата ("oren"):
echo microtime().' : '.microtime(true)в принципе не верно. Это два разных времени.
Во вторых я не говорил, что разницы нет. Я сказал, что это не приципиально т.к. разница появиться только на 9 знаке после запятой.
Так, что прежде чем предлагать думать другим, не мешает и самому этим заняться.
326 сообщений
#15 лет назад
Цитата ("VOPLI"):Цитата ("oren"):Ещё пример:
Код:
$a1 = microtime();
$b1 = microtime(true);
sleep(1);
$a2 = microtime();
$b2 = microtime(true);
echo ($a2-$a1).' : '.($b2-$b1);
Правельней нужно было сделать так:
$a1 = microtime();
sleep(1);
$a2 = microtime();
$b1 = microtime(true);
sleep(1);
$b2 = microtime(true);
echo ($a2-$a1).' : '.($b2-$b1);
Чем это правильнее? Я показал то, что нельзя для таких тестов вообще использовать microtime()
756 сообщений
#15 лет назад
Результаты выполнения
$start=microtime(true);
for($i=0;$i>1000;$i++)
{
$id = intval($_GET);
}
$end=microtime(true);
$total1=$end-$start;
$start=microtime(true);
for($i=0;$i>1000;$i++)
{
$id = (int) $_GET;
}
$end=microtime(true);
$total2=$end-$start;
echo '<br>---------------------------------------------------------------------------------------<br>';
echo "intval = $total1 <br> int = $total2"
intval = 1.3113021850586E-5
int = 1.1920928955078E-6
Практически не отличаются от первоначальных иследований!
Ещё вопросы или придирания будут?
756 сообщений
#15 лет назад
Цитата ("oren"):Чем это правильнее?
В первом случаи от a1 до a2 ещё замеряем скорость присвоения $b1 = microtime(true);
Ну во втором $a2 = microtime(); Процессы разные, присвоение может занимать разное время!
1172 сообщения
326 сообщений
#15 лет назад
Цитата ("elosoft"):Во вторых я не говорил, что разницы нет. Я сказал, что это не приципиально т.к. разница появиться только на 9 знаке после запятой.
Не принципиально??? Вы что, мой пример совсем не поняли? Разница значений, возвращённых функцией microtime() не учтёт секунд.
326 сообщений
#15 лет назад
Цитата ("VOPLI"):Цитата ("oren"):Чем это правильнее?
В первом случаи от a1 до a2 ещё замеряем скорость присвоения $b1 = microtime(true);
Ну во втором $a2 = microtime(); Процессы разные, присвоение может занимать разное время!
Я не меряю скорость! Я показываю разницу между microtime() и microtime(true). И мой скрипт выполнится примерно за секунду, а ваш за две :-)