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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Class eller simpel include?
Fra : DADK


Dato : 19-12-08 22:32

Hej,

Det er sådan set ikke et kæmpeproblem, men noget jeg er i tvivl om, som jeg
ikke selv kan finde en ultimativ, falsificerbar løsning på. Eller for den
sags skyld finde (gode) svar på, på nettet.

Hvis jeg nu har en include-fil, f.eks

<?
echo "dette er en test";
?>

er det så langsommere eller hurtigere, end

<?
class test {

function test() {
echo "dette er en test";
}
}

?>

det logiske svar vil jo være, at class-løsningen er langsomst, eftersom det
generer flere kald til php-fortolkeren, men mine test viser faktisk enten
det modsatte, eller at det er ét fedt.

Så hvad er efter jeres mening, eller ift jeres ekspert-vurdering mest
rigtig?




 
 
Anders Wegge Keller (19-12-2008)
Kommentar
Fra : Anders Wegge Keller


Dato : 19-12-08 23:03

"DADK" <dadk@webspeed.dk> writes:

> SÃ¥ hvad er efter jeres mening, eller ift jeres ekspert-vurdering
> mest rigtig?

At du skal bruge class, eventuelt med autoload, hvis din kode bliver
mere overskuelig af det, og ellers undlade at spekulere over den slags
mikrooptimeringer.

Mig bekendt er den i familie med diskussionen om hvorvidt man skal
bruge $var = 'flabberlaffer'; eller $var = "flabberlaffer";


--
/Wegge

