PHP snelheidsgericht scripten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik wil de parsetime's van mijn site kort mogenlijk maken en daarom heb ik wat vraagjes op het gebied van snelheidsgericht scripten:

1. Ik parse stukjes code met de \" quote manier omdat anders bijvoorbeeld kleurcode's gaparsed worden. Maar het kan ook met een enkele quote zoals '. Wat is sneller? \" of '.

2. Ik gebruik in mijn scripts veel if() statements. Kan dat niet op een snellere manier? Van veel IFjes wordt ie langzaam lijkt mij :-S

3. Als ik check of een variabele leeg is doe ik dat d.m.v:
<?php
if($var1==""){ blabla }else{ blabla }
?>
Kan dat niet op een snellere manier? Ik heb wel is gehoord van "isset" ofzo iets, maar wat is dat dan?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Lijkt het me handig om eerst te kijken hoelang je scripts erover doen om te parsen.

[rml]Nielsz in "[ codebase] post hier je zinnige code!"[/rml]

Daar staat een functie om de parsetime te berekenen.

[edit]
Statistieken over je script eronder zetten is altijd handig :)
Parsetime: 0.034468
MySQL query's: 2
TPL parses: 31
TPL assings: 123
TPL's loaded: 7

[ Voor 30% gewijzigd door Tux op 24-02-2003 23:18 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • Terror
  • Registratie: Juni 1999
  • Laatst online: 13:02
Je kan net als wat er met de frontpage gebeurt alle pagina's geparsed en gecached klaar hebben staan. Levert denk ik meer snelheidswinst op.

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je kan net als wat er met de frontpage gebeurt alle pagina's geparsed en gecached klaar hebben staan. Levert denk ik meer snelheidswinst op.
je bedoeld dat de hele HTML al klaar staat en dat alleen de PHP nog op de plaatjes ingevuld hoeft te worden? Ja dat snap ik ook wel maar toch moeten die IFjes toch sneller kunnen?..

Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
1. Ik parse stukjes code met de \" quote manier omdat anders bijvoorbeeld kleurcode's gaparsed worden. Maar het kan ook met een enkele quote zoals '. Wat is sneller? \" of '.
Single quotes zijn sneller als double quotes omdat alles wat hier instaat niet geparsed hoeft te worden.
2. Ik gebruik in mijn scripts veel if() statements. Kan dat niet op een snellere manier? Van veel IFjes wordt ie langzaam lijkt mij :-S
Je zou misschien gebruik kunnen maken van arrays in combinatie met switch().
3. Als ik check of een variabele leeg is doe ik dat d.m.v:
<?php
if($var1==""){ blabla }else{ blabla }
?>
Kan dat niet op een snellere manier? Ik heb wel is gehoord van "isset" ofzo iets, maar wat is dat dan?
PHP:
1
if(isset($var1)) { /* code hier */ } else { /* andere code hier */ }

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok., bedankt :-)

Acties:
  • 0 Henk 'm!

  • sirdupre
  • Registratie: Maart 2002
  • Laatst online: 27-04 09:36
ik vraag me af of dat isset sneller is.... dat is een functie aanroep, vraag me af of dat sneller gaat dan een == operator.

Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
SirDupre schreef op 24 February 2003 @ 23:26:
ik vraag me af of dat isset sneller is.... dat is een functie aanroep, vraag me af of dat sneller gaat dan een == operator.
Ik denk niet dat dat zoveel uitmaakt, maar $string == ""; vind ik lelijk, gebruik dan $string == null; ofzo.

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

  • sirdupre
  • Registratie: Maart 2002
  • Laatst online: 27-04 09:36
