LINUX.ORG.RU

PHP vs RoR vs Django


0

0

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

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

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

★★

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

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

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

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

>Покажите мне на Ruby что-то такое: http://www.phpbb.com/

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

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

>И свои и чужие вел, поэтому и удивляюсь, ибо не встречал еще ни одного человека (знающего что-то еще кроме php), который бы захотел использовать php по своей воле

Ну, на меня можешь посмотреть. 7 лет практики на Си++, 6 - PHP и Perl, по паре лет - Forth и ассемблер x86, около полутора лет - Java, около года - ассемблер PDP...

Что там ещё? А, года три qbasic, периодически JavaScript. Когда-то - Fortran. "Hello, world" ещё десятке на двух языков.

Как думаешь, с таким багажом можно оценивать языки более-менее объективно? :)

...

Так вот, сейчас 70% кода я пишу на PHP. Да, он далеко не идеален как язык. Но _программисту_ (т.е. человеку, пишущему _продукт_) качество языка фактор важный, но зачастую не первостепенный. Тут уже пару раз звучало слово _инфраструктура_.

А что до Ruby и Python... Приличные языки. Но место под солнцем завоёвывать им ещё _только предстоит_.

А там, как завоюют - так и поговорим. Ибо нормальному программисту освоить новый язык - это лишь месяц неторопливой работы. Освоить в совершенстве - год максимум.

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

> ПХП требует больше строк кода и больше времени, чем Ruby/Python для решения эквивалентных задач.

Возможно. Насчет строк.

1. Наличие готовых решений, как обычно идет лесом? Выкидывайте рельсы, оставляйте только голый Ruby. Что с ним будет?

2. Отладка кода на Ruby (особенно _такого_ когда, который нам показывали) занимает меньше времени?

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

>> Про PHP - заменить print на $result.= .

>Аддский отжиг! Ты решил впарить строку вместо массива, зачетно, зачетно!

Адское незнание того, что хаешь. Трудно заменить $result.= на $result[]= ?

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

> Но _программисту_ (т.е. человеку, пишущему _продукт_) качество языка фактор важный, но зачастую не первостепенный.

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

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

> 2. Отладка кода на Ruby (особенно _такого_ когда, который нам показывали) занимает меньше времени?

Епстественно, друк. А на Питоне - ещё меньше. Во-первых, потому что язык способствует написанию безглючных программ, а во-вторых, ты вообще ipython/ipdb видел?

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

> Кстати да, только я боюсь что ПХПшники примут эти функции как великое откровение:) А в самом деле извратно он в ПХП сделаны:/

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

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

> [ write (e*e) for e in [1, 3, 8, 2, 8]]

А хде фильтр?

> или для извращенцев: >[ write (e) for e in [ ee * ee for ee in [1, 3, 8, 2, 8]] ]

Фильтра тоже нет и вообще я тоже самое писал, только вместо второго LC лучше map юзать.

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

>[1,3,8,2,8].map {|v| v*v}.filter {|v| v > 10}.each {|v| puts v}

Кстати, подумалось тут...

{ 1 3 8 2 8 } "dup * dup 10 > if . else drop then" do-list

Такое кого-нибудь устраивает? :)

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

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

Потому что ты делаешь осмысленный токен. Облегчаешь своё восприятие.

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

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

Ну тогда о реальном применении языков в web разговаривать с тобой бессмыслено. О теоретическом "Ruby стройнее" - сколько угодно. Но тогда ты будешь противостоять Parser, а не PHP.

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

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

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

> На сколько я знаю, Лисп такого не умеет :)

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

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

>trac - система управления проектами. Питон.

trac - очень приятная и уважаемая мною система. Но вот масштабы, всё же, несопоставимые :) Да и из другой области пример.

Я спросил про проект уровня Википедии на RoR или Питоне. Даже дополню условие (чтобы кто-нить не ляпнул в духе, "microsoft.com на RoR и попробуй опровергнуть") - ещё и с открытыми сорцами (мы же опенсорс-сообщество, нет?)

