![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| KEM |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 28.1.2005 Репутация: нет Всего: 2 |
В ходе очередных кодо-исправление возник такой вопрос!
Почему столь значительные разницы при выполнении казалось бы одинаковых операций?
Выходит вид while (list($ind, $val) = each($bl_ar)) на и более быстродействующий для обхода массива ? --------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм... |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
В реальной жизни разница незаметна.
И при чем здесь "Скорость работы str_replace", хотелось бы знать. |
|||
|
||||
| merge |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 20.3.2007 Репутация: нет Всего: 1 |
ты пробовал в разных php скриптах? всмысле не в одном? можнет он после первого вызова как-то оптимизировал массив?
|
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: 21 Всего: 31 |
мало того что ворох орфографических ошибок, так и кроме str_replace функций не видешь?
|
|||
|
||||
| KEM |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 28.1.2005 Репутация: нет Всего: 2 |
Данные куски кода пробовал как вместе, так и раздельно, результат примерно одинаковый.
Меня интересует почему вариант
является в 17 раз более быстродейстующим, чем
awers, вопрос нужно учиться читать внимательнее, а для флуда есть другие разделы Это сообщение отредактировал(а) KEM - 17.3.2008, 16:14 --------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм... |
||||
|
|||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Ну если интересует - скачай исходный код, да посмотри - как реализован тот и другой вариант. Вопрос ведь не имеет никакой практической ценности, а представляет чисто академический интерес. В РНР есть миллион мест, где можно задаться точно таким же впросом. сравнивать скорость обработки строк в одинарных и в двойных кавычках, например. Но тратить на это свое время врядли кто-то будет. Так что, если тебе так уж любопытно - смотри в исходниках. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
KEM, а Вы уверены, что эти варианты на второй и последующих итерациях делают одно и то же? ;)
hint: найдите 1 отличие между конструкцией с while(each(...)), показавшей такой "феноменальный" результат, и подобной ей конструкцией в мануале, приведенной в качестве эквивалентной для foreach-а. Это сообщение отредактировал(а) SelenIT - 17.3.2008, 16:57 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| KEM |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 28.1.2005 Репутация: нет Всего: 2 |
Feldmarschall, ну почему же, с практической точки зрения давольно важно ели нужно максимально быстро обойти большие массивы данных.
SelenIT, конечно не одно и то же ) Для чистоты эксперимента, если каждый элемент целочисленного массива увеличивать на 1, то вариант foreach при 5000 итераций явно отстаёт примерно в 22 раза! Вот и весь академический интерес... --------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм... |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
KEM, еще бы ему не отставать. Он ведь честно проходит весь массив все полмиллиона раз. А вайл с листом несколько халявит...
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: 21 Всего: 31 |
Да, написано "Скорость работы str_replace", разве не так? KEM, на phpclub.ru была статья по оптимизации. Там рассказано почему и что быстрее и в каких случаях стоит применять тот или иной вариант. |
|||
|
||||
| Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
KEM,
Если не изменяет память, foreach копирует массив в памяти, именно с этим связаны его удобные свойства для программиста и некоторая медленность. Обрати внимание на синтаксис остальных циклов, и становится видно, что foreach необходимо совершать дополнительные операции с массивом(копирование, вычисление размеров) чтобы предоставить такой синтаксис. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
KEM, подсказка "в лоб": каково быстродействие
и чем это (как и foreach) отличается от изначального "казалось бы" самого быстрого варианта? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 19 Всего: 54 |
KEM, для полноты теста предлагаю свой вариант. Думаю он будет самый быстрый (если главное - это скорость):
-------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
С практической точки зрения никогда не бывает нужно быстро обходить большие массивы данных. Задавать такие вопросы - это все ранво, что спрашивать на авто.ру, как оптимизировать скорость автомобиля, в который запряжена лошадь. аргументируя тем, что иногда нечем заправить бензобак. У нормального автомобилиста не бывает таких случаев. А если бывает, то он думает не как лошадь запрячь, а как бензина найти. Или - что тоже бывает - для собственного удовольствия ездит на телеге. В случаях, когда он никуда не торопится. И вот если твоему приложению надо максимально быстро обойти большие массивы, то думать надо не о том, как ловить микросекунды, а о том, чтобы этих массивов в приложении не было. |
|||
|
||||
| KEM |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 28.1.2005 Репутация: нет Всего: 2 |
mishaSL, Ваш вариант оказался наиболее быстрым =)
SelenIT, "reset($bl_ar); " да действительно косяк ) Feldmarschall, очень интересно было бы заслушать Ваш вариант на тему обработки списка e-mail из текстового файла, к примеру выборки по доменам? awers, статью обязательно поищу и почитаю, т.к. вопрос очень интересует! Подведу небольшой итог умозаключений в наглядной форме
Господа... Это сообщение отредактировал(а) KEM - 18.3.2008, 01:13 --------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм... |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |