Ernie Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Det spørs jo. Jeg har aldri testet det ut i praksis, men echo/print skal visstnok utgjør litt hvis det er mange av de uten at man bruker output buffer. Grunnen til det er at det å skrive til webserver tar tid. Dog, det har jo i og for seg ingenting med hvorvidt mange "<?php ?>" er et problem. Sannsynligvis er det vel marginalt, iallfall i forhold til echo/print uten buffer, men nå ble jeg såpass nygjerrig at jeg må teste det ut litt Lenke til kommentar
loathsome Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Flott, regner selvsagt med du poster resultatet her Har enda et spørsmål - hvordan er det når det kommer til såkalte «short tags»? Er det dumt å bruke? Vet selvsagt det om portabilitet, men jeg har bare støtt på en eneste server som ikke støttet dette, og da gjorde en htaccess-fil susen. Enkelt og greit. Når jeg skriver kode som skal redistribueres bruker jeg selvsagt "the long way" Lenke til kommentar
Ernie Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 (endret) Jeg sjokkerer vel ingen hvis jeg sier at forskjellen er knapt målbar? Altså, på 100.000 linjer med "<?php $var = 1; ?>" bruker den ca260ms kontra ca200ms for "$var = 1;". Dvs. 0.6 µs pr. '<?php ?>'-par. Når jeg prøvde med «short tags» ble det derimot litt mer forskjell. Da var det plutselig 530ms, altså 3.3µs pr. '<? ?>'-par. Dog, ingen av delen er av særlig betydningsfull forskjell. Du skal ha ganske mange av de før de utgjør noen forskjell. Jeg ville vært mer bekymret for størrelsen på scriptet for å si det slik Bare for å ha sagt det først som sist: Det er ingen perfekt test og det er fult mulig det finnes bedre metoder for å teste det ut, men jeg mener det illustrerer det faktum at forskjellen er særdeles liten. Det er også viktig å ikke se seg blind på at de totale forskjellene er store. Scriptene gjør aldeles ingenting, og måler essensielt hvor mye tid det tar å hente inn en 100.000 linjer lang fil og sette $var til 1 100.000 ganger. Størsteparten av tiden vil gå med på å faktisk hente inn og tolke den 100.000 linjer lange filen. Kode for generering av test-filene: <?php $data = ''; for ($i=0; $i<100000; $i++) $data .= '<?php $var = 1; ?>'."\n"; file_put_contents('lot.php', $data); for ($i=0; $i<100000; $i++) $data .= '<? $var = 1; ?>'."\n"; file_put_contents('shortLot.php', $data); $data = '<?php'."\n"; for ($i=0; $i<100000; $i++) $data .= '$var = 1;'."\n"; file_put_contents('few.php', $data.'?>'); ?> Test med et sett '<?php ?>' <?php for ($i = 0; $i < 5; $i++) { $start = microtime(true); include('few.php'); $end = microtime(true); echo ($end-$start)."\n"; } ?> Test med mange (<?php): <?php for ($i = 0; $i < 5; $i++) { $start = microtime(true); include('lot.php'); $end = microtime(true); echo ($end-$start)."\n"; } ?> Test med mange (<?): <?php for ($i = 0; $i < 5; $i++) { $start = microtime(true); include('shortLot.php'); $end = microtime(true); echo ($end-$start)."\n"; } ?> Endret 15. juni 2008 av Ernie Lenke til kommentar
loathsome Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Konge, Ernie! Veldig interessant faktisk, og besvarte overlegent det jeg lurte på! Lenke til kommentar
qualbeen Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Ønsker man å oppnå rask og effektiv kode er det helt feil å begynne med antall "<?php ?>", echo vs print eller om man skal bruke enkle vs doble hermetegn. Ingen av disse parametrene har innvirkning på effektiviteten - som Ernie poengterer: ytelseøkning på 60 millisekund ved 100 000 linjer er neglisjerbart. Let heller etter antall løkker, da spesielt looper som kjører inni hverandre. Hvordan sorteres og hente ut data? Hva med å benytte en form for caching på enkelte deler av sciptet? Mye lurt som kan gjøres, først skritt blir å kartlegge hvilket deler av koden som tar lang tid Lenke til kommentar
jorgis Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Ønsker man å oppnå rask og effektiv kode er det helt feil å begynne med antall "<?php ?>", echo vs print eller om man skal bruke enkle vs doble hermetegn. Ingen av disse parametrene har innvirkning på effektiviteten - som Ernie poengterer: ytelseøkning på 60 millisekund ved 100 000 linjer er neglisjerbart. Helt enig. Størsteparten av tidsbruken i treigere script stammer heller fra antall og størrelse på SQL-spørringer, hvor mye fil-I/O som utføres og hvor mange includes du har. Godt gjennomtenkt bruk av SQL, gjerne med caching av resultatsett, ikke flere includes enn nødvendig, og minst mulig stor fil-I/O (større enn PHPs filcache) kan gjøre underverker for kjøretid, og det er ikke umulig å oppnå kjøretid på > 5ms på relativt omfattende programsystem. Lenke til kommentar
Ernie Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Jepp, og bruker man en PHP accelerator kan man jo virkelig forbedre ytelsen drastisk. Etter sigende opptil 10x bedre ytelse. Lenke til kommentar
jorgis Skrevet 15. juni 2008 Del Skrevet 15. juni 2008 Stemmer, men da snakker en om endringer en ikke kan gjennomføre om en skal f.eks. videredistribuere applikasjonene. Personlig har jeg ikke tatt meg tid til å sette det opp på lokal testserver fordi jeg vil "simulere" hvordan det kjører i worst-case. Lenke til kommentar
endrebjo Skrevet 16. juni 2008 Del Skrevet 16. juni 2008 Cacher PHP en kompilert utgave av skriptene automatisk, eller er det noe brukeren må gjøre selv? Jeg kan tenke meg det er litt å hente der hvis PHP kompilerer skriptet hver gang. Lenke til kommentar
Ernie Skrevet 16. juni 2008 Del Skrevet 16. juni 2008 (endret) Stemmer, men da snakker en om endringer en ikke kan gjennomføre om en skal f.eks. videredistribuere applikasjonene. Personlig har jeg ikke tatt meg tid til å sette det opp på lokal testserver fordi jeg vil "simulere" hvordan det kjører i worst-case. Ja, det er jo klart, men det er jo noe brukere selv kan legge til på serveren. Hvis de kontrollerer den vel å merke. Cacher PHP en kompilert utgave av skriptene automatisk, eller er det noe brukeren må gjøre selv? Jeg kan tenke meg det er litt å hente der hvis PHP kompilerer skriptet hver gang. PHP «kompilerer» scriptet hver gang. Endret 16. juni 2008 av Ernie Lenke til kommentar
Ernie Skrevet 19. juni 2008 Del Skrevet 19. juni 2008 (endret) <?php interface A { public function test(); } $var = new A() { public function test() { echo 'YEY!'; } } $var->test(); ?> *savne støtte for anonyme (indre) klasser* Dvs., PHP støtter vel ikke indre klasser i det heltatt. Litt synd egnetlig, i og med at det har sine fordeler i forhold til OOP og ikke minst som «callback». Endret 19. juni 2008 av Ernie Lenke til kommentar
Vindstille Skrevet 7. juli 2008 Del Skrevet 7. juli 2008 Finnes det en måte for en metode å finne objektsnavnet den er kallt fra? Altså noe ala dette: class Class { function get_object_name() { // Print ut: osamaobjektet } } $osamaobjektet = new Class(); Lenke til kommentar
ze5400 Skrevet 7. juli 2008 Del Skrevet 7. juli 2008 Eneste jeg kan komme på i farta må være å bruke debug_backtrace() Lenke til kommentar
MC2 Skrevet 10. juli 2008 Del Skrevet 10. juli 2008 Er det noen som har eksperimentert med "kunstig" multi-threading i php? Finnes det noen skikkelig implementasjon av det? Å kjøre diverse php scripts via terminalen vha popen har litt for mange begrensnigner. Lenke til kommentar
Peter Skrevet 10. juli 2008 Del Skrevet 10. juli 2008 Du har http://no2.php.net/manual/en/function.pcntl-fork.php , men en annen måte er å kjøre http-kall til andre php-filer som utfører en liten del av prosess vha. curl e.l. Lenke til kommentar
loathsome Skrevet 10. juli 2008 Del Skrevet 10. juli 2008 Er det noen som har eksperimentert med "kunstig" multi-threading i php? Finnes det noen skikkelig implementasjon av det? Å kjøre diverse php scripts via terminalen vha popen har litt for mange begrensnigner. Hva med Ajax? Lenke til kommentar
MC2 Skrevet 11. juli 2008 Del Skrevet 11. juli 2008 Hmm, pcntl så interessant ut, men det jeg manglet var egentlig de grunnleggende tingene man kan gjøre med tråder, som venting og utveksling av data osv., altså den oppførslen som i java. Lenke til kommentar
Ernie Skrevet 11. juli 2008 Del Skrevet 11. juli 2008 Hmm, pcntl så interessant ut, men det jeg manglet var egentlig de grunnleggende tingene man kan gjøre med tråder, som venting og utveksling av data osv., altså den oppførslen som i java. Vel, PHP er ikke akkurat bygget for den type ting. Trenger man den type funksjonalitet så tror jeg Java vil være et svært mye bedre valg, men det er jo også litt avhengig av hva man skal ha utført også da såklart. Lenke til kommentar
MC2 Skrevet 16. juli 2008 Del Skrevet 16. juli 2008 Hmm, pcntl så interessant ut, men det jeg manglet var egentlig de grunnleggende tingene man kan gjøre med tråder, som venting og utveksling av data osv., altså den oppførslen som i java. Vel, PHP er ikke akkurat bygget for den type ting. Trenger man den type funksjonalitet så tror jeg Java vil være et svært mye bedre valg, men det er jo også litt avhengig av hva man skal ha utført også da såklart. Jeg vet, men det hadde vært otrolig praktisk om PHP hadde innebygd trådestøtte. Men PHP er tross alt laget for å generere HTML som sendes av gårde, så jeg skjønner hvorfor ikke multithreading var prioritert, men vi kan jo krysse fingrene for PHP7. Lenke til kommentar
jorgis Skrevet 17. juli 2008 Del Skrevet 17. juli 2008 Jeg vet, men det hadde vært otrolig praktisk om PHP hadde innebygd trådestøtte. Men PHP er tross alt laget for å generere HTML som sendes av gårde, så jeg skjønner hvorfor ikke multithreading var prioritert, men vi kan jo krysse fingrene for PHP7. Slik ting har vært innad i Zend/PHP siden PHP5, ser det ut til at PHP7 == Java med PHPCompat-lib til. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå