LINUX.ORG.RU

тормазнутость require в perl


0

2

Подгружаю с помощью require скрипт (62 стр). В скрипте ничего запускающегося сразу нету, только функции. Обнаружил, что подгружается он 9мс можно ли его както ускорить?


Пересобери всю систему с icc

yoghurt ★★★★★
()

Не использовать перл, и я серьезно. Перл - это не тот язык, с помощью которого можно биться за производительность, как интерпретатор порешит - так и будет ;) Хотя конечно есть трюки возможно, ускоряющие ту или иную операцию, но они далеко не подо все.

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

именно поэтому, что «Перл - это не тот язык, с помощью которого можно биться за производительность», он наверно используется в яндексах и на гуглах

kote
() автор топика

use use, Luke :-)

сделайте из скрипта модуль
require работает на этапе исполнения, use на этапе компеляции

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

>именно поэтому, что «Перл - это не тот язык, с помощью которого можно биться за производительность», он наверно используется в яндексах и на гуглах

Когда от перла нужна ОЧЕНЬ высокая производительность, программа на перле должна выводить код на асме/сях/сях с крестиками, который после компилируется и запускается. :)

proud_anon ★★★★★
()

синтаксис кривой

тормаз... -> тормОз...

minakov ★★★★★
()

> можно ли его както ускорить?

а зачем ускорять запуск? используйте fastcgi/mod_perl/etc ;)

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

> а зачем ускорять запуск? используйте fastcgi/mod_perl/etc ;)

а из чего следует что речь идет о CGI на perl-е писанном, а не просто перл скрипте каком-то?

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

ну а где ещё время старта 9мс — это много?) сомневаюсь, что ТС пишет на перле mission-critical скрипты для real-time систем :)

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

… которые, при этом, с нуля загружаются на каждой итерации.

arsi ★★★★★
()

Кстати require делает синтаксический анализ, компиляцию, исполнение.. Есть модули которые как-бы компилируют перл код ( на самом деле там не совсем компиляция). Попробуйте - загружатсья теоретически будет быстрее.

http://perldoc.perl.org/perlcompile.html
А сам модуль который нужен http://perldoc.perl.org/B.html

Вообще это странная проблема. Вот то что хеши сильно медленные, вот это плохо 8((

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

> Но он выполняется один раз после запуска пограммы (даже если его в цикле разместить).

perldoc -f require

Note that the file will not be included twice under the same specified name.

arsi ★★★★★
()

заметил что скорость работы require зависит от размера скрипта. Но это правило почему то распространяется только на мои скрипты. Подгружаю HTML::Template с помощью require (лень было инсталить), он грузится за какие то микросекунды, хотя весит раз в 7 больше моего скрипта, который грузится 9 мс

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

возможно из-за того, что перед включением локального пакета перл ищет пакет в десятке других мест?

$ perl -E 'say for @INC'

попробуйте добавить в скрипт

BEGIN{unshift @INC,'.'}
arsi ★★★★★
()
Ответ на: комментарий от arsi

попробывал. Никакой разницы.

kote
() автор топика
package main;
sub getsettings
 {
  my $dbh=shift;
  my $query="SELECT `set_name`,`set_value` FROM `$site_settings{'prefix'}_settings`";
  my $sth=$dbh->prepare($query);
  my %settings;
  my $res;
  $sth->execute();
  if($res=$sth->fetchrow_hashref)
   {
    do
     {
      $settings{$$res{'set_name'}}=$$res{'set_value'};
     }
    while($res=$sth->fetchrow_hashref);
   }
  $sth->finish();
  return \%settings;
 }
1;

вот такой скриптик подгружается 824µs, при том что HTML::Template подгружается за 949µs

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

эх…

sub getsettings {
    my $query = "SELECT `set_name`,`set_value` FROM `$site_settings{'prefix'}_settings`";

    return {@{ shift->selectcol_arrayref($query, {Columns=>[1,2]}) }};
}

хотя на скорость это вряд ли повлияет :)

arsi ★★★★★
()

Создал 2 скрипта 1й t.pl:

#!/usr/bin/perl
require 'test.pl';
print 'test';

2й test.pl (48 стр):

sub test{
 print 'lalala';
 print 'lalala';
 print 'lalala';
...
 print 'lalala';
}
1;

время подгрузки test.pl 722µs

kote
() автор топика

Время загрузки не изменяется даже на 2х процессорном ксеноне.

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