Быстродействие - взаимосвязь с кривыми руками.

young

Новичок
Быстродействие - взаимосвязь с кривыми руками.

2Screjet: Топик специально для тебя, так как тему быстродействия php ты затрагивал уже в двух разных топиках.

В очень большой степени быстродействие определяется степенью кривости рук.

Пример:

PHP:
<?
function getmicrotime(){ 
   list($usec, $sec) = explode(" ",microtime()); 
   return ((float)$usec + (float)$sec); 
}

define("SIZE", 100000);

$arr = array();
for ($i = 0; $i < SIZE; $i++) {
	$arr[$i] = $i * $i;
}

$time_start = getmicrotime();
for ($i=0; $i < count($arr); $i++){ 
	$out = "value of $i is $arr[$i] test";
}
echo "Time: ".(getmicrotime() - $time_start)." seconds<br>"; 

$time_start = getmicrotime();
$sizeof = sizeof($arr);
for ($i=0; $i < $sizeof; $i++){ 
	$out = "value of". $i. " is ". $arr[$i] ."test";
}
echo "Time: ".(getmicrotime() - $time_start)." seconds<br>"; 
?>
Time: 1.8649200201 seconds
Time: 1.20579004288 seconds
 

Screjet

Новичок
хм.. парадокс :(
ПХП4
Time: 1.62505197525 seconds
Time: 5.33047997952 seconds

ПХП5
Time: 3.98570096493 seconds
Time: 10.7802280188 seconds
 

Alien

Новичок
Не поленился и запустил (PHP4.3.1/NT):

Time: 0.381752967834 seconds
Time: 1.45833492279 seconds

У меня наоборот (-:
 

Screjet

Новичок
young,
че за ПХП у тебя?
у Альена 3,84 - самый больший,
у мну 2,7 - самый меньший (ПХП5),
у тебя 1,55 :\
 

young

Новичок
Не поленюсь.

FreeBSD 4.8-RC PHP 4.3 Celeron 633
Time: 1.97250807285 seconds
Time: 1.19321501255 seconds

Linux SUSE 8.1 PHP 4.3.1 Intel(R) Celeron(TM) CPU 1200MHz
Time: 1.27641904354 seconds
Time: 0.853791952133 seconds

Linux RedHat php 4.3 PIV-2.4
Time: 0.87902390956879 seconds
Time: 0.68635702133179 seconds

Linux RedHat php 5.0 PIII-800
Time: 2.4076679944992 seconds
Time: 1.8727940320969 seconds

Как у тебя первый результат получился меньше - ума не приложу
 

young

Новичок
А убрать экранирующие слеши которые добавились когда я сообщение постил никто не догадался?! Со слешами у меня

Time: 0.123516917229 seconds
Time: 0.614796996117 seconds

без них

Time: 1.00635302067 seconds
Time: 0.598738074303 seconds


Вместо

for ($i=0; $i < count($arr); $i++){
$out = "value of \$i is \$arr[\$i] test";
}

Читать

for ($i=0; $i < count($arr); $i++){
$out = "value of $i is $arr[$i] test";
}

Попробуйте еще раз :)
 

Screjet

Новичок
Хех, заслешить - тоже вариант :)

Time: 8.38388597965 seconds
Time: 5.69069302082 seconds

разница: 1,5 раза слабенький агрумент,
против 3 242 641 bytes
 

netdog

net @
Без слешев есесьно ;)
(Red Hat Linux 7.3 2.96-110 PHP4.3.0) :D

Time: 0.895267963409 seconds
Time: 0.497928023338 seconds
 

young

Новичок
Полтора раза тебе мало?!

Считаю, что готов привести похожий простенький демонстрационный пример, где разница в быстродействии будет в 2 и более раз.

Либо пример с перерасходом памяти из-за кривых ручек.

Вся эта тема к тому, что быстродействие более зависит от опытности программиста, чем от объектного подхода
 

Кром

