/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Nogle go'e råd...
Fra : John Doe


Dato : 12-06-01 00:38

Kan nogen ud fra sine erfaringer forklare mig hvordan man får et script køre
hurtigere??...

Dette spørgsmål kan se ud som meget opfattende eller endda dumt, men jeg har
været igennem en del PERL programmering. Jeg ved ikke hvordan man OOP'er i
PERL. Mine scripts er nærmere sagt "spaghetti code". Jeg har arbejdet på et
bestemt script som nu er på ca 200 sider. Jeg har flere filer som kaldes
fra en hoved script. Jeg har længe spekuleret på om det var klogest at have
alle mine filer samlet på en stort fil eller dele min stort fil ud til flere
små filer. Kan man f.eks. risikere længere tid for at åbne og læse flere
filer? Er det derfor bedre at have en stort fil end at have flere små filer
for at mindske debug-tid??

I mit hoved script kalder jeg de andre små filer vha "require" i begyndelsen
a scriptet. Kan man på en aller anden måde få hovedskriptet til at inkludere
en af del filerne KUN når den skal bruges? Jeg mener f.eks:

if (funktion){ #hvis funktionen skal bruges
require "funktion_filen.cgi"; #hent først filen
nu_kør_funktionen; #derefter kør funktionen
}

Hvis man gør det kan man undlade at inkluderer filen hvergang men kører
hoved scriptet og dermed debugge ikke hele 200 sider men måske kun 10
sider??

Er der nogle smarte tips mht variabler, arrays, hashs osv?? Jeg mener hvis
scriptet er sort så er der jo mange variabler og dermed stor memory use.

Jeg ville virkeligt være taknemmeligt hvis nogen ud fra sine erfaringer
kunne give mig nogle go'e tips.. tak på forhånd.




 
 
Peter Makholm (12-06-2001)
Kommentar
Fra : Peter Makholm


Dato : 12-06-01 07:41

"John Doe" <fatih@forum.dk> writes:

> Kan nogen ud fra sine erfaringer forklare mig hvordan man får et script køre
> hurtigere??...

Hvis hastighed er et væsentligt krav, så skal du overveje at skrive
dit program i et oversat sprog som C. Det er desuden min erfaring at
det er meget lettere ikke at komme til at bruge underlige tidskrævende
funktioner, når man bruger C.

Desuden, hvad er det så du vil have til at køre hurtigere? ER det
opstarten eller er det selve udførelsen af scriptet? Uanset hvilket
sprog man bruger er det spild af tid at optimerer inden man ved hvor i
koden, der bruges meget tid.

> været igennem en del PERL programmering. Jeg ved ikke hvordan man OOP'er i
> PERL. Mine scripts er nærmere sagt "spaghetti code". Jeg har arbejdet på et

OOP er heller ikke specielt hurtigt, men det kan måske bruges som et
redskab til at tvinge dig væk fra pastakode. Rodet kode forøger
sandsynligheden for at man laver nogle konstruktioner, som tager
unødvendig lang tid.

Hvis man virkelig vil have fart og datainkapsling i Perl, så skal man
bruge closures. Det er bare ikke helt så let at skrive og gennemskue.


> filer? Er det derfor bedre at have en stort fil end at have flere små filer
> for at mindske debug-tid??

For at minske debugtiden er det vigtigt at have en fornuftig
modlarisering, så man let kan finde det kode, der er tvivl om. Men
ofte er ønsket om kode der let kan fejlrettes og hurtig udførelsestid
modstridende.

> Er der nogle smarte tips mht variabler, arrays, hashs osv?? Jeg mener hvis
> scriptet er sort så er der jo mange variabler og dermed stor memory use.

Det kommer meget an på dine datastrukturer. Prøv at læs de første par
kapitler i "Advanced Perl Programming", der er en god sjat om at vælge
nogle optimale datastrukturer.

Men et godt råd med hensyn til globale variable: Lav så få som
overhovedet muligt. GLobale variable skaber nogle ofte svært
gennemskuelige afhængigheder ned gennem koden, hvilket gør det svært
at finde ud af hvorfor koden bliver udført som den gør.

Et debug-flag og nogle næsten-konstante konfigurationsparametre, mener
jeg at det maksimale, når man laver større programmer.

--
hash-bang-slash-bin-slash-bash

