Когда были тормозные железяки и пхп ранней версии с багами — это было важно, со временем (уже сейчас) — отходит в небытие.
Что отличает проекты под высокой нагрузкой, взять хабр или контакт?
Не столько качество кода, сколько грамотная архитектура (много серверов), правильно настроенное железо и ПО на нем, оптимальные алгоритмы и оптимизация _узких_ мест. Поскольку мы увидели что кавычки, циклы и т.п. узким место не является (в виду того, что вносит малозначимый вклад в общие тормоза), я над этим уже давно не думаю.
Почему одна CMS тормозит больше другой, потому что у них разные алгоритмы, а не из-за качества кода.
Нифига не надо ему этого знать. Только если не предстоит работа по переводу кода из версии 4 в версию 5. Да и даже так, он прочтет эти различия на php.net и за полдня будет понимать лучше, чем уверенный в себе человек, который это «знает».
> Read Loop:foreach() vs. for() vs. while(list() = each())
> In all cases I've found that the foreach loop is substantially faster than both the while() and for() loop procedures.
Т.е.foreach быстрее :)
И там же написано что двойные кавычки проигрывают одинарным единицы процентов :)
Но это неважно. Важно то, что смена кавычек или циклов играет роль микросекунд, т.к. больше всего тормозит сервер, жесткий диск, канал, подключение к базе ну и сложные вычисления. Если бы у меня был цикл, который работал бы несколько секунд, возможно, я бы начал его оптимизировать. К тому же скорее всего оптимизировал бы я его сменой внутреннего кода итерации, а не for- на foreach, сам foreach секундные тормоза может навести только если у вас миллиарды итераций :)
Кстати писать сразу оптимальные конструкции на php довольно сложно. Компилятор и оптимизатор постоянно меняются. Сегодня одна конструкция работает быстрее, завтра другая. Раньше foreach($var as $n) копировал память, и надо было писать foreach($var as &$n) (давно это было), сейчас неактуально. Это ещё один повод не заморачиваться на языке, а больше думать о железе, софте и алгоритмах.
Не там вы копаете, имхо. Исправление кривых алгоритмов и плохо настроенного софта железа, + всякие eaccelerator дают ускорение работы. А фишки языка даже если и дадут — копейки. Раньше ещё говорили что двойные кавычки в php тормозят.
Хотя скиньте, плиз, ссылки на сравнение for и foreach, если таковые есть.
В свое время пострадал от излишней абстракции, когда ставилась задача сделать тот или иной проект с учетом развития на будущее.
Да, что-то даже было придумано вперед, так что пришлось к месту через полгода-год, но времени было потрачено настолько много, что можно было бы сделать 3 проекта если ориентировать на текущие требования, а не абстрагировать их. Кроме того, часть изменений среды предвидеть не удалось и пришлось все равно серьезно рефакторить.
С тех пор решаю задачи в рамках видимости требований :)
Также почему я отрицательно отношусь к абстракции — потому как многие люди, мало разбирающиеся в вопросах, с которыми ко мне обращаются, любят абстрагировать проблемы и делать из них выводы :) Вместо того, чтобы сказать «я вижу на экране следющее сообщение», они говорят что-то более умное вроде «бухгалтерский аккаунт недоступен» :) После чего приходится работать не только программистом, но и Шерлоком Холмсом, чтобы вернуться все же к объективным проблемам :)
Фетишизмом PHP я уже давно не занимаюсь, поэтому любое «написать» воспринимаю как рутину — главное же не красиво написать, а чтоб задача была выполнена в кратчайшие сроки. При этом конечно учитываются такие факторы, как производительность, читабельность и тп. Но согласитесь, в строках и кусках кода в 5 строк ни читабельность ни производительность особо не выгадаешь, а вот времени на написание и отлаживание циклов потеряешь ;)
На собеседовании если претендую на хорошее место, готов хоть свинкой похрюкать, не то что на бумаге писать :)
Так уж получилось, что цикл for( ) давно не пользую — так как-то сложилось, если цикл, то foreach. Поэтому, когда вижу for($i =0; ....), сразу вспоминаю либо свои первые потуги, либо учебники по php. :)
Понятно :)
Я придрался, потому что как раз и не люблю «абстрактные» задачки. Решение абстрактной проблемы это «дым над водой», есть такой антипаттерн программирования. Потому что в реальности все будет отличаться как правило и решения абстрактных задач конечно и говорят что-то о человеке, но не так подробно, как решения реальных задач, имхо :)
> Вопрос первый: «напишите на любом языке код, который развернет задом наперед текстовую строку (in place, т.е. без выделения нового буфера). Если справились — напишите процедуру, подсчитывающую количество слов в заданной строке.»
Эм. В разных языках разные строковые ф-ции, разные типы данных, разные структуры. В некоторых строку нельзя представить массивом букв, да и если можно то индексы букв начинаются в одних языках с нуля, в других с единицы. Также если кодировка мультибайтная, то каждая буква != 1 байты, а большинство языков работает с байтами.
А код на php4 надо либо рефакторить, либо не лезть в него.
Что отличает проекты под высокой нагрузкой, взять хабр или контакт?
Не столько качество кода, сколько грамотная архитектура (много серверов), правильно настроенное железо и ПО на нем, оптимальные алгоритмы и оптимизация _узких_ мест. Поскольку мы увидели что кавычки, циклы и т.п. узким место не является (в виду того, что вносит малозначимый вклад в общие тормоза), я над этим уже давно не думаю.
Почему одна CMS тормозит больше другой, потому что у них разные алгоритмы, а не из-за качества кода.
И что надо обязательно проверять, поддерживает ли браузер куки :)
> Read Loop:foreach() vs. for() vs. while(list() = each())
> In all cases I've found that the foreach loop is substantially faster than both the while() and for() loop procedures.
Т.е.foreach быстрее :)
И там же написано что двойные кавычки проигрывают одинарным единицы процентов :)
Но это неважно. Важно то, что смена кавычек или циклов играет роль микросекунд, т.к. больше всего тормозит сервер, жесткий диск, канал, подключение к базе ну и сложные вычисления. Если бы у меня был цикл, который работал бы несколько секунд, возможно, я бы начал его оптимизировать. К тому же скорее всего оптимизировал бы я его сменой внутреннего кода итерации, а не for- на foreach, сам foreach секундные тормоза может навести только если у вас миллиарды итераций :)
Кстати писать сразу оптимальные конструкции на php довольно сложно. Компилятор и оптимизатор постоянно меняются. Сегодня одна конструкция работает быстрее, завтра другая. Раньше foreach($var as $n) копировал память, и надо было писать foreach($var as &$n) (давно это было), сейчас неактуально. Это ещё один повод не заморачиваться на языке, а больше думать о железе, софте и алгоритмах.
ru.php.net/goto
теперь сделана ссылка:
Image courtesy of » xkcd,
которая ведет сюда --> xkcd.com/292/
Там комикс, раньше был прямо на php.net
Хотя скиньте, плиз, ссылки на сравнение for и foreach, если таковые есть.
Вам кто нужен был?
Да, что-то даже было придумано вперед, так что пришлось к месту через полгода-год, но времени было потрачено настолько много, что можно было бы сделать 3 проекта если ориентировать на текущие требования, а не абстрагировать их. Кроме того, часть изменений среды предвидеть не удалось и пришлось все равно серьезно рефакторить.
С тех пор решаю задачи в рамках видимости требований :)
Также почему я отрицательно отношусь к абстракции — потому как многие люди, мало разбирающиеся в вопросах, с которыми ко мне обращаются, любят абстрагировать проблемы и делать из них выводы :) Вместо того, чтобы сказать «я вижу на экране следющее сообщение», они говорят что-то более умное вроде «бухгалтерский аккаунт недоступен» :) После чего приходится работать не только программистом, но и Шерлоком Холмсом, чтобы вернуться все же к объективным проблемам :)
На собеседовании если претендую на хорошее место, готов хоть свинкой похрюкать, не то что на бумаге писать :)
Писать на абстрактном языке, это как считать 2+2 на счетах — вроде бы и процесс есть, но моск используется неправильно :)
Я придрался, потому что как раз и не люблю «абстрактные» задачки. Решение абстрактной проблемы это «дым над водой», есть такой антипаттерн программирования. Потому что в реальности все будет отличаться как правило и решения абстрактных задач конечно и говорят что-то о человеке, но не так подробно, как решения реальных задач, имхо :)
return implode('', array_reverse(preg_split('//', $word)));
return count(preg_split('/[\s\r\n]+/', $words));
:)
return array_reverse(preg_split('//', $word));
:D
Эм. В разных языках разные строковые ф-ции, разные типы данных, разные структуры. В некоторых строку нельзя представить массивом букв, да и если можно то индексы букв начинаются в одних языках с нуля, в других с единицы. Также если кодировка мультибайтная, то каждая буква != 1 байты, а большинство языков работает с байтами.
;)