Сергей Д.
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
Дмитрий Васильковский
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 сообщения
#15 лет назад
For($i=0;$i>1000;$i++)
О_О

Атас! Индусы наступают, спасайся кто может!
Сергей Д.
326 сообщений
#15 лет назад
Цитата ("elosoft"):
Во вторых я не говорил, что разницы нет. Я сказал, что это не приципиально т.к. разница появиться только на 9 знаке после запятой.

Не принципиально??? Вы что, мой пример совсем не поняли? Разница значений, возвращённых функцией microtime() не учтёт секунд.
Сергей Д.
326 сообщений
#15 лет назад
Цитата ("VOPLI"):
Цитата ("oren"):
Чем это правильнее?

В первом случаи от a1 до a2 ещё замеряем скорость присвоения $b1 = microtime(true);
Ну во втором $a2 = microtime(); Процессы разные, присвоение может занимать разное время!

Я не меряю скорость! Я показываю разницу между microtime() и microtime(true). И мой скрипт выполнится примерно за секунду, а ваш за две :-)
Андрей К.
1172 сообщения
#15 лет назад
Кстати, VOPLI, что у вас в адресной строке указано?