LINUX.ORG.RU

PHP vs RoR vs Django


0

0

Опубликованы результаты сравнительных испытаний производительности трёх различных веб-фреймворков: Symphony(PHP), Ruby on Rails и Django(Python).

Вкратце: Rails оказался гораздо быстрее, чем Symphony, а Django - гораздо быстрее, чем Rails.

>>> Подробности

★★

Проверено: Shaman007 ()
Ответ на: комментарий от anonymous

>Поищи по терминам zope/plone

Зачем искать, если я их даже использовал. При их тормознутости верить в то, что на них можно что-то из области Википедии сбацать - это уже надо быть оголтелым фанатом :)

>ЗЫ. тут узнал, что на оутсорсинге труду php-шника оплачивается в районе 10-15$ в час, а zope/plone - в районе 50-70$

И сколько стоит работа программиста на Cobol'е?

KRoN73 ★★★★★
()
Ответ на: комментарий от CrazyPit

Начиная с php4.4 такие вещи вызвают notice (return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]), потому как так писать в корне не верно. Если хочешь продолжать писать такие извращения, флаг в руки.

ЗЫ И ещё кто то тут говорит про вменяемых программеров. Руки бы поотрывал.

gloomdemon
()
Ответ на: комментарий от Aceler

Покажите мне на Ruby что-то такое:

> http://www.phpbb.com/

http://rforum.andreas-s.net/trac/

> http://www.bitrix.ru/

1. Как уже говорили с РоР можно не использовать CMS достаточно генераторов и энжинов

2. Посмотрите в http://wiki.rubyonrails.org/rails/pages/Ruby+on+Rails+based+CMS

> http://wordpress.org/

http://rubyforge.org/projects/typo/

> http://opengroupware.org/, http://phpgroupware.org/

тут солью - не знаю

> http://fckeditor.net/

Муаха товарищь видимо не в курсе на чём написан fckeditor этож надо проявить такую некомпетентность:))

CrazyPit ★★★
()
Ответ на: комментарий от gigabito

> http://www.cheetahtemplate.org/ > там смарти и рядом не валялся

Посмотрел. Система интересная, но уровень синтаксического шума на мелких вставках велик. На больших - сопоставим.

Надо бы ещё и скорость этого измерить... Сайт у них что-то не впечатляет :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Aceler

>В чем проблема? Надо будет - включу.

А если понадобится поисковик вроде Гугла, то придётся в Си идти.. значит по твоей логике Си лучше для веб разработок, тк только на нём можно сделать аналог Гугла :) Или для чего ты там приводил примеры того, что на ПХП сделано, а на других нет :)

forgiven
()
Ответ на: комментарий от anonymous

>А запись ls -la | sort -k 9 | less -N тоже будет разбита "чанки" ls, -la, |, sort, -k, 9, |, less, -N?

Тут всё зависит от степени частоты использования этих примеров.

Скажем, для типичного админа "kill -KILL" или "kill -HUP" будут воприниматься одним чанком, а "kill -STKFLT" - уже двумя.

KRoN73 ★★★★★
()
Ответ на: комментарий от CrazyPit

> http://www.bitrix.ru/

>>1. Как уже говорили с РоР можно не использовать CMS достаточно генераторов и энжинов

Битрикс - эт не ЦМС, это гораздо больше и серьёзнее, Руби скорее всего свалится под нагрузкой в 3 клиента из-за обилия всякой херни, которые собирает битрикс :)

forgiven
()
Ответ на: комментарий от Aceler

>Хороший программист пишет не на том, что ему нравится, а на том, что лучше подходит для решения задачи.

Мне интересно, найдётся тут маргиналы, которые под этим не подпишутся? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от CrazyPit

> Муаха товарищь видимо не в курсе на чём написан fckeditor этож надо проявить такую некомпетентность:))

Товарищ проявляет некомпетентость только что. Сам редактор писан на JavaScript. А к серверной части он чем подключаться будет? Или здесь собрались любители /dev/null?

