За последние 24 часа нас посетили 21903 программиста и 988 роботов. Сейчас ищет 661 программист ...

Код для highload

Тема в разделе "Прочие вопросы по PHP", создана пользователем shreck, 29 апр 2009.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Было один раз, голову себе сломал откуда переменная $item взялась)))
    Оказалось от foreach наследие...))))
     
  2. freeneutron

    freeneutron Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Сравнил foreach и while по времени и убедился, что на foreach стоит экономить
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    О боже, целый топик заблуждающихся...

    Прав тут только один человек
    Если ваш код является узким местом, то экономия на "кавычках" (и всяких foreach и while) вам уже не нужна, вам нужен другой язык (Си например, или С++) но такое бывает редко, чаще всего просто оптимизируется всякое кеширование, группируются запросы, наращивается железо, настраивается ОС, итд (помню наш Psih рассказывал что настроив нормально сервак и обновив железо совсем немного, нагрузка снизилась настолько что никакие кавычки этого сделать не могли)

    Даже просто вынос статики на отдельный сервак(и) уже снизит нагрузку настолько что загрузить основной сервак будет сложно даже при большой посещаемости, а уж если отказаться от прожёрливого апача и поставить например лайти или "тпштч ©" то это полный финишь, сэкономленную на этом память отдаём мускулу, и кешмруем тяжёлые запросы, и такой сервак даже задосить будет проблематично, не то что штатными средствами уложить...
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Vladson
    Всё верно сказал :)

    В 99.9% случаев foreach vs for vs while смысла не имеет, используйте что удобнее.

    Dagdamor
    Т.е. в foreach copy-on-write не пашет? Это как минимум странно...
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Psih
    Твой пост на оверах (на 17-й странице) для меня уже как библия, столько раз дёргал из него цитаты, и НИКТО ни по какой из цитат не возразил =) (много полезного для себя черпнул из него)
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Vladson
    А можно ссылочку, а то я там уже очень давно небыл :)
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    http://forums.overclockers.ru/viewtopic ... &start=320
    (там бы ошибки исправить, да пояснить мелочи, типа что то железо было хорошим в те времена, и была бы реально полезная статья...)
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Ох, давно это было, ой давно :)
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Psih
    Детали поменялись (железо стало ещё быстрее, ОС-и более сговорчивые, итд) но основные мысли до сих пор актуальны.

    Я даже дома под виндой от апача отказался (поставил Nginx, не из-за нагрузки, с моим каналом в 1 мегабит это не узкое место, просто чтоб начать разбираться в настройках)
     
  10. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Да, надо будет как-то заняться перечитыванием и обновлением тезисов, может что хорошее и получится :)
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Точно говорю, много полезного от туда вычерпнул (и не только я) а если ещё добавишь что-то новое из опыта, вообще можно на серьёзную статью замахнуться :)
     
  12. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Но на Хабр постить низя, набегут лохи и всё испортят :D
     
  13. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ещё и заминусуют :)

    Хотя "коллегу" твоего (тоже програмер на торрент-трекере, кстати он на хабр меня и пригласил) не заминусовали когда он про хайлоад писал http://habrahabr.ru/blogs/server_side_o ... ion/53360/ (и опять же ни слова про кавычки или foreach)
     
  14. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    *Подумалось*

    FAQ по быстродействию скрпитов.

    Q: Сайт тормозит, что делать ?
    A1: Если вы начинающий. Прочитать книгу (бумажную, а не видеоуроки) и переписать всё нафиг.
    A2: Если вы уже не начинающий. Прочитать ещё раз ту-же книгу и переписать всё нафиг.
    A3: Если вы уже профи. Ответа не существует, ибо у вас просто не возникнет такого вопроса.
    A4: Да !!! тут нет нифига про кавычки, foreach и собак в коде !!!
     
  15. freeneutron

    freeneutron Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    226
    Симпатии:
    3
    Что-то я совсем запутался в вопросе, что быстрее foreach() или while(each()). Запускаю такой тест:
    PHP:
    1.  
    2. $a = range(1,1e5);
    3. $t1 = microtime(1);
    4. foreach($a as $name=>$value){
    5.     $name = $name;
    6.     $value = $value;
    7. }
    8. $t2 = microtime(1);
    9. $e = "\n".($t2-$t1);
    10.  
    11. reset($a);
    12. $t1 = microtime(1);
    13. while($a1 = each($a)){
    14.     $name = $a1[1];
    15.     $value = $a1[0];
    16. }
    17. $t2 = microtime(1);
    18. $e.= "\n".($t2-$t1);
    19.  
    20. echo $e;
    21.  
    В результате получаю:

    0.20485901832581
    1.6417279243469

    Получается foreach быстрее. Но до этого некоторые, и я в том числе, писали обратное. Что это? Я чего-то не допонимаю или в версии 5.2.6.6 все поменялось (,хотя я не помню, что бы менял ее)?
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    freeneutron
    Тыщу лет как уже foreach быстрее