ik denk dat \" en ' ook niet zoveel uitmaakt... maar goed, als je je drukt wilt gaan maken om fracties van miliseconden....

Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
SirDupre schreef op 24 februari 2003 @ 23:42:
ik denk dat \" en ' ook niet zoveel uitmaakt... maar goed, als je je drukt wilt gaan maken om fracties van miliseconden....
Het maakt ook niet zoveel uit, maar het is wel degelijk sneller. In dit topic staan trouwens een heleboel tips, en ook een paar benchmarks.

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je wilt optimaliseren zul je uit moeten zoeken welk deel van je code het langst duurt, ga niet naar van die prutsdingetjes zitten zoeken terwijl het leeuwendeel van je tijd ergens anders zit :)

Als een routine 1.00 seconde duurt en de rest van de pagina 0.01 seconden in totaal, dan boeit het weinig dat je die executie tijd naar 0.005 weet te krijgen, je zult die routine aan moeten pakken. Het is dan tenslotte een speedup van 1.01 naar 1.005 (een half procentje winst).

Acties:
  • 0 Henk 'm!

Verwijderd

om te checken of een string bestaat gebruik isset..

if (isset($string)) {
// true
}

else {
// false
}

of

if (!isset($string)) {
// false
}

else {
// true
}

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Die check zou ik niet zo zeer uit snelheidsoogpunt doen, hoewel het eventueel afwezig zijn natuurlijk een beetje performance kost lijkt het me verstandig al die checks uit het oogpunt van correct en veilig programmeren te doen.

Dus zorg er dan gelijk voor dat de controle eventueel meer doet dan enkel kijken of iets bestaat.
Als iemand een telefoonnummer opgeeft dat alleen uit getallen mag bestaan doe je zoiets:
PHP:
1
2
3
4
5
6
7
8
if(isset($_POST['telefoonnummer']) && preg_match('/^[0-9]$/', $_POST['telefoonnummer']))
{
// goed
}
else
{
// fout
}

maar dat is uiteraard wel "langzamer"...

[ Voor 5% gewijzigd door ACM op 25-02-2003 09:54 ]


Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Tum|mut schreef op 24 February 2003 @ 23:20:
Je zou misschien gebruik kunnen maken van arrays in combinatie met switch().

Intern ( in Java iig, en aangezien PHP eerste licht voorgecompileerd wordt waarsch. ook) wordt een switch omgezet naar if, elseif else statements. Een switch is dus puur suiker eigenlijk :)
SirDupre schreef op 24 February 2003 @ 23:26:
ik vraag me af of dat isset sneller is.... dat is een functie aanroep, vraag me af of dat sneller gaat dan een == operator.
Functiecalls zijn niet zo duur hoor, maar ze kosten wel wat ( nl. een lookup in de functietabel )
Tum|mut schreef op 24 February 2003 @ 23:28:
Ik denk niet dat dat zoveel uitmaakt, maar $string == ""; vind ik lelijk, gebruik dan $string == null; ofzo.
Dan check je toch niet hetzelfde :)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 15:29

MBV

Ik heb op school (weet het, vies woord) geleerd dat je dat soort optimalisaties nooit moet doen, omdat het veel te weinig uitmaakt t.o.v. de tijd die het kost. Je kan veel beter zoeken naar een sneller algoritme. Dat maakt veel meer uit.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
SirDupre schreef op 24 February 2003 @ 23:26:
ik vraag me af of dat isset sneller is.... dat is een functie aanroep, vraag me af of dat sneller gaat dan een == operator.
Hangt er vanaf, wanneer je je variabelen geinitialiseerd hebt dan moet je natuurlijk geen isset gebruiken maar wanneer je niet variabelen niet geinitialiseerd zijn dan is isset veel sneller dan de controle van een niet geinitialiseerde var op "".

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Verwijderd schreef op 24 February 2003 @ 23:14:
Hallo, ik wil de parsetime's van mijn site kort mogenlijk maken en daarom heb ik wat vraagjes op het gebied van snelheidsgericht scripten:

1. Ik parse stukjes code met de \" quote manier omdat anders bijvoorbeeld kleurcode's gaparsed worden. Maar het kan ook met een enkele quote zoals '. Wat is sneller? \" of '.

2. Ik gebruik in mijn scripts veel if() statements. Kan dat niet op een snellere manier? Van veel IFjes wordt ie langzaam lijkt mij :-S

3. Als ik check of een variabele leeg is doe ik dat d.m.v:
<?php
if($var1==""){ blabla }else{ blabla }
?>
Kan dat niet op een snellere manier? Ik heb wel is gehoord van "isset" ofzo iets, maar wat is dat dan?

Alvast bedankt!
1: Ja ' is sneller
2: hangt er vanaf hoelang jouw if statements zijn.
wanneer je gebruikt maakt van zo'n if elseif elseif .... structuur dan moet je die
vervangen door een switch statement aangezien een switch statement de
controleren expressie maar 1 x controleerd en in een worst case geval met n if /
elseif-jes er n expressies gecontroleerd moeten worden.
3: altijd geinitialiseerde vars gebruiken en wanneer je niet zeker weet of ze
geinitialiseerd zijn dan gebruik je isset.

Verder zou ik error reporting op E_ALL zetten en display errors to screen zodat je gelijk de zwakker plekken op je scherm krijgt te zien.

Nog een tip voor loops:
gebruik:
PHP:
1
2
3
for ($i=0,$cnt<count($somearray);$i<$cnt;++$i) {
   // do something
}

in dit geval wordt de tijdintensieve count($somearray) maar 1x uitgevoerd inplaats van in elke loop-cycle.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op 25 February 2003 @ 10:02:
Ik heb op school (weet het, vies woord) geleerd dat je dat soort optimalisaties nooit moet doen, omdat het veel te weinig uitmaakt t.o.v. de tijd die het kost. Je kan veel beter zoeken naar een sneller algoritme. Dat maakt veel meer uit.


dan heeft jouw school (wat imho helemaal geen vies woord is) het bij het goede eind

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Tom-Eric
  • Registratie: Oktober 2001
  • Laatst online: 25-03 09:11
[...]
Dan check je toch niet hetzelfde :)
Je hebt gelijk, maar als je de == operator wil gebruiken om te kijken of een string leeg is, dan heeft het toch hetzelfde resultaat?

i76 | Webdesignersgids | Online Gitaarlessen & Muziekwinkels


Acties:
  • 0 Henk 'm!

Verwijderd

hey

bij if kun je gewoon { en } weglaten.. gaat het nog sneller :P

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Verwijderd schreef op 25 February 2003 @ 12:07:
hey

bij if kun je gewoon { en } weglaten.. gaat het nog sneller :P
Daar ben ik wel eens mee aan het benchmarken geweest en ik heb geen verschil kunnen waarnemen.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 25 February 2003 @ 12:07:
hey

bij if kun je gewoon { en } weglaten.. gaat het nog sneller :P

In theorie zou het zelfs ietsje slomer gaan...

Er kan namelijk minder goed bepaalt worden waar de if eindigt.
Anderzijds zou het sneller kunnen zijn, want als er geen { onder staat weet je dat het alleen de volgende regel is die binnen de if valt, soms zijn alleen die volgende regels zo lang dat dat weer niet altijd geldt...

In de praktijk zal het echter vrijwel evensnel zijn, de hoeveelheid minder code zal iig nooit er tegen opwegen als daardoor je code minder duidelijk wordt.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Tum|mut schreef op 24 februari 2003 @ 23:28:
[...]

Ik denk niet dat dat zoveel uitmaakt, maar $string == ""; vind ik lelijk, gebruik dan $string == null; ofzo.
zie: http://www.blueshoes.org/...bcCn=Mozilla&bcCp=1&bcCt=


checken voor $string == '' is zowiezo onzin, doe dan:
if (!$string) { .....

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Mierenneuken over het verschil in micro seconden tussen if'jes en switches kunnen we allemaal, maar andere factoren spelen een veel belangrijke rol.

1. Hoe snel zijn je queries. Beperk het aantal queries die je in een script gebruikt zoveel mogelijk .
2. Als je een loop vaak uitvoert, probeer dan zo min mogelijk processor/hd intensieve code in de loop uit te voeren, maar indien mogelijk buiten de loop.
3. Grote PHP files includen schijnt ook nogal vertragend te werken. Deel je functies op in meerdere include files en probeer alleen functies te includen die je script ook daadwerkelijk gebruikt.

[ Voor 1% gewijzigd door pjonk op 25-02-2003 12:19 . Reden: typo's ]

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
JonkieXL schreef op 25 February 2003 @ 12:16:
Mierenneuken of het verschil in micro seconden tussen if'jes en switches kunnen we allemaal, maar andere factoren spelen een veel belangrijke rol.

1. Hoe snel zijn je queries. Beperk het aantal queries die je in een script gebruikt zoveel mogelijk .
2. Als je een loop vaak uitvoert, probeer dan zo min mogelijk processor/hd intensieve code in de loop uit te voeren, maar indien mogelijk buiten de loop.
3. Grote PHP files includen schijnt ook nogal vertragend te werken. Deel je functies op in meerdere include files en probeer alleen functies te includen die je script ook daadwerkelijk gebruikt.
Ja, misschien wel mierenneuken maar toch is het goed dat een php developer weet wat snellere code is.

En het spreek voor zich dat je de tijdsintensieve onderdelen moet aanpakken zoals queries.

ten aanzien van 3, helemaal mee eens :-)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

stekkel schreef op 25 February 2003 @ 12:21:
Ja, misschien wel mierenneuken maar toch is het goed dat een php developer weet wat snellere code is.

Ik denk dat het vooral nuttig is om te weten welke code iemand moet mijden. Maar dat zijn vooral de algemenere regeltjes waar je rekening mee moet houden, die gelden voor alle programmeertalen/programma's en niet alleen voor php.

Om nou al die "onzin" te gaan lopen uithalen omdat iets een microseconde sneller wordt? Zorg er voor dat je programma correct en veilig is, daarnaast goed te gebruiken en daaronder valt zeker "snel genoeg". Maar laat die optimalisaties maar weg totdat het echt nodig is.

Uiteraard kan je wel alvast tijdens het programmeren rekening houden met bepaalde zaken.
Maar een mooie quote (vrij vertaald) uit een compiler boek: "Het is makkelijker om een correct programma snel te maken dan een snel programma correct".

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
ACM schreef op 25 February 2003 @ 12:31:

[...]

Ik denk dat het vooral nuttig is om te weten welke code iemand moet mijden. Maar dat zijn vooral de algemenere regeltjes waar je rekening mee moet houden, die gelden voor alle programmeertalen/programma's en niet alleen voor php.
Dat is nu net het probleem met beginnende php programmeurs, die kennen geen algemene regeltjes en die leren dingen vaak fout aan. (ben ook een beginner geweest :) )
Om nou al die "onzin" te gaan lopen uithalen omdat iets een microseconde sneller wordt? Zorg er voor dat je programma correct en veilig is, daarnaast goed te gebruiken en daaronder valt zeker "snel genoeg". Maar laat die optimalisaties maar weg totdat het echt nodig is.
Ja en nee, denken vanuit een optimaal gedrag kan je ook dwingen om betere algoritmes te schrijven. Onnodige stappen dienen weggehaald te worden met als resultaat dat de code zelfs inzichtelijker wordt.
Maar misschien ben ik een beetje gebiased omdat ik de meeste algoritmes zelf bedenk en al teveel slechte code heb gezien waar maar een oplossing voor was, herschrijven vanaf de basis :)
Uiteraard kan je wel alvast tijdens het programmeren rekening houden met bepaalde zaken.
Maar een mooie quote (vrij vertaald) uit een compiler boek: "Het is makkelijker om een correct programma snel te maken dan een snel programma correct".
Herkenbaar :)

[ Voor 4% gewijzigd door stekkel op 25-02-2003 12:46 ]

Pagina: 1