Aceler ★★★★★
()
Ответ на: комментарий от CrazyPit

>Плохо знал. Умеет правда есть иключения - скобки, шарп в начале, точка с запятой (может ещё что...)

Вот-вот... "летают, но низенько-низенько" :) вот уже сходу, как минимум, три запрещённых символа.

KRoN73 ★★★★★
()
Ответ на: комментарий от forgiven

> А если понадобится поисковик вроде Гугла, то придётся в Си идти.. значит по твоей логике Си лучше для веб разработок, тк только на нём можно сделать аналог Гугла :) Или для чего ты там приводил примеры того, что на ПХП сделано, а на других нет :)

Причем тут идти писать? Я говорю о том, что это можно взять и использовать. Google тоже можно "взять". Но он будет рекламу свою вставлять.

Aceler ★★★★★
()
Ответ на: комментарий от PartyZan

>Для любого языка есть своя ниша, свои плюсы и минусы, и выбирать инструмент стоит исходя из задачи, а не из собственных предпочтений

С этим не спорю. Только добавлю. К задаче стоит добавить ещё целый спектр прочих условий. Включая пресловутую инфраструктуру :) Да и в требованиях заказчика язык может быть указан прямо :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>А на чём www.google.com работает? А код посмотреть можно?

"gg:how google works" и перечитывать пока не надоест :) Можно начать с "wp:google" .. Код конечно никто не даст, но через гугл уже много кодеров прошло, да и в разделе job всё ясно и понятно что гугль на плюсах..

forgiven
()
Ответ на: комментарий от KRoN73

>Хороший программист пишет не на том, что ему нравится, а на том, что лучше подходит для решения задачи.

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

annonymous ★★
()
Ответ на: комментарий от annonymous

> array_filter(array_map(create_function('$v', 'return $v*$v;'), array(1,3,5,6,20,23)), create_function('$v', 'return $v>10;'));

Молодец:) Но всётки на ПХП это не очень читаемо получилось (в отличии от руби и питона)

CrazyPit ★★★
()
Ответ на: комментарий от KRoN73

> На вход ему подаётся массив ассоциативных массивов, содержищих поля
 date (в unixtime), title (строка) и uri (строка). Нужно вывести
 средствами шаблона эти данные в виде списка дат в POSIX-strftime
 формате, заголовков со ссылками. Если дата - за последние сутки, то
 пишется только время, если больше - только число. Заголовки порезать
 до 60 символов. 

 Ну, раз пошла синтетика: 

<ul> 
$data.menu{ 
$data.date=^data:unix-timestrap($data.date)
<li>^if($date.date>^data:now[]-86400){
    $data.date.hour ч $data.date.minute м
}{
    $data.date.year^.$data.date.month^.$data.date.day
}
<a href="$data.uri">$data.title.left(60)</a>
</li>
}
</ul> 


:P

Aceler ★★★★★
()
Ответ на: комментарий от CrazyPit

> Так и запишем о ORM в PHP не осведомлены;)

Записывайте себе что хотите. Я просто в эти игры (я буду задавать вопросы, а ты - отвечай) уже наигрался.

atrus ★★★★★
()
Ответ на: комментарий от Aceler

> Товарищ проявляет некомпетентость только что. Сам редактор писан на JavaScript. А к серверной части он чем подключаться будет? Или здесь собрались любители /dev/null?

Ещё раз муахаха. Серверная часть есть для многих языков более-менее используемых в веб, в том числе для Питона и Руби.

CrazyPit ★★★
()
Ответ на: комментарий от Aceler

Тьфу. Запутался я в ваших data и date. Кто надо - тот поймет :)

Aceler ★★★★★
()
Ответ на: комментарий от KRoN73

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

gloomdemon
()
Ответ на: комментарий от CrazyPit

> Ещё раз муахаха. Серверная часть есть для многих языков более-менее используемых в веб, в том числе для Питона и Руби.

Ты о чем? Медленно, по буквам. П-О-Д-К-Л-Ю-Ч-А-Т-Ь-С-Я.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

