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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> foreach vs for 
:(
    Опции темы
SneG0K
Дата 11.5.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Ну а смысл экономить на языковых конструкциях? Есть смысл оптимизировать запросы, но нет смысла оптимизировать операторы языка... Хотите производительности, цепляйте кластера!

Добавлено через 2 минуты и 4 секунды
Хотите еще большей производительности - работайте на уровне железа! (Анреал)
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я тебе про Фому, ты мне про Ерему.
Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.
По поводу этого
Цитата(SneG0K @  11.5.2009,  19:06 Найти цитируемый пост)
идеальных условиях

вендузятники идут курить.
Да все равно, создание этих "идеальных условий" бессмысленно.
Цитата(SneG0K @  11.5.2009,  19:50 Найти цитируемый пост)
Хотите еще большей производительности - работайте на уровне железа! (Анреал) 

угу, спаяй сам себе сайт.
PM MAIL ICQ Skype   Вверх
NLspieler
Дата 11.5.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



enof, прочитал твою ссылку тест.
Автор утверждает, что foreach медленние чем for. ???  smile  

Может быть и правда провести собственное тестирование?

А с разбросом результатов думаю можно боротся так:
Пытаемся создать максимально "идеальные" условия.
Проводим тест n раз. 
Результаты записываем, сортируем, 
откидываем по 40% слишком больших и слишком маленьких результатов.
Из оставшихся вычисляем среднее арифметическое. 
PM MAIL   Вверх
enof
Дата 11.5.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(NLspieler @  11.5.2009,  20:34 Найти цитируемый пост)
Автор утверждает, что foreach медленние чем for. ???  smile  

Следующее предложение за ссылкой тоже нужно было прочитать. Эти тесты проводились примерно после выхода php4.
Цитата(enof @  11.5.2009,  18:07 Найти цитируемый пост)
Это я к тому, что многие тесты уже не актуальны


Насчет тестирования думал недавно, соберусь как-нибудь проведу.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)
угу, спаяй сам себе сайт. 

 smile 
Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)

вендузятники идут курить.

Если про сервера, то винду ф топку!!!

Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)

Да все равно, создание этих "идеальных условий" бессмысленно.

А нагрузка на процессор? Хочешь получить больше процессорного времени - убей конкурентов!!!
Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)
Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.

Только ради интереса, в боевых условиях использовать это мозголюбство не стоит, только больше проблем возникнет
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SneG0K @  11.5.2009,  21:03 Найти цитируемый пост)
А нагрузка на процессор? Хочешь получить больше процессорного времени - убей конкурентов!!!

я про то и говорю. Как ты оконную систему в винде уберешь? никак.
У меня иксы сжирают ~15%, в винде не знаю насклько оконная система прожорлива. Вот, я могу х остановить, а ты в винде хочешь не хочешь, а окошками любуйся, хоть они и не нужны. smile 
В тестах сравнивается что-то с чем-то, главное чтобы в одинаковых условиях, а какие они, впринципе не так уж и важно.
Цитата(SneG0K @  11.5.2009,  21:03 Найти цитируемый пост)

Если про сервера, то винду ф топку!!!

да и на десктопе тоже.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Цитата(enof @  11.5.2009,  19:16 Найти цитируемый пост)
В тестах сравнивается что-то с чем-то, главное чтобы в одинаковых условиях, а какие они, впринципе не так уж и важно.

Я просто изложил свое предположение, почему у NSpieler'a получились разные результат от одного и того же кода
PM WWW Skype   Вверх
NLspieler
Дата 11.5.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Протестировал таким кодом:

Код

<?php

$array = array ('e', 'e', 'f', 'g', 'b', 'v', 'd', 'c', 'v', 'f', 'g', 'r', 'tg', 'e', 'r', 'd', 'f', 'g', 't', 'r', 'd', 'e', 'c', 'v', 'f', 'g', 'h',) ;
$r1 = '' ;
$r2 = '' ;

$time_start = microtime(1);

foreach ($array as $value)
{
    $r1 = $r1 . $value ;
}

$time_end = microtime(1);
$time0 = $time_end - $time_start;

$time_start = microtime(1);

$count = count ($array) ;

for ($n=0 ; $n < $count ; $n++)
{
    $r2 = $r2 .  $array[$n] ;
}

$time_end = microtime(1);
$time1 = $time_end - $time_start;


echo "foreach $time0 for $time1 \n" ;
echo ($time0/$time1) . "\n" ;
echo "$r1 and $r2" ;

?>


Получилось, что foreach немного быстрее, 90-95% времени по сравнению с for

Это сообщение отредактировал(а) NLspieler - 11.5.2009, 20:50
PM MAIL   Вверх
enof
Дата 11.5.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда уж замерял бы в цикле что ли и среднее потом выводил.

Это сообщение отредактировал(а) enof - 11.5.2009, 20:56
PM MAIL ICQ Skype   Вверх
nerezus
Дата 11.5.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



enof, может быть затем, что одинаковые усилия, потраченные на оптимизацию конструкций и SQL-запросов дадут разницу в выигрыше производительности в несколько тысяч раз?

Добавлено через 2 минуты и 3 секунды
Цитата

Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.
 Допустим статистическая погрешность 5%. Ты выиграешь 0.01%. Как ты это узнаешь?
Естественно на реальном приложении если мерять, т.к. никому не нужны результаты, которые не повлияют на практику.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
NLspieler
Дата 11.5.2009, 21:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пропустил через цикл, 600000 интераций. Результат ~82%
Короче, объявляю foreach бесспорным победителем.

Это сообщение отредактировал(а) NLspieler - 11.5.2009, 21:15
PM MAIL   Вверх
NLspieler
Дата 11.5.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nerezus, а что вы понимаете под оптимизацией sql запросов?
Это типо, что бы они вытаскивали только нужные поля таблицы, а не все?
PM MAIL   Вверх
bars80080
Дата 11.5.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



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

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



Цитата(enof @  11.5.2009,  17:07 Найти цитируемый пост)
Многие приводят эти тесты 

в жизни не проводил тестов, у меня была конкретная ситуация по обработке выборки из БД. кусок замеряемого цикла дал преимущества for


а что я там противосмысленного сказал?
PM MAIL WWW   Вверх
enof
Дата 12.5.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bars80080 @  11.5.2009,  23:50 Найти цитируемый пост)
а что я там противосмысленного сказал? 

Цитата(bars80080 @  11.5.2009,  17:32 Найти цитируемый пост)

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

ну так foreach и является той самой "функцией", облегчающей труд кодера.
Или я чего-то не понимаю?
PM MAIL ICQ Skype   Вверх
Рыжий
Дата 12.5.2009, 03:32 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


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

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



foreach должна быть быстрее, хотя бы потому, что в ней не определяется дополнительная переменная $i для счета.

+ в for() каждый раз проверяется условие, стоящее на втором месте: for($i=0;$i<100;$i++). 
Если говорить о массивах - в for часто допускают ошибку: for($i=0;$i<count($array);$i++) - Получается при каждом прохождении цикла, не только проверятеся условие <, но и выполняется функция count.

Все это относится к очень мелкой и преждевременной оптимизации и большой роли не играет, имхо.
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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