Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
time php -r 'for ($a=0; $a<10000; $a++) count($_SERVER);'
php -r 'for ($a=0; $a<10000; $a++) count($_SERVER);' 0,04s user 0,01s system 90% cpu 0,055 total
time php -r 'for ($a=0; $a<10000; $a++) sizeof($_SERVER);'
php -r 'for ($a=0; $a<10000; $a++) sizeof($_SERVER);' 0,03s user 0,02s system 82% cpu 0,061 total
В вебе, скорость загрузки, прямо влияет на продажи/регистрации/заказы.
А Кнут вообще-то программист несколько другого рода. У нас же веб, тут свои законы и принципы.
В вебе останется куча жуткого говнокода, за который надо расстреливать.
Многих читателей отталкивает факт использования языка низкого уровня, но Кнут считает свой выбор оправданным, так как привязка к архитектуре необходима для того, чтобы можно было точно судить о таких характеристиках алгоритма, как скорость, потребление памяти, и т. д.
grep -c 'replace' /usr/share/php/smarty/*
/usr/share/php/smarty/Config_File.class.php:2
/usr/share/php/smarty/debug.tpl:0
/usr/share/php/smarty/internals:0
/usr/share/php/smarty/libs:0
/usr/share/php/smarty/plugins:0
/usr/share/php/smarty/Smarty.class.php:3
/usr/share/php/smarty/Smarty_Compiler.class.php:31
for ($a = 0; $a < count ($arr); $a++) do();
$tmp_arr_count = count ($arr) for ($a = 0; $a < $tmp_arr_count; $a++) do();
Incв Borland Pascal. Компилятор разворачивал оператор:
i:=i+1;
mov ax, [i] inc ax mov [i], ax
inc [i]
Inc(i);
for($a = 0; $a < count($arr); $a++) { array_push($arr, 'newvalue'); }
$result='';
for($i=0;$i<=100500;$i++){
$result.='<option>'.$result.'</option>';
}
ob_start();
for($i=0;$i<=100500;$i++){
echo '<option>', $result, '</option>';//при echo используем запятую между фрагментами, а не точку
}
$result=ob_get_clean();
getFieldValue():0.0013
_field(получение):0.0003
__get():0.0010
setFieldValue():0.0014
_field(установка):0.0003
__set():0.0012
__call():0.0024
public function __get($name)
{return $this->_field;}
public function __set($name, $val)
{$this->_field=$val;}
public function __call($name, $arg)
{return $this->_field;}
function get($Key)
{
return $this->$Key;
}
он всегда будет быстрее, each это наследие старых версий php.while (list($key, $value) = each($item))
for($i=0;$i<count($array);$i++)
Deprecated: Function ereg() is deprecated…
советую заменить file() на
explode("\n", file_get_contents('file.xml'));
Прирост будет еще больше, чем в случае с xml.
<?php if (!file_exists('test.file')) { $f = fopen('test.file', 'w'); for($i=0; $i<500000; $i++) fwrite($f, "String #$i -- some padding -- $i$i$i$i$i --\n"); fclose($f); } $ts = microtime(1); for($i=0; $i<100; $i++) { $x = file('test.file'); unset($x); } print "time: " . ((microtime(1) - $ts)*1000) . " ms\n"; $ts = microtime(1); for($i=0; $i<100; $i++) { $x = explode("\n", file_get_contents('test.file')); unset($x); } print "time: " . ((microtime(1) - $ts)*1000) . " ms\n"; ?>
time: 24141.930818558 ms time: 25979.696035385 ms ---------------------------------- time: 23707.021951675 ms time: 24928.278923035 ms ---------------------------------- time: 24311.058998108 ms time: 24633.358001709 ms ---------------------------------- time: 24932.843923569 ms time: 25643.95904541 ms ---------------------------------- time: 23347.62096405 ms time: 24808.028936386 ms ---------------------------------- time: 23740.713119507 ms time: 25628.977060318 ms
Но если ваш junior developer, не хочет признавать их важность, расскажите ему, что на генерацию одного notice у PHP уходит время, за которое можно обойти и инкрементировать массив из примерно 30-ти элементов.
Несколько других советов для PHP-разработчиков