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.
А может еще в чём.