Schrift
[thread]5386[/thread]

speed-up trotz module: ...



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
esskar
 2003-11-10 01:35
#48387 #48387
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
die ersten zeilen in meinem script sehen so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

# use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

use Sources::Env;
use Sources::CGI;
use Sources::Global;
use Sources::Config;
use Sources::Authenticate;
use Sources::Session;
use Sources::MailShow;
use Sources::MailCompose;
use Sources::Cookie;
use Sources::Cleanup;
use Sources::Benchmark;


die module sehen meist so aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package Sources::MailCompose;

use strict;
use warnings;

use Sources::Global;
use Sources::Session;
use Sources::Config;
use Sources::Mail;
use Sources::MailShow;
use Sources::Uploader;
use Sources::Mime;
use Sources::SMTP;
...


wobei nicht jedes modul die selben, aber viele andere module einbinden kann

wie kann ich die module so modifizieren, dass das ganze schneller wird? kein module benutz den exporter oder ähnliches...

funktionen von eigenen modulen werden entweder über objecte oder über Sources::Module::function_x() aufgerufen...

das ganze ist echt langsam... nicht das ausführen (benchmark beweis) aber wohl das parsen und interpretiren...

hinweise erwünscht
kabel
 2003-11-10 08:32
#48388 #48388
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
shot 1: [s]use ist ja ein BEGIN { require; import; } ...[/s] leider daneben ... siehe perldoc -f use
shot 2: CPAN:ByteLoader? die doku ist leider nicht existent :-/
shot 3: nicht alles oben statisch reinziehen, sondern genau dann, wenn es tatsächlich gebraucht wird (require). dadurch erreichst du 1) dass in ein paar zweigen module nicht eingezogen werden müssen (hoffentlich) und 2) verschiebst du das laden der module von der compilezeit in die laufzeit.
shot 4: ein modul kann mehr als ein package beinhalten. dadurch entfällt ein teil des use-overheads.

HTH
-- stefan
esskar
 2003-11-10 12:34
#48389 #48389
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay... wollte das mit require mal versuchen

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
my %Actions = (
login => {
libs => [
"Sources::Env",
"Sources::Global",
"Sources::Authenticate",
],
subs => [
\&Sources::Env::global_set,
\&Sources::Global::write_standardhttp_header,
\&Sources::Authenticate::write_loginmask,
],
},
);

sub handler
{
my ($obj) = @_;
my $action = lc($obj->{CGI}->getparam('action')) || 'login';

unless(exists $Actions{$action}->{subs}) { $action = 'login'; }

foreach my $lib (@{$Actions{$action}->{libs}})
{
require $lib;
}

foreach my $proc (@{$Actions{$action}->{subs}})
{
unless($proc->($obj))
{
# error in sub
last; # errorhandling
}
}
}


leider meint er jetzt:

Can't locate Sources::Env in @INC (@INC contains: F:/Perl/lib F:/Perl/site/lib .) at F:\ams\sentinel\www\email\mailgate.pl line 235

wobei 235 die Zeile

require $lib;

ist...


Es wundert mich, dass er sie einmal findet und einmal nicht!
Hints?
kabel
 2003-11-10 15:06
#48390 #48390
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
require will ein .pm hintendran, use macht das automatisch.
-- stefan
esskar
 2003-11-10 15:56
#48391 #48391
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ahaja... die basics :)
esskar
 2003-11-10 16:01
#48392 #48392
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
my %Actions = (
login => {
libs => [
"Sources/Env.pm",
"Sources/Global.pm",
"Sources/Authenticate.pm",
],
subs => [
\&Sources::Env::global_set,
\&Sources::Global::write_standardhttp_header,
\&Sources::Authenticate::write_loginmask,
],
},
);

...
foreach my $lib (@{$Actions{$action}->{libs}})
{
# eval "require $lib";
require $lib;
]


so gehts
pq
 2003-11-10 16:05
#48393 #48393
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=kabel,10.11.2003, 14:06]require will ein .pm hintendran, use macht das automatisch.[/quote]
nicht immer. require CGI; läuft bei mir fehlerfrei.
require "CGI"; jedoch nicht, genausowenig
$x="CGI";require $x;.
erklärung in perldoc -f require:
Quote
              If EXPR is a bareword, the require assumes a ".pm"
              extension and replaces "::" with "/" in the
              filename for you, to make it easy to load standard
              modules.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2003-11-10 16:06
#48394 #48394
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=kabel,10.11.2003, 07:32]shot 1: [s]use ist ja ein BEGIN { require; import; } ...[/s] leider daneben ... siehe perldoc -f use[/quote]
hm? wieso daneben? (ja, ich habe perldoc -f use gelesen)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2003-11-10 16:17
#48395 #48395
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hi...
danke... ist glaube ich schneller
kabel
 2003-11-10 19:15
#48396 #48396
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=pq,10.11.2003, 15:06][quote=kabel,10.11.2003, 07:32]shot 1: [s]use ist ja ein BEGIN { require; import; } ...[/s] leider daneben ... siehe perldoc -f use[/quote]
hm? wieso daneben? (ja, ich habe perldoc -f use gelesen)[/quote]
Quote
If no "import" method can be found then the call is skipped.


heisst für mich: wenns kein import gibt, dann gibts halt keines. andererseits:

Quote
The module can implement its "import" method any way it likes, though most modules just choose to derive their "import" method via inheritance[...]


es könnte also die suche in der klassenhierarchie gespart werden, was die compilezeit verringert.

in der tat, nicht ganz daneben
-- stefan
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2003-11-10 01:35.