>Причем тут идти писать? Я говорю о том, что это можно взять и использовать. Google тоже можно "взять". Но он будет рекламу свою вставлять.

Простите, не сразу понял :) Тогда ещё проще.. гугл продаёт ящики с поисковиком для корпоративок ))

forgiven
()
Ответ на: комментарий от KRoN73

>> Хороший программист пишет не на том, что ему нравится, а на том, что лучше подходит для решения задачи.

> Мне интересно, найдётся тут маргиналы, которые под этим не подпишутся? :)

Всё-то вы усложняете, блин. Мне нравится именно то, что лучше подходит для решения моей задачи.

ero-sennin ★★
() автор топика
Ответ на: комментарий от CrazyPit

Ну да, на пару строк разбить не помешает. Длинные имена функций, но
принцип тот же. По большому счёту разницы между ruby и php в данном
примере нет. Псевдокод выглядит примерно одинаково:

filter(map(fn('$v', '$v*$v;'), (1,3,5,6,20)), fn('$v', '$v>10;'))

annonymous ★★
()
Ответ на: комментарий от Aceler

А что в Парсере я так понимаю основной стиль программирования - смешивание логики и предстваляения? Или вы только так пишите?

CrazyPit ★★★
()
Ответ на: комментарий от forgiven

> Простите, не сразу понял :) Тогда ещё проще.. гугл продаёт ящики с поисковиком для корпоративок ))

Угу. И рекламу показывает. И перехватом и SEO заниматься будете сами. И деньги платить тоже.

Aceler ★★★★★
()
Ответ на: комментарий от CrazyPit

>Х.з. я тоже так думал. Спросил как-то в Talks - большинтсву такой код был абсолютно понятен (даже тем кто не знал питон)

Разница между "код понятен без знания языка" и "код легко воспринимается при знании языка" может быть просто огромной :)

Безусловно, приведённый код совершенно понятен для тех, кто Ruby не знает.

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

Любой автономный модуль должен состоять не более чем из 7+/-2 токенов. При чём лучше "-" :) человеческое сознание просто не может оперировать одновременно более, чем 7+/-2 элементами.

Если код делится на элементы чётко и без синтаксического шума, то хорошо. Если деление на элементы усложняется, появляется шум, мозг может перестать воспринимать отдельные элементы самостоятельно. И ему придётся прибегнуть к более детальному разделению, посимвольному. Соответственно, автоматически падает зона охвата. Мы уже видим не программную конструкцию, а только один элемент. Потом, когда мы элемент распознали и вычленили, мы перейдём к следующему. В итоге, каждый раз, мозгу придётся заново "пересобирать" информацию. Приводя программистскую аналогию, мы переходим от выполнения компилированного кода к интерпретации. Что серьёзно снижает быстродействие :)

Поэтому, кстати, в сабжевой тройке наивысшая читаемость будет у Питона (хотя я тут как бы на стороне PHP выступаю :)), потом - у PHP и потом - Ruby.

Пока программист "читает по слогам" - Ruby ему будет нравится. А вот потом... Ну, тут уже от степени испорченности зависит :)

...

К сожалению, не могу оценить Parser, не знаю его (но полагаю, что его уровень будет как у PHP) и Haskell (кажется, он хорошо токенизируется, но токены его мне совершенно непривычны, так что не могу оценить правильность вывода, да и вообще, у меня мозги на императивном программировании закостенели).

KRoN73 ★★★★★
()
Ответ на: комментарий от CrazyPit

> А что в Парсере я так понимаю основной стиль программирования - смешивание логики и предстваляения? Или вы только так пишите?

Доступны любые стили. Просто в данном случае так удобнее. Parser - сам себе шаблон и сам себе фреймворк, если уж на то пошло.

Aceler ★★★★★
()
Ответ на: комментарий от gloomdemon

>Начиная с php4.4 такие вещи вызвают notice

Notice вызывает применение неинициализированной переменной. $result[] = value к этому не относится.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> К сожалению, не могу оценить Parser, не знаю его (но полагаю, что его уровень будет как у PHP)

Примеры привести? :)

Aceler ★★★★★
()
Ответ на: комментарий от CrazyPit

>Зачёт. Но в haskell всё равно меньше:)

Ну, я за краткостью не гнался :) (это реальный код JBForth, при чём может вызываться непосредственно из среды исполнения... например, когда я администрирую запущенный сервер MMORPG - прямо из программы-клиента :))

KRoN73 ★★★★★
()
Ответ на: комментарий от Aceler

> Ты о чем? Медленно, по буквам. П-О-Д-К-Л-Ю-Ч-А-Т-Ь-С-Я.

Либо я что-то не понимаю, либо вы что-то путаете. FCKEditor прекрасно работает без PHP. Есть реализации server-side на различных языках.

CrazyPit ★★★
()
Ответ на: комментарий от forgiven

>"gg:how google works" и перечитывать пока не надоест :)

По такому запросу вывалилась тонна неотносящихся к теме ссылок. Или это в Яндексе вводить нужно? :)

>да и в разделе job всё ясно и понятно что гугль на плюсах..

А что же тут его как пример проекта на RoR или Python толкают? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от CrazyPit

> Есть реализации server-side на различных языках.

On the server side, FCKeditor offers a complete integration pack for:

ASP.Net

ASP

PHP

ColdFusion

Java

Perl

Не вижу Ruby и Python.

Aceler ★★★★★
()
Ответ на: комментарий от KRoN73

> Жду ответный пример в системе шаблонов Django или RoR

На Django:

<ul> 
{{ for field in data }}
<li> 
{{ field.date|my_format }}
<a href="{{ field.uri }}">{{ field.title|truncate:60 }}</a> 
</li> 
{{endfor}} 
</ul>

Фильтр my_format пишется на нормальном питоне,
а не на каком-то постороннем недоязыке:

def format_date(date):
    if (datetime.now() - date).days < 1:
        reutrn date.strftime('%H:%M')
    else:
        return date.strftime('%Y-%m-%d')

Шаблоны smarty слишком много умеют, и провоцируют
разработчиков засовывать в них слишком много логики.
Как в нашем любимом недоязыке PHP. Напротив, в Django
вся логика пишется на питоне, а язык шаблонов там сделан
в духе здорового минимализма. Как результат, шаблоны
можно отдавать всяким дизайнерам-верстальщикам, которые
в Питоне ни бум-бум, и они при всём желании не смогут
ничего сломать.

anonymous
()
Ответ на: комментарий от Aceler

> Ну, раз пошла синтетика:

Ладно, засчитывается. Хотя шума намного больше...

Кстати: <a href="$data.uri">$data.title.left(60)</a>

А если мне строку $data.title прямо текстом в шаблон ставить нужно? Экранировать? Т.е. ещё больше шума? :)

Упс! Ты почему у меня strftime убрал?

Расширяю условие - если год до 2000-го, то писать его в виде 2-х цифр, а если после - то в виде четырёх.

{assign var=year value=$now|strftime:%Y}{if $year >= 2000}{$data[i].date|strftime:"%Y-%m-%d"}{else}{$data[i].date|strftime: "%y-%m-%d"}{/if}

KRoN73 ★★★★★
()
Ответ на: комментарий от annonymous

>По большому счёту разницы между ruby и php в данном примере нет.

Угу. Он одинаково безобразен :D

KRoN73 ★★★★★
()
Ответ на: комментарий от Aceler

>Примеры привести? :)

Так по ходу приводились уже :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>А что же тут его как пример проекта на RoR или Python толкают? :)

Нет, я к Руби и Питону не очень хорошо отношусь, так же как и к ПхП впринципе :) Просто там в пример приводились какие-то проекты, написанные на ПХП, но нет аналогов на Руби или Питоне.. Мне и непонравился этот странный показатель языкастости этого языка :) Ведь многим проектам в вебе нет аналогов на ПХП..

forgiven
()
Ответ на: комментарий от Aceler

> Не вижу Ruby и Python.

Ну, на самом деле реализация более чем простая, и тут спорить
бессмысленно, так как добавитьь её пара пустяков. Однако факт отсутствия
Ruby и Python в списке server-side языков говорит о другом ;)
О том, насколько часто их используют для таких задач... И действительно,
зачем в хомяке fckeditor? ;)

annonymous ★★
()
Ответ на: комментарий от KRoN73

> А если мне строку $data.title прямо текстом в шаблон ставить нужно? Экранировать?

Да.

> Упс! Ты почему у меня strftime убрал?

^date:unix-timestrap() никто не заметил? :)

> Расширяю условие - если год до 2000-го, то писать его в виде 2-х цифр, а если после - то в виде четырёх.

^if($data.date.year<2000){$data.date.year}{^data.date.year.format(%2)}

> Хотя шума намного больше...

Конечно. Это же не шаблон, это язык. Сам себе шаблон :)

Обычно код на parser состоит из двух частей: функций и классов в фале auto.p, подключаемом автоматически, и шаблоне в файле *.html, в котором используются эти классы и функции. Синтаксис при этом получается одинаковый.

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

Aceler ★★★★★
()
Ответ на: комментарий от KRoN73

>Любой автономный модуль должен состоять не более чем из 7+/-2 токенов. >При чём лучше "-" :) человеческое сознание просто не может оперировать одновременно более, чем 7+/-2 элементами.

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

касательно восприятия:
я код на Ruby ни разу до этого в глаза не видел, но то, что написал CrazyPit абсолютно для меня понятно и не требует никаких обдумываний, да и читается (воспринимается) очень легко.

kvitaliy
()
Ответ на: комментарий от anonymous

>На Django:

Засчитывается. Ещё один камушек на чашку ускорения изучения Django... Правда, для собственного любопытства пока только :)

>Фильтр my_format пишется на нормальном питоне, а не на каком-то постороннем недоязыке:

Ну, здрасьте... strftime в том примере как раз и есть фильтр, который передаёт строку и формат родной функции :)

Можно, конечно, и отдельный фильтр написать.

Пример-то был именно для демонстрации управления отображаемым контентом.

ибо если на каждое условие лепить своии модификаторы или фильтры, то неизбежно часть дизайна из шаблона переползёт в код. Вот и у тебя, кстати, формат даты в код переполз. Т.е. дизайнеру, меняя формат, придётся в Python-код лезть :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Надеюсь, также, что у них шаблоны имеют функции авторекомпиляции при смене даты модификации шаблона в формате юзера?

Сервер следит за файлами с шаблонами и сам их перезагружает, когда они изменяются.

anonymous
()
Ответ на: комментарий от KRoN73

> Вот и у тебя, кстати, формат даты в код переполз. Т.е. дизайнеру, меняя формат, придётся в Python-код лезть :)

Дизайнеру в код лезть не надо. Ему надо воспользоваться фильтром, который для него написали программисты. Фильтру можно передавать аргументы, если надо. Простой if-else в Djangoвский шаблон можно засунуть, но хитрые операции с данными должны находиться в отдельном коде. Или ваш язык шаблонов будет ничуть не лучше PHP.

anonymous
()
Ответ на: комментарий от Aceler

> Не вижу Ruby и Python.

Что-то у них вики не отркрывается... Но Python овские файлы там точно были. Для руби - сторонняя реализация gg:fckeditor+rails

CrazyPit ★★★
()
Ответ на: комментарий от anonymous

>Сервер следит за файлами с шаблонами и сам их перезагружает, когда они изменяются.

У меня шаблоны не в файлах, а в БД.

Smarty работает с любыми источниками данных для шаблонов. Достаточно зарегистрировать две функции - вернуть шаблон по имени и вернуть дату шаблона по имени. Естественно, разнотипные шаблоны могут использоваться вместе. Скажем, у меня системные шаблоны все в файловой системе, а то, что дизайнер правит - в БД.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.