Trac - это только продукт. Можно посмотреть на проект уровня Википедии, написанный на нём? :) Мой сайт с пятью проектами на это звание не тянет... opensvn.csie.org - практически никогда не работает последнее время...

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

бла-бла-бла скоро ссылки в биореактор постить начну.

Собсвенно если перечитать тред, то видно, что идут одни нападки, что мол какой у класснык ror и питон, но при этом ничего толкового на них написанного показать не могут. Всё ответы, типа да мы щас за пол часа на коленке сбахаем. Так красноглазики орали когда MS о dotnet заявил, а как он вышел так сразу и поотваливались.

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

>Linux.org.ru ;)

Он на RoR? Или на Django? ;)

...

Кстати, а есть статистика по посещаемости ЛоРа? "Помериться" интересно было бы :)

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

> Есть такие аналоги в RoR или Python?

erb + рельсовый кэш. Хотя конечно не совсем тот принцип. Но судя по бэнчмаркам сабжевым...

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

А вот строки из контекста вырывать не хорошо ;) я сказал "... по своей воле для написания чего-либо сложнее cms и гесты". Для любого языка есть своя ниша, свои плюсы и минусы, и выбирать инструмент стоит исходя из задачи, а не из собственных предпочтений, иначе это выглядит как: я умею пользоваться молотком - пойду закручу пару шурупов.

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

>Поставим перед собою цель, переписать lor на PHP =)

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

Вот и в программировании - сайт легко может быть смесью своершенно разных кодовых блоков. Скажем, я свою систему когда-то начинал делать офлайновой на Форте. Потом она была офлайновая же на Перле. Потом переехала в онлайн. Потом Перл начал понемногу вытесняться ПХП. Но не меньше трёх лет она представляла из себя смесь Перла и ПХП (а кое-где Перл жив и сейчас, но в виде уже автономных модулей). Часть системы (рейтинги и топы - до 200тыс. хитов в сутки) сейчас вообще думал на Java переносить, пока не придумал более изящное решение на средствах HTTP-сервера.

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

> Как выяснилось Haskell рулит, ага?

Как выяснилось, рулит PHP. Пока никто не решил задачу про Bitrix, PHPBB, OpenGroupWare и mnoGoSearch...

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

Он не на php :)

p.s. А про мой пост о vb забыли... :( А ведь интересно, все-таки:)

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

> Ты считаешь это аналогом Гугла ? :)

Тебе нужна поисковая система на сайте? Давай, включи в проект код гугла.

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

>http://google.com и компания

На чём у них фронтенд написан? На чём бэкэнд? И чем можно это доказать?

...

Вот не зря я потом про opensource дописал. А то напридумывать можно много чего...

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

>Если ты читаешь код посимвольно, это проблема мозга

Судя по всему у тебя проблемы мозга настолько велики, что ты уже и русский читать не умеешь. Перечитай то, что я писал.

Или ты и русский читаешь по буквам и поэтому от тебя смысл ускользает?

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

>но при этом ничего толкового на них написанного показать не могут.

basecamp не пример того что на ror можно ещё что-то делать? :)

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

можно написат

a = [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]

или

return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]

А ПХП понадобиться доп переменная (как видно здесь мы не вводим не одной переменной локальной для функции). Правда в руби вводим:( т.к. есть грубый проектировачный просчёт - переменный в блоках становяться локальными в функции. Вот кстати рельный недостаток руби. Правда Матц в 2 обещал исправить.

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

> Чем дальше, тем больше синтаксического шума. Эргнономика работы с таким кодом - околонулевая. Разбираться с ним год спустя - застрелишься.

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

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

> Ой, держите меня, братове, уссусь! Google vs mnogosearch :))))) Битва титанов, ога.

И ты тожe уже включил код гугля в свой проект? Травы отсыпешь?

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

Кстати, вот с сайта сравнение с smarty, если это называется уделывать smarty, то дальнейшие разговоры о том что ror и python крусе php можно не вести, одно красноглазие.

http://www.cheetahtemplate.org/docs/users_guide_html/users_guide.html#SECTION...

Features Smarty has that Cheetah lacks:

* Preprocessors, postprocessors and output filters. You can emulate a preprocessor in Cheetah by running your template definition through a filter program or function before Cheetah sees it. To emulate a postprocessor, run a .py template module through a filter program/function. To emulate a Smarty output filter, run the template output through a filter program/function. If you want to use ``cheetah compile'' or ``cheetah fill'' in a pipeline, use - as the input file name and --stdout to send the result to standard output. Note that Cheetah uses the term ``output filter'' differently than Smarty: Cheetah output filters (#filter) operate on placeholders, while Smarty output filters operate on the entire template output. There has been a proposed #sed directive that would operate on the entire output line by line, but it has not been implemented. * Variable modifiers. In some cases, Python has equivalent string methods (.strip, .capitalize, .replace(SEARCH, REPL)), but in other cases you must wrap the result in a function call or write a custom output filter (#filter). * Certain web-specific functions, which can be emulated with third-party functions. * The ability to ``plug in'' new directives in a modular way. Cheetah directives are tightly bound to the compiler. However, third-party functions can be freely imported and called from placeholders, and methods can be mixed in via #extends. Part of this is because Cheetah distinguishes between functions and directives, while Smarty treats them all as ``functions''. Cheetah's design does not allow functions to have flow control effect outside the function (e.g., #if and #for, which operate on template body lines), so directives like these cannot be encoded as functions. * Configuration variables read from an .ini-style file. The Cheetah.SettingsManager module can parse such a file, but you'd have to invoke it manually. (See the docstrings in the module for details.) In Smarty, this feature is used for multilingual applications. In Cheetah, the developers maintain that everybody has their own preferred way to do this (such as using Python's gettext module), and it's not worth blessing one particular strategy in Cheetah since it's easy enough to integrate third-party code around the template, or to add the resulting values to the searchList.

Features Cheetah has that Smarty lacks:

* Saving the compilation result in a Python (PHP) module for quick reading later. * Caching individual placeholders or portions of a template. Smarty caches only the entire template output as a unit.

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

По сравнению с этим Cheetah, смарти просто уруливает, при чём очеень далеко.

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

> Ruby и в Python как-то придётся указать *куда* помещать результат. Или интересует класс задач, сбрасывающий данные в /dev/null?

Ну да в переменную напрмер или возвращать в функции...

> Я ведь предупреждал: "Учтите, за продолжение мастер-класса я намерен брать деньги." ;-)

Так и запишем о ORM в PHP не осведомлены;) Кстати наиболее близкое к этому можно посмотреть в CakePHP но всё равно намного кривее чем ActiveRecord из RoR'a

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

>И ты тожe уже включил код гугля в свой проект? Травы отсыпешь?

Ты тоже уже включил все фичи Битрикса в свой проект? :)

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

>В RoR, а особенно, в Django есть _прекрасные_ шаблоны

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

<ul>
{section loop=$data name=i}
<li>
{if $data[i].date > $now-86400}
{$data[i].date|strftime:"%H:%I"}
{else}
{$data[i].date|strftime:"%Y-%m-%d"}
{/if}
<a href="{$data[i].uri}">{$data[i].title|truncate:60}</a>
</li>
{/section}
</ul>

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

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

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

> можно написат 
 a = [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10] 
 или 
 return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]

$var (1,3,5,6,20)
<html>
<table><tr>
^if(($v=$var.menu^2)>10){<td>$v</td>}
</tr>
</table>
</html>

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

> А код на PHP C и.т.д. в студию. (Размер входного массива может быть любым).
> Ruby:
> [1,3,5,6,20].map {|v| v*v}.select {|v| v > 10}

Пожалуйста:

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

Ваши комментарии в студию.

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