Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что быстрее? Сравнение функций 
:(
    Опции темы
Gold Dragon
  Дата 28.2.2013, 14:02 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Уважаемые друзья. Предлагаю в эту тему складывать тесты разных функций. Например, я провожу разные тесты и готов делиться с другими какие функции быстрее, а какие полные тормоза.. На этом форуме много тем, где идёт сравнение функций.. В общем много источников.

В конечном итоге это многим поможет

Предлагаю публиковать сообщения в следующем формате:
- какие функции сравниваются
- PHP-код самого теста
- результаты
- версия PHP


ps
Модераторы, если посчитаете эту тему важно, то прошу вас закрепить её


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 28.2.2013, 14:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



foreach и for

тест
Код

// Формируем тестовый массив
$array = array();
for($i=0; $i < 1000000; $i++){
    $array[] = 'qqqqqq';
}
$len = sizeof($array);

// Измеряем foreach
$a = microtime(true);
foreach($array as $value){
    $x = $value;
}
$aa = round((microtime(true) - $a), 5);

// Измеряем for
$b = microtime(true);
for($i=0; $i < $len; $i++){
    $x = $array[$i];
}
$bb = round((microtime(true) - $b), 5);

// Выводим результат
echo 'foreach: ' . $aa .'<br>for: '. $bb;
echo '<hr>'. $bb/$aa;


Результат: foreach быстрее for в 1,6-2,3 раза

PHP: 5.4.8

Это сообщение отредактировал(а) Gold Dragon - 28.2.2013, 14:24


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
MoLeX
Дата 28.2.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 0
Всего: 140



тест не полный, надо минимум протестировать на разных массивах + разных платформах.

Добавлено через 48 секунд
А так идея очень хорошая, буду карму поднимать тем кто тесты будет запиливать  smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 28.2.2013, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



ну полным тест никогда не будет, всегда есть что добавить smile да и тяжело ассоциативный массив через for перегонять  smile А что касается платформ, то не думаю что будет заметная разница, абсолютные величины может и будут различаться, а относительные думаю не очень.. В любом случае, любой желающий сможет взять и дополнить ....

Это сообщение отредактировал(а) Gold Dragon - 28.2.2013, 14:52


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Aliance
Дата 28.2.2013, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Цитата(Gold Dragon @  28.2.2013,  15:51 Найти цитируемый пост)
да и тяжело ассоциативный массив через for перегонять 

почему же? легко:
Код

$myArray = array('one' => '1111', 'two' => '2222', 'three' => '3333');
for (reset($myArray); current($myArray); next($myArray){ 
    printf('<p>%s => %s</p>', key($myArray), current($myArray));



или через while
Код

$myArray = array('one' => '1111', 'two' => '2222', 'three' => '3333');
reset($myArray);
while (list($key, $value) = each($myArray)) {
    printf('<p>%s => %s</p>', $key, $value);
}


Правда в этой схеме бывают и проколы:
Цитата(php.net)

<?php 
$arr = array(1,2,3,4,5,6,7,8,9); 

foreach($arr as $key=>$value) 

    unset($arr[$key + 1]); 
    echo $value . PHP_EOL; 

?> 
Output: 
1 2 3 4 5 6 7 8 9 

<?php 
$arr = array(1,2,3,4,5,6,7,8,9); 

while (list($key, $value) = each($arr)) 

    unset($arr[$key + 1]); 
    echo $value . PHP_EOL; 

?> 
Output: 
1 3 5 7 9 


Это сообщение отредактировал(а) Aliance - 28.2.2013, 15:31
PM MAIL WWW ICQ Skype   Вверх
Fortop
Дата 28.2.2013, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Для минусующих идиотов.
Показываю

foreach: 0.05929
for: 0.05159

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

Код

<?php
// Формируем тестовый массив
$array = array();
for($i=0; $i < 1000000; $i++){
    $array[] = 'qqqqqq';
}
$len = sizeof($array);
// Измеряем foreach
$a = microtime(true);
foreach($array as $k => $value){
    $x = $array[$k];
}
$aa = round((microtime(true) - $a), 5);
// Измеряем for
$b = microtime(true);
for($i=0; $i < $len; $i++){
    $x = $array[$i];
}
$bb = round((microtime(true) - $b), 5);
// Выводим результат
echo 'foreach: ' . $aa .'<br>for: '. $bb;
echo '<hr>'. $bb/$aa;



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 28.2.2013, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Кстати, вот интересный маленький тест

Тест 1
Код

foreach($array as $value){
    $x = $value;
}


Тест 2
Код

foreach($array as $key =>$value){
    $x = $value;
}

Тест 3
Код

foreach($array as $key =>$value){
    $x = $array[$key];
}


Тест 1

PHP 5.2.17
0.07474
0.07473
0.07506
0.07484
0.07394

PHP 5.3.18
0.15548
0.15511
0.15592
0.15582
0.15935

PHP 5.4.8

0.1182
0.11921
0.12467
0.12193
0.12079

Тест 2

PHP 5.2.17
0.09935
0.09818
0.10013
0.09956
0.10091

PHP 5.3.18
0.2153
0.20556
0.21216
0.20949
0.20348

PHP 5.4.8
0.18541
0.17971
0.17943
0.17828
0.19942

Тест 3

PHP 5.2.17
0.15455
0.15168
0.15176
0.15243
0.1521

PHP 5.3.18
0.26169
0.2611
0.26417
0.25977
0.25846

PHP 5.4.8
0.18531
0.18904
0.18663
0.18702
0.18608


Это сообщение отредактировал(а) Gold Dragon - 28.2.2013, 18:03


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 1.3.2013, 17:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



1. for и foreach это теплон с мягким, чего их сравнивать..
2. ввиду п.1 имеет смысл сравнивать решение не конструкций языка, а определенных задач разными способами
3. видимо надо учесть, что часть функционала, находящаяся во встроенных функциях (конструкциях) будет быстрее, чем интерпретируемый код. однако исполняющая система в пхп чесьма эффективна, так что в случае кеширования разница будет копеечная. если кеширование не используется, то производительность не является узким местом. 
В общем я не вижу пользы от этой темы.
PM MAIL   Вверх
DropSQL
Дата 2.5.2013, 17:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.5.2013

Репутация: нет
Всего: нет



Меня тоже заинтересовал вопрос.
Насколько часто вы сталкиваетесь с проблемами в сторости работы foreach или for?
Лично у меня никогда не стояла проблема с разницей производительности for, foreach, while etc.
По этому не вижу смысла сравнивать настолько незначимые мелочи.
PM MAIL   Вверх
marioadm
Дата 6.5.2014, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист PHP
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 23.4.2013
Где: Цюрих

Репутация: нет
Всего: 0



 smile 
Цитата(Gold Dragon @  28.2.2013,  18:01 Найти цитируемый пост)
PHP 5.4.8

0.1182
0.11921
0.12467
0.12193
0.12079



 smile 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1919 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.