Bertel Lund Hansen (20-12-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-12-08 01:08

DADK skrev:

> Så hvad er efter jeres mening, eller ift jeres ekspert-vurdering mest
> rigtig?

Det er mest rigtigt ikke at spilde tiden med petitesser, men
vælge det design der passer til opgaven og som giver letlæselig
og overskuelig kode.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

DADK (20-12-2008)
Kommentar
Fra : DADK


Dato : 20-12-08 03:40

Bertel Lund Hansen wrote:
> DADK skrev:
>
>> Så hvad er efter jeres mening, eller ift jeres ekspert-vurdering mest
>> rigtig?
>
> Det er mest rigtigt ikke at spilde tiden med petitesser, men
> vælge det design der passer til opgaven og som giver letlæselig
> og overskuelig kode.

Svar til både dg og Anders Wegge Keller - i svarer jo det samme.

Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil jeg godt
vide det alligevel!!! Jeg har lavet nogle test der viser, at klasser faktisk
er hurtigere end "konventionel" kode, og det undrer mig lidt, og det er
derfor jeg spørger.



Johan Holst Nielsen (20-12-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 20-12-08 08:04

DADK wrote:
> Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil jeg godt
> vide det alligevel!!! Jeg har lavet nogle test der viser, at klasser faktisk
> er hurtigere end "konventionel" kode, og det undrer mig lidt, og det er
> derfor jeg spørger.

Tjah... det *bør* det ikke være i dit eksempel.

Hvorledes har du testet? Har du eksemplerne på hvorledes du testede?

I dit eksempel echo'er du jo ikke "dette er en test ud" - i så fald skal
du skrive noget alaa new test; nederst.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

DADK (24-12-2008)
Kommentar
Fra : DADK


Dato : 24-12-08 09:22

Johan Holst Nielsen wrote:
> DADK wrote:
>> Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil
>> jeg godt vide det alligevel!!! Jeg har lavet nogle test der viser,
>> at klasser faktisk er hurtigere end "konventionel" kode, og det
>> undrer mig lidt, og det er derfor jeg spørger.
>
> Tjah... det *bør* det ikke være i dit eksempel.
>
> Hvorledes har du testet? Har du eksemplerne på hvorledes du testede?

Meget simpelt :

>>>>> test-"programmet", index.php

<?

function getTime() {
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
return $time;
}

function executionTime($start, $stop) {
$time = round(($stop - $start), 4);
echo '<p>Page generated in '.$time.' seconds.</p>'."\n";
}

// include-test
$start=getTime();
include('include.php');
executionTime($start, getTime());

// class-test
$start=getTime();
include('class.php');
$class=new includeClass();

executionTime($start, getTime());
?>

>>>>> include-filen, include.php

<?

for ($count=0;$count<=100;$count++) {
echo "< indsæt en voldsom masse crap, tag det f.eks fra
http://ccat.sas.upenn.edu/jod/latinconf/8.html >";
}
?>


>>>>> class-filen, class.php

<?

class includeClass {

function includeClass() {
for ($count=0;$count<=100;$count++) {
echo "< indsæt en voldsom masse crap, tag det f.eks fra
http://ccat.sas.upenn.edu/jod/latinconf/8.html >";
}
}
}
?>

<<<<<<<<<<<>>>>>>>>>>>

Og så kommer det pudsige : class-udførslen er altid hurtigere end
include-udførslen!! Også selvom der i begge tilfælde includes en fil, der
gør det samme - så går det faktisk hurtigere, såsnart det sættes ind i en
klasse. Jeg har haft mistanke om det længe, og derfor i stigende grad undret
mig.

Jeg oplevede det samme tilbage i 1991 eller så, da Turbopascal 5.5 kom, med
"Object Pascal" for allerførste gang. Selvom koden blev længere, flere ting
skulle instantieres, der kom flere funktioner/procedurer osv, så fungerede
identisk kode afviklet fra en klasse hurtigere end "konventionel" kode.



Stig Johansen (24-12-2008)
Kommentar
Fra : Stig Johansen


Dato : 24-12-08 10:43

DADK wrote:

> Jeg oplevede det samme tilbage i 1991 eller så, da Turbopascal 5.5 kom,
> med "Object Pascal" for allerførste gang. Selvom koden blev længere, flere
> ting skulle instantieres, der kom flere funktioner/procedurer osv, så
> fungerede identisk kode afviklet fra en klasse hurtigere end
> "konventionel" kode.

Du kan ikke sammenligne scriptsprog med kompileret kode.

--
Med venlig hilsen
Stig Johansen

DADK (24-12-2008)
Kommentar
Fra : DADK


Dato : 24-12-08 11:34

Stig Johansen wrote:
> DADK wrote:
>
>> Jeg oplevede det samme tilbage i 1991 eller så, da Turbopascal 5.5
>> kom, med "Object Pascal" for allerførste gang. Selvom koden blev
>> længere, flere ting skulle instantieres, der kom flere
>> funktioner/procedurer osv, så fungerede identisk kode afviklet fra
>> en klasse hurtigere end "konventionel" kode.
>
> Du kan ikke sammenligne scriptsprog med kompileret kode.

Nej, det er jeg klar over - PHP's klasser har jo heller intet med rigtig OOP
at gøre, men jeg oplever alligevel en spøjs performanceforskel, som minder
om dengang.



Stig Johansen (25-12-2008)
Kommentar
Fra : Stig Johansen


Dato : 25-12-08 06:28

DADK wrote:

> Nej, det er jeg klar over - PHP's klasser har jo heller intet med rigtig
> OOP at gøre, men jeg oplever alligevel en spøjs performanceforskel, som
> minder om dengang.

Man skal nok kender PHP interne interpreter struktur, et gæt kunne være:
ASP f.eks. har noget internt cache af 'precompiled' ting, som gør
performance bedre.

Det er vel ikke umuligt, at PHP måske har en cache af precompiled klasser,
så den ikke behøver at parse hver gang.

--
Med venlig hilsen
Stig Johansen

DADK (26-12-2008)
Kommentar
Fra : DADK


Dato : 26-12-08 19:06

Stig Johansen wrote:
> DADK wrote:
>
>> Nej, det er jeg klar over - PHP's klasser har jo heller intet med
>> rigtig OOP at gøre, men jeg oplever alligevel en spøjs
>> performanceforskel, som minder om dengang.
>
> Man skal nok kender PHP interne interpreter struktur, et gæt kunne
> være: ASP f.eks. har noget internt cache af 'precompiled' ting, som
> gør performance bedre.
>
> Det er vel ikke umuligt, at PHP måske har en cache af precompiled
> klasser, så den ikke behøver at parse hver gang.

Lige netop!



Mads Lie Jensen (20-12-2008)
Kommentar
Fra : Mads Lie Jensen


Dato : 20-12-08 08:28

On Sat, 20 Dec 2008 03:40:06 +0100, "DADK" <dadk@webspeed.dk> wrote:

>Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil jeg godt
>vide det alligevel!!! Jeg har lavet nogle test der viser, at klasser faktisk
>er hurtigere end "konventionel" kode, og det undrer mig lidt, og det er
>derfor jeg spørger.

Jeg vil tro at det er ret tungt at bruge include 'fil.php', så hvis du
tester i et setup hvor du enten kører flere include '' af den samme fil,
og sammenligner det med at bruge din class til at udskrive med, så vil
classen være hurtigst - fordi den ikke skal bruge tid på at hente en fil
ind hver gang du bruger den.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Johan Holst Nielsen (20-12-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 20-12-08 09:59

Mads Lie Jensen wrote:
> On Sat, 20 Dec 2008 03:40:06 +0100, "DADK" <dadk@webspeed.dk> wrote:
>
>> Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil jeg godt
>> vide det alligevel!!! Jeg har lavet nogle test der viser, at klasser faktisk
>> er hurtigere end "konventionel" kode, og det undrer mig lidt, og det er
>> derfor jeg spørger.
>
> Jeg vil tro at det er ret tungt at bruge include 'fil.php', så hvis du
> tester i et setup hvor du enten kører flere include '' af den samme fil,
> og sammenligner det med at bruge din class til at udskrive med, så vil
> classen være hurtigst - fordi den ikke skal bruge tid på at hente en fil
> ind hver gang du bruger den.

Hvis vi er ude i den diskussion, så er det vel begrænset hvor brugbart
det er? Er spørgsmålet ikke mest om det er noget ala

<?php
//file1.php
echo 'hej med dig';
?>

<?php
//file2.php
class test {
function test() { echo 'hej med dig'; }
}
?>


<?php
//testfil

include 'file1.php'; //test af direkte udskrivning

include 'file2.php'; //test af class udskrivning
new test;
?>


Det er sjældent du vil have en class liggende, som du ikke inkluderer.
Hvis vi ikke tager includen med i beregningerne, kan de sagnes passe det
er tungere at køre include og echo end en samlet fil hvor der kaldes en
class.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Mads Lie Jensen (20-12-2008)
Kommentar
Fra : Mads Lie Jensen


Dato : 20-12-08 14:14

On Sat, 20 Dec 2008 09:59:27 +0100, Johan Holst Nielsen
<spam@phpgeek.dk> wrote:

>Det er sjældent du vil have en class liggende, som du ikke inkluderer.
>Hvis vi ikke tager includen med i beregningerne, kan de sagnes passe det
>er tungere at køre include og echo end en samlet fil hvor der kaldes en
>class.

Enig.
Jeg forestillede mig noget med at echo-versionen måske blev includeret
mange gange i den test som DADK havde lavet, og på samme måde kaldte
metoden i klassen samme antal gange og timede den.

For uden at kende testen som viser det resultat der nu snakkes om, så er
det jo rent gætværk.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Johan Holst Nielsen (20-12-2008)
Kommentar
Fra : Johan Holst Nielsen


Dato : 20-12-08 15:52

Mads Lie Jensen wrote:
> On Sat, 20 Dec 2008 09:59:27 +0100, Johan Holst Nielsen
> <spam@phpgeek.dk> wrote:
>
>> Det er sjældent du vil have en class liggende, som du ikke inkluderer.
>> Hvis vi ikke tager includen med i beregningerne, kan de sagnes passe det
>> er tungere at køre include og echo end en samlet fil hvor der kaldes en
>> class.
>
> Enig.
> Jeg forestillede mig noget med at echo-versionen måske blev includeret
> mange gange i den test som DADK havde lavet, og på samme måde kaldte
> metoden i klassen samme antal gange og timede den.

I så fald vil det også være en falsk test :)

Så skulle man inkludere en fil med $foo = 'Hej med dig'; og echo den ud
i et loop.

Antallet af includes betyder jo noget i denne sammenhæng.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

DADK (24-12-2008)
Kommentar
Fra : DADK


Dato : 24-12-08 09:23

Mads Lie Jensen wrote:
> On Sat, 20 Dec 2008 03:40:06 +0100, "DADK" <dadk@webspeed.dk> wrote:
>
>> Ja, jeg er helt enig med jer - foretrækker klasser, men derfor vil
>> jeg godt vide det alligevel!!! Jeg har lavet nogle test der viser,
>> at klasser faktisk er hurtigere end "konventionel" kode, og det
>> undrer mig lidt, og det er derfor jeg spørger.
>
> Jeg vil tro at det er ret tungt at bruge include 'fil.php', så hvis du
> tester i et setup hvor du enten kører flere include '' af den samme
> fil, og sammenligner det med at bruge din class til at udskrive med,
> så vil classen være hurtigst - fordi den ikke skal bruge tid på at
> hente en fil ind hver gang du bruger den.

Jeg includer i begge tilfælde, og i begge tilfælde samme mængde/kode,
class-filen er lidt længere, men koden afvikles hurtigere fra en class.



Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste