Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет rusec ([info]rusec)
@ 2007-11-20 13:43:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Perl vs PHP
Думается, подавляющее большинство программистов, знающих и perl и php со мной согласится.
При общей похожести perl более продуман и писать на нём приятней.
Но.
Подавляющее число вебпроектов пишется на php.
Я, собственно, за него и взялся не найдя ни одной приличной CMS на перле.
Кажется, я понял в чём дело.
Пых работает быстрее, меньше процессор грузит.
Написал простенький тестик:

Perl:

#!/usr/bin/perl

$| = 1;
$\="\n";

use librusec;
use Encode;
use bytes;
use Net::HTTP;

print "Content-type: text/html; charset=utf-8\n\n";

for ($i=0;$i<22;$i++) {
$b = $i*22+33;
$tit = Select("Title FROM libbook WHERE BookId = $b");
$booktit{$b} = $tit;
$bookid{$tit} = $b;
}

foreach $b (keys %booktit) {
$r .= ',' if $r;
$r .= $booktit{$b};
}
print $r;


PHP:


$libmode = 1;
require 'AJAX.php';
set_active('lib');
for ($i=0;$i<22;$i++) {
$b = $i*22+33;
$tit = Sel("Title FROM libbook WHERE BookId = $b");
$booktit{$b} = $tit;
$bookid{$tit} = $b;
}

foreach ($booktit as $t => $b) {
if ($r) $r .= ',';
$r .= $b;
}

print $r;


Вызов:

#!/usr/bin/perl
use Time::HiRes;
use Net::HTTP;

$| = 1;
$\="\n";


for $i (0..99) {
$t1 = Time::HiRes::time();
$type = $i%2 ? 'php':'pl';
my $host = Net::HTTP->new(Host => 'localhost') or die $@;
$host->write_request(GET => 'speed.'.$type, 'User-Agent' => "Mozilla/5.0");
my($code, $mess, %h) = $host->read_response_headers;
my $buf;
my $n = $host->read_entity_body($buf, 1024);
die "read failed: $!" unless defined $n;
$t2 = Time::HiRes::time() - $t1;
$sum{$type} += $t2;
}

print "PHP: $sum{php}, Perl: $sum{pl}";


Запустил несколько раз, чтоб мускульные кэши заполнились.

Результат:


PHP: 0.42498517036438, Perl: 9.19204187393188
PHP: 0.35810399055481, Perl: 10.2584187984467
PHP: 1.05701279640198, Perl: 9.79568386077881
PHP: 0.555223226547241, Perl: 10.5315308570862
PHP: 0.296421051025391, Perl: 16.945974111557
PHP: 0.327699899673462, Perl: 11.2998297214508

Разница заметна

Думаю, причина в том, что перлу надо обрабатывать use (которых в реальной жизни заметно больше, чем в тесте), а за пых это делает APC.
А может еще в чём.


(Читать комментарии) - (Добавить комментарий)


[info]rusec@lj
2007-11-21 13:56 (ссылка)
Ровно столько же.
Синтаксис очень похож.
А три строчки в начале

#!/usr/bin/perl
use CGI;
print "content-type:text/html\n\n";

никто не учит, а копирует из примеров.

Для того, чтобы сделать простейшую динамическую страницу, надо знать:
1. html (и CSS хоть как-то)
2. sql
3. неплохо бы javascript
на этом фоне отличия сложности изучения перла от пыха совсем слаборазличимы, если они и есть.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]grey3@lj
2007-11-22 09:17 (ссылка)
Различия есть, по мере копания вглубь их всё больше.
Перл является универсальным, Пыхп возник специально для Веба и оптимизирован для него. Мод-перл - не столько оптимизация Перла под Веб, сколько оптимизация под Апач; основное отличие - интерпретатор не стартует заново, а лишь повторно исполняет скрипт. Отсюда в мод-перле намного более жёсткие требования к качеству скриптов: обязательна явная инициализация-очистка переменных перед использованием, пограммист не должен допускать "утечек" памяти (в особенности неудаления или потери структур, имеющих ссылки на самих себя - обычный сбор мусора их не ловит и не освобождает!), обязательно use strict, ну и прочие мелочи. Иначе возникает самая частая ошибка - скрипт использует часть переменных со значениями, оставленными после запроса предыдущего юзверя! Во втором случае быстро растёт размер процессов и начинается своппинг, а при ограничении "maxReqPerChild" теряется преимущество мод-перла в отсутствии повторных стартов интерпретатора. Поэтому в большинстве случаев скрипты, написанные на Перле, для мод-перла приходится внимательно отлаживать и немного править. Я сам когда-то этим занимался.
Все эти сложности и привели к быстрой победе Пыхпа над Мод-перлом в области Веб-дизайна.
Другое дело, что изредка возможностей Пыхпа не хватает для особо сложной обработки данных, и тогда удобнее программировать в мод-перле; но это именно единичные случаи. Для готовой системы не стоит стараться и изучать тонкости мод-перла.

(Ответить) (Уровень выше)


(Читать комментарии) -