Новичок
Что то я не очень понял этот пример. Может кто нибудь пояснить?
 

young

Новичок
Это был один из примеров кривых рук. Первый цикл выполняется медленее из-за
1) Вычисление count() в цикле
2) Переменные взяты в двойные кавычки

Что дает замедление в 1,5 раза
 

Demiurg

Guest
ну кто так производительность мериет то ? ab специально для этого придумали.
и действительно что хотите показать этими примерами ?
 

young

Новичок
и действительно что хотите показать этими примерами ?
Я же написал в самом первом посте, этот топик - ответ на заявление о том, что использование ООП замедляет скорость работы скрипта. Я же утверждаю, что даже если и снижает, что далеко не факт, то несравнимо мало с потерей производительности из-за кривых рук
 

Demiurg

Guest
файл1:
<?

$arr = range(0,100);
for ($i=0; $i < count($arr); $i++)
{
$out="value of $i is $arr[$i] test";
}
?>...
Requests per second: 100.91 [#/sec] (mean)
Time per request: 9.91 [ms] (mean)
Time per request: 9.91 [ms] (mean, across all concurrent requests)
Transfer rate: 16.95 [Kbytes/sec] received

файл2:
<?
$arr = range(0,100);
$n = count($arr);
for ($i=0; $i < $n; $i++)
{
$out = 'value of '.$i.' is '.$arr[$i].' test';
}
?>...
Requests per second: 8.76 [#/sec] (mean)
Time per request: 114.15 [ms] (mean)
Time per request: 114.15 [ms] (mean, across all concurrent requests)
Transfer rate: 1.47 [Kbytes/sec] received

вот вам и быстродействие.
 

young

Новичок
/usr/sbin/ab -n 500 ....
Для первого файла:

Time taken for tests: 2.220 seconds
Requests per second: 225.23 [#/sec] (mean)
Time per request: 4.44 [ms] (mean)

Для второго файла:

Time taken for tests: 1.737 seconds
Requests per second: 287.85 [#/sec] (mean)
Time per request: 3.47 [ms] (mean)

так что попробуй-ка еще раз :)
 

Demiurg

Guest
>так что попробуй-ка еще раз
все проверил и перепроверил ... может это из-за акселиратора ..
 

young

Новичок
Поправка: Написал до того, как прочитал предыдущее сообщение...

2Demiurg:
Проверь еще раз.
2:1 не в твою пользу...
 

young

Новичок
В 7мь раз устроит?!

Результат:

Document Path: /~young/test1.php
Time taken for tests: 70.185 seconds
Complete requests: 100
Requests per second: 1.42 [#/sec] (mean)
Time per request: 701.85 [ms] (mean)
Time per request: 701.85 [ms] (mean, across all concurrent requests)


Time taken for tests: 11.574 seconds
Complete requests: 100
Requests per second: 8.64 [#/sec] (mean)
Time per request: 115.74 [ms] (mean)
Time per request: 115.74 [ms] (mean, across all concurrent requests)


http://icg.com.ua/~young/file.phps

Файл 1:
<?php

define("SIZE", 100);

$array = array();
for ($i = 0; $i < SIZE; $i++) {
$array["hash_".$i] = range(0, SIZE);
}

$out = "";
foreach ($array as $key => $row){
foreach ($row as $ikey => $item) {
$out .= "\$array[$key][$ikey] = {$array[$key][$ikey]} <br>";
}
}
?>

Файл 2:
<?
define("SIZE", 100);

$array = array();
for ($i = 0; $i < SIZE; $i++) {
$array["hash_".$i] = range(0, SIZE);
}

$out = "";
reset($array);
while (list($key, $row) = each($array)){
$tmp = $array[$key];
$count = sizeof($tmp);
for ($i = 0; $i < $count; $i++) {
$out .= '$array['.$key.']['.$i.'] = '.$tmp[$i].'<br>';
}
}
?>
 
Сверху