Thorbjørn Ravn Ander~ (12-06-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 12-06-01 08:17

John Doe wrote:
>
> Kan nogen ud fra sine erfaringer forklare mig hvordan man får et script køre
> hurtigere??...

Det afhænger helt af hvad det er der sløver dit program:

ud fra det du beskriver lyder det som om du har et enkelt stort
cgi_program som er for langsomt om at starte fordi det er for stort:
standard tricket til at fikse dèt er at putte en perl_fortolker ind i
webserveren som kun genoversætter programmet når det er blevet ændret;
og ellers hele tiden har en oversat version klar til at blive afviklet:

det er meget nemt med mod_perl og apache selvom det kan være lidt svært
at få i luften:

er det den webserver du bruger? har du mulighed for at pille ved
opsætningen:

hvis dette ikke er muligheden så overvej at split dit nuværende program
op i underprogrammer som ikke har noget med hinanden at gøre; og så kald
disse hver for sig:

> Dette spørgsmål kan se ud som meget opfattende eller endda dumt, men jeg har
> været igennem en del PERL programmering. Jeg ved ikke hvordan man OOP'er i
> PERL. Mine scripts er nærmere sagt "spaghetti code". Jeg har arbejdet på et
> bestemt script som nu er på ca 200 sider. Jeg har flere filer som kaldes
> fra en hoved script. Jeg har længe spekuleret på om det var klogest at have
> alle mine filer samlet på en stort fil eller dele min stort fil ud til flere
> små filer. Kan man f.eks. risikere længere tid for at åbne og læse flere
> filer? Er det derfor bedre at have en stort fil end at have flere små filer
> for at mindske debug-tid??

det har kun betydning på oversættelsestidspunktet: hvis dit program
_kører_ hurtigt nok som sådan; er dette ikke stedet du skal kigge:

der findes et profilerflag til perl som tillader dig at finde ud af hvor
dit program bruger cpu_tid: hvis det er dèt der er galt; er det vejen
frem:


> Er der nogle smarte tips mht variabler, arrays, hashs osv?? Jeg mener hvis
> scriptet er sort så er der jo mange variabler og dermed stor memory use.
>
ikke nødvendigvis: min erfaring er at selv store programmer ikke fylder
særligt meget ihukommelsen: det der trækker tænder ud er hvis man hiver
hele filer ind i arrays og den slags ting:

herudover kan det let være at det er tiden til at skrive programmet om:
programmer der er vildtvoksende og knopskydende kan godt trænge til at
få ryddet op når man har fundet ud af hvad det _egentligt_ skal kunne:

[beklager tegnsætningen; mit tastatur har det ikke for godt]
--
Thorbjørn Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

Peter Makholm (12-06-2001)
Kommentar
Fra : Peter Makholm


Dato : 12-06-01 08:18

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> [beklager tegnsætningen; mit tastatur har det ikke for godt]

Punctuation, is? fun!

--
hash-bang-slash-bin-slash-bash

Thorbjørn Ravn Ander~ (12-06-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 12-06-01 11:20

Peter Makholm wrote:

> > [beklager tegnsætningen; mit tastatur har det ikke for godt]
>
> Punctuation, is? fun!

Har imellemtiden dissekeret dyret. En manglende tap i
keyboardconnectoren betyder formentlig at Shift-tasten har været
nedtrykket konstant. Forklarer en del. Bah.

Vil nu slå på noget uskyldig perlkode for at afreagere.
--
Thorbjørn Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

John Doe (12-06-2001)
Kommentar
Fra : John Doe


Dato : 12-06-01 12:30

Tak for jeres hurtige svare.

I siger noget om perlflags. Hvordan sætter man sådanne nogle flags? Hvos i
programmet? Under test kørsel har jeg altid nogle selv lavet flags. De viser
bare nederst på skærmen hvad forskellige variablers værdier. Så ved jeg om
variablerne sættes rigtig...

Jeg har en windows 2000 maskine her hjemme. Jeg har installeret apache
(undlad IIS ) og perl. Jeg bruger maskinen ikke som server, for jeg har
ikke en statisk IP adresse. Derfor bruger jeg hypermart.net til køre mine
scripts.. Jeg programmerer og tester mine programmer i min pc. Jeg kan ikke
se hvor programmet er langsomt. Jeg mener om det er under opstarten eller
under kørslen. Jeg prøvede at optimere mit nuværende program. Jeg lavede det
mere struktureret, og undlad at bruge globale variabler så meget som muligt,
foretræk lokale variabler. Men så fandt jeg ud af at mit program kørte
langsommere.

Thorbjørn siger at man kan få perl til at køre programmet kun hvis der er
ændringer. kan man virkeligt gøre det? For jeg troede i begyndelsen at man
kompilerede programmet 1 gang, så kørte det. Det er nok fordi jeg har et C
baggrund. men hurtigt fandt jeg ud af at man ikke kunne bruge værdierne
af variablerne fra forrige kørsel..

Hvordan kan man checke i hvilken del programmet køre langsomt? Jeg har ikke
en stor fil, men flere små filer for at få bedre overblik over tingene. Jeg
har f.eks. samlet alle mine subrutiner under en fil, og der er mange. I mit
program samler jeg inputs fra brugeren, gemmer det i en html fil, behandler
den, og henter den derefter og viser på brugerens skærm. html filen er ikke
stor som kan kan give problem med en variabel....

Jeg ved godt at det er svært at svare på så omfattende spørgsmål. men jeg
kan bare ikke give nogle konkrete eksempler, for ellers blive jeg nød til
skrive hele mit program på over 200 sider.. Man lærer af sine
erfaringer, og I har sikkert haft lignende problemer som jeg har nu.
Bare der fandtes en god bog om go'e råd om perl programmering.




Thorbjørn Ravn Ander~ (12-06-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 12-06-01 15:23

John Doe wrote:

> Jeg har en windows 2000 maskine her hjemme. Jeg har installeret apache
> (undlad IIS ) og perl. Jeg bruger maskinen ikke som server, for jeg har

Du skal bruge en Apache med mod_perl modulet installeret. Jeg aner ikke
om det findes til NT, men det gør det sikkert. Se dig grundigt omkring.

> Thorbjørn siger at man kan få perl til at køre programmet kun hvis der er
> ændringer. kan man virkeligt gøre det? For jeg troede i begyndelsen at man
> kompilerede programmet 1 gang, så kørte det. Det er nok fordi jeg har et C
> baggrund. men hurtigt fandt jeg ud af at man ikke kunne bruge værdierne
> af variablerne fra forrige kørsel..

Perl er en fortolker. Scriptet oversættes til internt format ved hver
eneste start, og glemmes herefter. mod_perl bevarer det interne format
fra kald til kald, så oversættelsestrinet spares.

> Bare der fandtes en god bog om go'e råd om perl programmering.

Du kunne eventuelt starte med at læse lidt på

   http://www.perl.com/pub/v/faqs

specielt CGI-delen burde gøre dig klogere.
--
Thorbjørn Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

Ask Bjoern Hansen (19-06-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 19-06-01 07:03

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> Perl er en fortolker. Scriptet oversættes til internt format [...]

"bytecode compiler med en virtuel maskine" ville vaere mere korrekt
end "fortolker".

> > Bare der fandtes en god bog om go'e råd om perl programmering.

http://learn.perl.org/ har en del bog referencer.


--
ask bjoern hansen, http://ask.netcetera.dk/ !try; do();

Thorbjørn Ravn Ander~ (19-06-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 19-06-01 10:33

Ask Bjoern Hansen wrote:

> > Perl er en fortolker. Scriptet oversættes til internt format [...]
>
> "bytecode compiler med en virtuel maskine" ville vaere mere korrekt
> end "fortolker".

Glimrende. Har du også et bud på en mere folkelig version?

--
Thorbjørn Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~thunderbear

Ask Bjoern Hansen (24-06-2001)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 24-06-01 03:35

Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:

> > > Perl er en fortolker. Scriptet oversættes til internt format [...]
> >
> > "bytecode compiler med en virtuel maskine" ville vaere mere korrekt
> > end "fortolker".
>
> Glimrende. Har du også et bud på en mere folkelig version?

"Java, bare smartere.".

Uh, maaske ikke.




- ask

--
ask bjoern hansen, http://ask.netcetera.dk/ !try; do();

Peter Makholm (19-06-2001)
Kommentar
Fra : Peter Makholm


Dato : 19-06-01 10:34

Ask Bjoern Hansen <ask@netcetera.dk> writes:

> "bytecode compiler med en virtuel maskine" ville vaere mere korrekt
> end "fortolker".

Sådan virke de fleste modernede sprog, der omtales som fortolkere.

--
hash-bang-slash-bin-slash-bash

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste