[PHP] [alg] Optimalisatie code *

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aller eerst mijn eerste vraag maar daarvoor moet ik denk ik eerst wat voor informatie geven. ik ben bezig met een site maar nu wil ik natuurlijk een snel script hebben ik programeer het in PHP + MYSQL maar nu is mijn vraag

Hoe, kan ik mijn code snelhouden welke 'dingen' zou ik daarvoor in acht moeten nemen, wat tips en tricks zodat het een stuk sneller gaat misschien in combinatie met een andere programeer taal dat het dan sneller gaat misschien? ik weet het niet.

Mijn 2e vraag is eigenlijk ook op mijn 1e vraag gebaseerd
Wat is nou een ultieme programeer taal om naast PHP te gebruiken om de site sneller te laten lopen daar bedoel ik mee dus PHP + MYSQL + een andere taal. waardoor dingen sneller ingeladen worden of juist sneller laden in het algemeen.

Ik moet erbij zeggen dat ik heb gezocht (hier @ GoT) maar dat ik geen befredigend antwoord heb gevonden. alvast bedankt :)

Acties:
  • 0 Henk 'm!

Verwijderd

PHP + MYSQL + een andere taal
Dat kan vanalles zijn, ik zou denken aan javascript probeer een groot gedeelte clientside te houden, dat is altijd sneller

Voor een snel script is er vooral 1 ding dat je moet onthouden:
echo "<a href=\"".$bla."\">bla</a>"
is sneller dan
..?>
<a href="<?php echo $bla?>">bla</a>
<?php..
Dit omdat de php engine dan niet opnieuw hoeft te starten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 06 January 2003 @ 23:46:
PHP + MYSQL + een andere taal
Dat kan vanalles zijn, ik zou denken aan javascript probeer een groot gedeelte clientside te houden, dat is altijd sneller
kijk nu gebruik ik bijvoorbeeld ook veel HTML in combo met PHP en MYSQL maar is er ook een vervanger voor html waardoor hij nog sneller kan laden?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Zoepnek:
Voor een snel script is er vooral 1 ding dat je moet onthouden:
echo "<a href=\"".$bla."\">bla</a>"
is sneller dan
..?>
<a href="<?php echo $bla?>">bla</a>
<?php..
Dit omdat de php engine dan niet opnieuw hoeft te starten.

euh :? Da's nieuw voor mij :) Waar heb je dat vandaan? Of heb je 't zelf gebenched? Heb er nog nooit van gehoord iig :)

De meeste tips 'n tricks kun je aan de hand van een lap code beter aanwijzen. 't Is namelijk lastig te formuleren wat de manier is om te programmeren.

Over het algemeen zijn includes langzaam, en overbodig veel queries doen aan de databaseserver. Verder zijn er niet echt veel dingen waarvan ik zou zeggen: dat is echt van cruciaal belang. Ja, niet onnodig dikke HTML-pagina's uitpoepen, natuurlijk, maar da's meer een Webdesign & Graphics verhaal :)

Verder vraag ik me af waar de vraag vandaan komt :) Ondervind je zelf al problemen met de snelheden van je script? 't Is misschien wat handiger om een beetje een richtsnoer te hebben voor dit topic :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Mijn tip: Gewoon netjes programmeren.
Ook zou ik zoveel mogelijk door MySQL laten doen en zorgen dat je de data 'zo goed als klaar' binnen binnen komt zodat er PHP vrijwel niks meer aan hoeft te doen. Je berekeningen en bewerkingen door MySQL laten uitvoeren is in de meeste gevallen vele malen sneller.

Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 04:26

GrimaceODespair

eens een tettenman, altijd ...

FF de faqjes lezen, en je vindt bijvoorbeeld al snel dit, met enkele tips.

Mijn ervaring is overigens dat je geen grote optimalisaties moet doorvoeren voordat je programma echt werkt. Je kan je natuurlijk wel altijd aan enkele simpele richtlijnen houden, maar het is vaak effectiever én efficiënter om eerst iets aan het werken te krijgen en dan pas te optimaliseren dan andersom.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 08:47

Kettrick

Rantmeister!

Ik gebruik PHP met MySQL en smarty, dit bevalt erg goed.
Als ik je 1 goede tip mag geven :

Gebruik named Array's

Ook vanuit SQL named array's halen (fetch_assoc), dit bespaart je veel tijd/frustratie en is een stuk sneller :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

RoeLz schreef op 07 January 2003 @ 01:18:
Ik gebruik PHP met MySQL en smarty, dit bevalt erg goed.
Als ik je 1 goede tip mag geven :

Gebruik named Array's

Ook vanuit SQL named array's halen (fetch_assoc), dit bespaart je veel tijd/frustratie en is een stuk sneller :)

Zal niet sneller dan gewoon indexed array's zijn, maar ook niet noemenswaardig slomer.

Wel een belangrijke tip is _echt_ netjes te programmeren.
Dus niet $bla = $array[x], maar $bla = $array['x'].

En niet $bla['x'] = 20; als initialisatie van je array, maar $bla = array('x' => 20);

En zet vooral ook je error_reporting op E_ALL, om te zien wat stiekem eigenlijk niet goed is en de php-engine extra error-correcting-code aan moet spreken, de meeste van dat soort situaties kunnen flink slomer zijn.

[ Voor 3% gewijzigd door ACM op 07-01-2003 01:34 ]


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 08:47

Kettrick

Rantmeister!

ACM schreef op 07 January 2003 @ 01:34:

[...]

Zal niet sneller dan gewoon indexed array's zijn, maar ook niet noemenswaardig slomer.
Er staat me iets van bij dat jij, of een van je collega mods, ooit eens een test heeft gebouwd waar uitkwam dat named array's sneller waren :?

welk topic dat is weer ik zo niet meer :?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik denk dat de uitslag eerder was dat het nihil uitmaakte :)

Magoed, ik gebruik zelf wat me het beste uit komt, omdat ik verwacht dat het nihil uitmaakt ;)
2 nanoseconde op de executie+laadtijd van 30ms is natuurlijk een beetje zinloos om op te besparen.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ACM schreef op 07 January 2003 @ 01:34:
En niet $bla['x'] = 20; als initialisatie van je array, maar $bla = array('x' => 20);
Is dat puur stylistisch? - dat je ziet dat je daar voor het eerst de array aan maakt. Of ook nog andere overwegingen?

(gewoon interesse hoor)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

marty schreef op 07 January 2003 @ 02:19:
Is dat puur stylistisch? - dat je ziet dat je daar voor het eerst de array aan maakt. Of ook nog andere overwegingen?

(gewoon interesse hoor)

Nee, dat is niet puur stylistisch :)
Bij mijn weten is er een groot verschil in executie, de eerste doet "hier heb je een variabele, hee de proggert wil dat je hash waarde X aanroept en er Y in zetten, nou laten we er es een array van maken dan en de positie X opzoeken, ah X bestaat niet, laten we X maken en er Y inzetten"...
En de tweede "Hier heb je een array waar op plek X de waarde Y staat".

Nou weet ik niet zeker of het zo is, maar volgens mij ging het wel zo ongeveer. Overigens krijg je ook een warning met E_ALL als error_reporting als je domweg $b['x'] = bla;

doet als $b nog geen array was (ook als ie niet gedeclareerd was als array).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke ik heb hier een zelfgeschreven code enkel de functie om het paswoord te genereren heb ik niet zelf geschreven :)
ik geef deze code omdat een paar postes hierboven wordt beschreven: als je een code geeft misschien een lijdraad :) weet niet of ik gelijk de goede code heb gepakt en of ik alles goed heb gecomment ;)

PHP:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?

include 'functie.php';
include 'config.php';

// Als er form submit niet bestaat registratie veld laten zien
if(!isset($_POST['naam'])){
    invulveld();
} else { 
    // Controleer of alles ingevuld is
    if (strlen($_POST['naam']) == 0 ||
            strlen($_POST['gebruikersnaam']) == 0 ||
            strlen($_POST['email']) == 0 ||
            strlen($_POST['email2']) == 0 ||
            strlen($_POST['wachtwoord']) == 0 ||
            strlen($_POST['wachtwoord2']) == 0 ||
            !isset($_POST['accoord'])
            ) {
        // Niet alle velden zijn ingevuld ?>
        Je hebt niet alle verplichte velden ingevuld...<br><br>
        <a href="javascript:history.go(-1)">Ga terug</a>
        <?php
    } else {
        // Alle velden zijn ingevuld
        // Controleren of email (of) username bestaat (in de db)
    
        // Controleren of gebruikersnaam bestaat
        $query = mysql_query("SELECT gebruikersnaam FROM members WHERE gebruikersnaam = '" . $_POST['gebruikersnaam'] . "'");
        $gebruikersnaam = mysql_num_rows($query);

        // Controleren  of email adres reeds bestaat (in de db)
        $query = mysql_query("SELECT email FROM members WHERE email = '" . $_POST['email'] . "'");
        $email = mysql_num_rows($query);

        // Als gebruikersnaam al bestaat (in db) dan error weergeven
        if ($gebruikersnaam) { ?>
            Deze gebruikersnaam is al in gebruik<br><br>
            <a href="javascript:history.go(-1)">Ga terug</a>
        <?php
        } else if ($email) { 
            // Als email al bestaat (in de database) dan error weergeven ?>
            Dit email adres is al in gebruik door een ander account<br><br>
            <a href="javascript:history.go(-1)">Ga terug</a>
            <?php
        } else {
            // Is alles goed?
            // Controleren of de 2 paswoorden aan elkaar gelijk zijn
            if ($_POST['wachtwoord'] != $_POST['$wachtwoord2']) {
                echo "De wachtwoorden zijn niet gelijk aan elkaar";
            } else {
                //Klopt alles? mooi! dan alles in de db opslaan en een wachtwoord genereeren
                $geboortedatum = $_POST['geb1'] . "-" . $_POST['geb2'] . "-" . $_POST['geb3'];

                // Wachtwoord genereeren

                if($actmail){
                    $tekens=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
                    $activeringscode;
                    for($c = 0; $c < 12; $c++){
                        srand((double)microtime() * 100000000000000);
                        $pass = $tekens[rand(0, 62)];
                        $activeringscode=$activeringscode.$pass;
                    }
                } else {
                    $activeringscode = 0;
                }

                // Wachtwoord omzetten naam md5 encryptie
                $wachtwoord1 = md5($_POST['wachtwoord']);

                //ip variable defineren (REMOTE_ADDR)
                $ip = $_SERVER["REMOTE_ADDR"];
                mysql_query("INSERT INTO members (gebruikersnaam,wachtwoord,naam,email,homepage,geboortedatum,woonplaats,geslacht,geactiveerd,pm,ip) VALUES ('$gebruikersnaam','$wachtwoord1','$naam','$email','$homepage','$geboortedatum','$woonplaats', '$geslacht','$activeringscode','$pm','$ip')") or die(mysql_error());

                // 0 = nee 1 = ja (wil je dat er een activatie mail word gestuurd automatisch)
                if($actmail) {
                    //hier de activerings mail  (tekst)
                    $bericht = "";

                    //mail versturen
                    mail("$email","Activeer nu je account $naam !","$bericht","From: Activeer account<$webmaster_email>\nContent-Type: text/html; charset=iso-8859-1");
                    echo "De aanmelding is succesvol gelukt, er word nu een mailtje verstuurd aan <b>$email</b> waarin de activerings url staat...";
                } else {
                    echo "De aanmelding is gelukt, het is nu aan de webmaster om te bepalen of je wordt geaccepteerd...";
                }
            }
        }
    }
}
?>


bijvoorbeeld bij deze php code ik weet niet of het gelijk een goed voorbeeld is het is voor een member systeem :) zodat mensen zich kunnen registreren.

Acties:
  • 0 Henk 'm!

  • Weerz
  • Registratie: Oktober 2002
  • Laatst online: 20:14
Door Godzilla - Monday 06 January 2003 23:48
kijk nu gebruik ik bijvoorbeeld ook veel HTML in combo met PHP en MYSQL maar is er ook een vervanger voor html waardoor hij nog sneller kan laden?


--------------------------------------------------------------------------------------------------

Wat je hiervoor ook kunt gebruiken is xml dat maakt kwa onderhoud je site wat makkelijker te onderhouden en het werkt erg goed met programmeer talen zoals Java,php enz. Het is wel even weer wat anders leren maar het is wel de moeite waard! ;)

Instagram | Flickr | Nikon D500 -> Sigma Art 18-35MM F/1.8 | NIKKOR AF-S 50MM F/1.8G | TAMRON 70-200MM G2 F2.8 | TAMRON 150-600MM G2 F/5-6.3


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 07 januari 2003 @ 07:32:
Oke ik heb hier een zelfgeschreven code enkel de functie om het paswoord te genereren heb ik niet zelf geschreven :)
ik geef deze code omdat een paar postes hierboven wordt beschreven: als je een code geeft misschien een lijdraad :) weet niet of ik gelijk de goede code heb gepakt en of ik alles goed heb gecomment ;)
*knip*
bijvoorbeeld bij deze php code ik weet niet of het gelijk een goed voorbeeld is het is voor een member systeem :) zodat mensen zich kunnen registreren.
Lees eens het stuk van ACM over beveiliging van websites (is in de faq opgenomen).
Zo is het iig. nog zwaar hackbaar >:)

Who is John Galt?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Weerz schreef op 07 January 2003 @ 07:48:
Door Godzilla - Monday 06 January 2003 23:48
kijk nu gebruik ik bijvoorbeeld ook veel HTML in combo met PHP en MYSQL maar is er ook een vervanger voor html waardoor hij nog sneller kan laden?


--------------------------------------------------------------------------------------------------

Wat je hiervoor ook kunt gebruiken is xml dat maakt kwa onderhoud je site wat makkelijker te onderhouden en het werkt erg goed met programmeer talen zoals Java,php enz. Het is wel even weer wat anders leren maar het is wel de moeite waard! ;)
Maakt het je website ook sneller of.. is het alleen makkelijker in onderhoudt, omdat ik een code wil maken die snel is zodat we geen gedonder krijgen met elle lange wachttijden :):)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

RoeLz:
Er staat me iets van bij dat jij, of een van je collega mods, ooit eens een test heeft gebouwd waar uitkwam dat named array's sneller waren :?

welk topic dat is weer ik zo niet meer :?


Ik denk dat jij het verschil bedoelt tussen mysql_fetch_assoc en mysql_fetch_object. Daar zijn in het verleden benchmarkjes voor gemaakt, waaruit bleek dat de laatste idd een stuk trager is dan de eerste.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Weerz
  • Registratie: Oktober 2002
  • Laatst online: 20:14
Verwijderd schreef op 07 January 2003 @ 08:08:
[...]


Maakt het je website ook sneller of.. is het alleen makkelijker in onderhoudt, omdat ik een code wil maken die snel is zodat we geen gedonder krijgen met elle lange wachttijden :):)
Ik vind het wel sneller maar dat ligt ook aan de server waar je het draait. Maar je moet maar ook even kijken of je webhoster het ook ondersteund.

Instagram | Flickr | Nikon D500 -> Sigma Art 18-35MM F/1.8 | NIKKOR AF-S 50MM F/1.8G | TAMRON 70-200MM G2 F2.8 | TAMRON 150-600MM G2 F/5-6.3


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Godzilla:
Maakt het je website ook sneller of.. is het alleen makkelijker in onderhoudt, omdat ik een code wil maken die snel is zodat we geen gedonder krijgen met elle lange wachttijden :):)

Je praat hier over milliseconden, niet over minuten ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

drm schreef op 07 January 2003 @ 09:08:
[nohtml]
[...]
[/nohtml]

Ik denk dat jij het verschil bedoelt tussen mysql_fetch_assoc en mysql_fetch_object. Daar zijn in het verleden benchmarkjes voor gemaakt, waaruit bleek dat de laatste idd een stuk trager is dan de eerste.

of mijn bench over het verschil tussen SELECT * en SELECT veldnamen ;)

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 07 januari 2003 @ 08:08:
[...]


Maakt het je website ook sneller of.. is het alleen makkelijker in onderhoudt, omdat ik een code wil maken die snel is zodat we geen gedonder krijgen met elle lange wachttijden :):)
Jij zoekt een magische 'tool' waar alles sneller mee wordt? Die is er niet..
Je hoeft echt niet bang te zijn voor 'elle lange' wachttijden, je php-script is m.i. het minst veeleisende aspect van het hele proces.
Onderdelen die wel wat meer tijd in beslag kunnen nemen:
• database queries, zorg dus voor een goed doordacht datamodel, slimme queries en indexen
• externe includes in je website
• de internetverbding van de client
• etc

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Een paar tips in random volgorde
• Het is onverstandig en langzaam om meerdere malen een seed (srand) te doen voor de random functie's. Dus deze moet uit de loop worden gehaald.
• Het is heeeeeeel onverstandig om data vanuit user input rechtstreeks in de database te stoppen.
• Gebruik een functie om je error handling te doen, ook je user handling
• Combineer de query waarbij je test op gebruikersnaam en email. Queries zijn per definitie traag


Voor de rest is het script zo klein dat alle optimalisatie voor snelheid minimale voordelen bied. Het is verstandiger om je script zo te maken dat het goed onderhoud blijft.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Ook een paar tips van mij:
  • Voor je eigen overzicht is het misschien beter om de insert-query op te delen in een paar regels
  • Quoted variabelen, mail("$email",...) als je hier nou mail($email,...) van maakt? Volgens mij stond dit ook in de benchmark die ooit verschenen is.
  • De ene keer gebruik je voor een named array enkele quotes, en daarna weer dubbele quotes. Ik weet niet wat sneller is, maar het staat netter als het overal hetzelfde is.
Dit was wat ik zo kon bedenken :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

LuCarD schreef op 07 January 2003 @ 09:34:
.....• Combineer de query waarbij je test op gebruikersnaam en email. Queries zijn per definitie traag
....



Mwah... Haal die maar helemaal weg want dit kan nog steeds fout gaan. Maak in de DB gewoon de velden email en naam uniek en probeer de gegevens gewoon te inserten. Je krijgt van de DB wel een foutmelding of die dingen al bestaan of niet. Dit kun je met mysql_erno/error heel makkelijk afvangen. Dit soort dingen zou je sowieso door de DB af moeten laten handelen omdat deze hier juist voor is gemaakt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

drm schreef op 07 January 2003 @ 00:56:

[...]

euh :? Da's nieuw voor mij :) Waar heb je dat vandaan? Of heb je 't zelf gebenched? Heb er nog nooit van gehoord iig :)
Ik heb dat ooit es hier op GoT gehoord, ik weet niet of het zo'n geweldig voorbeeld is, maar ik kan me er iets bij voorstellen

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
Ben naar aanleiding van dit topic nieuwsgierig geworden naar de performance van de verschillende taalstructuren binnen PHP, en ben dus maar aan het benchmarken geslagen (klein beetje maar, rest komt later, eerst over een half uurtje maar eens tentamen maken :(). Hieruit blijkt dat er grote verschillen zijn in execution time hoe je iets laat uitvoeren door PHP.

In eerste instantie heb ik gekeken hoe het zit met arrays en 'gewone' variabelen, ik wil zeker ook nog eens MySQL-benchmarks gaan draaien, maar dat komt nog wel :).

http://www.siemenroorda.nl/bench/array.html : de resultaten van het vullen en uitlezen van arrays (geindexeerd en associatief, impliciet en expliciet) (22.000.000 PHP-opdrachten :Y))
http://www.siemenroorda.nl/bench/vars.html : de resultaten van het werken met variabelen (toekennen, uitlezen, verschillende soorten quotes, verschillende soorten concatenations) (35.000.000 PHP-opdrachten)
http://www.siemenroorda.nl/bench/mysql.html : de resultaten van het werken met een MySQL-database (fulltext-serach, select, data naar PHP halen) (1.125 queries).
http://www.siemenroorda.nl/bench/php.html : de resultaten van het werken met PHP-tags (code onderbreken voor ?><?php of code door laten lopen; zoals Zoepnek aanhaalde) (5.000.000 PHP-opdrachten).

Samenvattend, met een paar naar mijn mening opvallende uitkomsten:

Geindexeerde arrays:
- inserten in een groeiende grote array kost meer tijd dan in een vaste kleine array (telkens array[0] <=> array[]) (+100%)
- [$i] en [] is ongeveer gelijk
- array(0 => x) is trager dan array[0] = x (+50%)
- array($i => x) is sneller dan array[$i] = x (+22%)

Associatieve arrays:
- geen gebruik van quotes is veel langzamer dan het gebruik van quotes (+200%)
- gebruik van array('x' => y) is trager dan het impliciet toewijzen (array['x'] = y) (+60%) (Dit in tegenstelling tot wat ACM zei!)
- enkele en dubbele quotes maken geen verschil

Doorlopen van arrays:
- for (1 to count) is iets sneller dan foreach($arr as $val)
- while (list ($key, $val) = each ($testarray)); is veel trager dan for of foreach (+180%)

Variabelen toekennen:
- voor getallen verdient geen quotes gebruiken bij toekenning de voorkeur (+20%)
- voor strings verdient wel quotes gebruiken bij toekenning de voorkeur (+200%)
- geen verschil tussen dubbele en enkele quotes

Variabelen uitlezen:
- echo $var is sneller dan echo "$var" (+30%)
- echo "string ".$var is sneller dan echo "string $var" (+50%)
- concatenating met . is sneller dan met + (+50%)

MySQL:
- MATCH ... AGAINST is veel sneller dan LIKE (+400%)
- LIKE 'A%' is veel sneller dan REGEXP '^A' (+2000%)
- SELECT id is sneller dan SELECT * (tabel met 5 kolommen) (+80%)
- SELECT * is ongeveer even snel als SELECT col1, col2, ... (over alle kolommen)
- er is weinig verschil tussen mysql_fetch_row en mysql_fetch_object (wat binnenhalen van de data betreft)

Gebruik van PHP-tags:
- er is geen verschil tussen het al dan niet onderbreken van de PHP-engine: for (...) { opdrachten } en for (...) { ?><?php opdrachten ?><?php } geven gelijke processing times; meestal ligt het zeer kleine voordeel bij gebruik van de eerste code.

Ik zal als ik wat meer tijd heb de code wel online zetten, kan iedereen het voor zich proberen >:)

Gebruikte configuratie:
AMD XP2000+
512 MB 333 MHz-geheugen
Windows 2000
Xitami
PHP 4.3.0
MySQL 3.23.49

[ Voor 44% gewijzigd door sjroorda op 10-05-2003 19:36 ]


Acties:
  • 0 Henk 'm!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 04:26

GrimaceODespair

eens een tettenman, altijd ...

Dit zijn zeer interessante resultaten sjoorda. Bedankt voor de moeite. Nou alleen nog hopen dat het tentamen even ok is ;)

Wij onderbreken deze thread voor reclame:
http://kalders.be


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
GrimaceODespair schreef op 07 januari 2003 @ 14:33:
Nou alleen nog hopen dat het tentamen even ok is ;)
offtopic:
Mwah, denk het wel ;)

[ Voor 65% gewijzigd door sjroorda op 07-01-2003 15:29 ]


Acties:
  • 0 Henk 'm!

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 23-06 23:17
sjroorda schreef op 07 januari 2003 @ 13:34:
[...]
- echo "string ".$var is sneller dan echo "string $var" (+50%)
[...]
En echo 'blabla', $bla?

Aangezien je toch bezig bent. ;)

[ Voor 15% gewijzigd door Ericston op 07-01-2003 16:10 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Hier staat er ook wat over..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
Ericston schreef op 07 January 2003 @ 16:03:
[...]

En echo 'blabla', $bla?

Aangezien je toch bezig bent. ;)
Had in eerste instantie niet met echo gewerkt, omdat ik dan een beetje veel output krijg, maar toch even gedaan (met ob_start en zo ;)). Uitkomst is dat het echo'en van een var een factor 5.5 langer duurt dan het alleen maar toekennen aan een variabele (maar dat vroeg je niet), en dat en geen noemenswaardige verschillen bestaan tussen het echo'en met een . om samen te voegen of met een ,

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

even kort:
regel 58, wat doet die?

regels 57 en 61 kan je wellicht beter zo doen:
code:
1
2
3
4
5
6
$tekens = "abcdefghijklmnopqrstuvwxyz";
$aantal_tekens = strlen ( $tekens );
for // ...
   // ... 
   $pass = $tekens { rand ( 0, $aantal_tekens ) };
// ..

Je zou er voor kunnen kiezen $tekens als constante te nemen, en bovenaan in je code te zetten. Is weer een stukkie makkelijker aan te passen, en 't is tenslotte een constante:
code:
1
define ( 'PASS_CHARACTERS', "de_chars" );


maar goed, of dat voor performance uitmaakt, vraag ik me af.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:10
Ik vind het zelf nogal vreemd om voor de mogelijkheden en het gemak van PHP te kiezen, en vervolgens omwille van de performance alle gemakkelijke constructies achterwege te laten. Beslis dan van te voren of je een snelle implementatie gaat schrijven in een echte taal, en die naar een CGI module compileert, of dat je kiest voor PHP en dus het implementatieproces zo eenvoudig mogelijk maakt.

Wanneer je je PHP code tot het uiterste gaat zitten uitknijpen, zit je uiteindelijk nog steeds met relatief trage code, en heb je net zo veel (of veel meer) tijd en moeite verbruikt, als wanneer je direct een minder makkelijkere maar efficientere taal had gebruikt.

Uiteraard is het dom om 3 SQL queries te doen als je met 1 weg kan komen, maar met een heleboel van de andere suggesties hier win je bijna niets. Je kunt beter je tijd investeren in het verbeteren van je product, en pas op het moment dat je performance problemen krijgt, die gericht aan te pakken. Een mail-form script optimaliseren, dat door 10 klanten per maand gebruikt wordt, is gewoonweg zonde van de tijd.

Maar ik geloof dat ik het topic aan 't verpesten ben. :P Stoor je vooral niet aan mij.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

sjroorda schreef op 07 januari 2003 @ 13:34:
Geindexeerde arrays:
- inserten in een groeiende grote array kost meer tijd dan in een vaste kleine array (telkens array[0] <=> array[]) (+100%)
- [$i] en [] is ongeveer gelijk
- array(0 => x) is trager dan array[0] = x (+50%)
- array($i => x) is sneller dan array[$i] = x (+22%)

Associatieve arrays:
- geen gebruik van quotes is veel langzamer dan het gebruik van quotes (+200%)
- gebruik van array('x' => y) is trager dan het impliciet toewijzen (array['x'] = y) (+60%) (Dit in tegenstelling tot wat ACM zei!)
- enkele en dubbele quotes maken geen verschil

Altijd leuk als mensen bewijzen dat ik ongelijk heb :P
Dan moet en zal ik bewijzen dat ik gelijk heb of daarmee ook een bewijs construeren dat ik ongelijk heb ;)

Kortom:
http://magnus.et.tudelft.nl/~acm/array.bench.php

Bij mij is het impliciet toewijzen juist (iets, soms niet eens) trager dan het netjes declareren dmv de array functie, tenminste... als je maar 1 element test. Met 2 elementen is de array-functie 3x zo snel... En dat zal met meer elementen alleen maar erger worden lijkt me?

Het domweg invoeren van waarden die je niet zoveel uitmaken (array (x, y) of $array[] = x; $array[] = y); is ongeveer even snel, de meeste keren dat ik keek ietsje sneller met de array-functie.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Daar ben ik het deels wel mee eens, maar je hebt natuurlijk langzaam en langzamer, ajbwib :)

't kan, ook bij php, geen kwaad je aan een aantal stelregels te houden om je code zo efficient mogelijk te laten zijn.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Je hebt in principe gelijk hoor :)
Maar het gaat hier om veel gebruikte constructies die al-dan-niet best aardig uit kunnen maken. Of juist om gedachtes _dat_ het veel uitmaakt terwijl het eigenlijk geen zak uitmaakt.

Als je de ene makkelijke constructie kan vervangen door een andere makkelijke constructie die 3x zo snel is, dan is het natuurlijk opzich wel zo handig om dat te doen.
Mocht het om nanoseconden gaan op een totale executie tijd van meerdere milliseconden.. sja, dan moet je er niet druk om maken.
Maar een foreach-loop die 10000 array elementen af moet lopen en net zo goed door een for vervangen had kunnen worden...

En anderzijds zijn er de genen die denken dat 'x' veel sneller is dan "x", dat valt reuze mee dus moet je daar juist kiezen wat je handiger vindt :)

[edit]
Btw, afhankelijk van de totale executie tijd en de "sloomheid" van de fork-functie op de server kan CGI zelfs een slomer zijn dan php.

[ Voor 8% gewijzigd door ACM op 07-01-2003 17:51 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:10
ACM schreef op 07 January 2003 @ 17:45:
Btw, afhankelijk van de totale executie tijd en de "sloomheid" van de fork-functie op de server kan CGI zelfs een slomer zijn dan php.
Inderdaad, maar als je PHP code zo traag is, dat je 't liever in een compileerbare programmeertaal schrijft, dan zal dat in het algemeen niet het geval zijn (de overhead van de fork() call win je dan wel terug met de efficientere implementatie).

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Vaak hebben mensen eht er over dat code tussen "" wel geparsed wordt, denk bijvoorbeeld aan \n enzovoorts. Dit zou dan slomer moeten zijn als '' weet iemand of dit zo is of niet. Net stond wel ergens een opmerking dat het niet zo was maar is dat ook echt specifiek getest, of maakt het net niks uit?

Acties:
  • 0 Henk 'm!

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 16:47
djluc schreef op 07 januari 2003 @ 17:56:
Vaak hebben mensen eht er over dat code tussen "" wel geparsed wordt, denk bijvoorbeeld aan \n enzovoorts. Dit zou dan slomer moeten zijn als '' weet iemand of dit zo is of niet. Net stond wel ergens een opmerking dat het niet zo was maar is dat ook echt specifiek getest, of maakt het net niks uit?

In de PHP documentatie staat dat alles tussen " en " geparsed wordt (o.a. variabelen, \n, \t enz.). Tussen ' en ' wordt vrijwel niets geparsed, en hier kun je dus ook geen variabelen tussen zetten.

Wat Zoepnek schrijft:
Voor een snel script is er vooral 1 ding dat je moet onthouden:
echo "bla"
is sneller dan
..?>
bla
Dit omdat de php engine dan niet opnieuw hoeft te starten.
Is dus gewoon klinkklare onzin. De php engine hoeft niet gestart te worden, die parsed namelijk de hele pagina, maar slaat alles wat niet tussen staat gewoon over. Het is juist het tegenovergestelde: als je veel html hebt, kun je dat beter niet tussen zetten, omdat dit dan door de php-parser wordt behandeld wat uiteraard tijd kost.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

djluc schreef op 07 januari 2003 @ 17:56:
of maakt het net niks uit?

Het maakt, imho, zo weinig uit dat je je er niet druk om moet maken bij kleine stukken tekst. Bij hele lange stukken tekst kan het zinvol zijn om ' te gebruiken ipv "", maar het wordt alweer lastiger als er variabelen in zitten...

Acties:
  • 0 Henk 'm!

Verwijderd

Hoi,

- Probeer eens server-side caching (voor pagina's met langere geldigheids periode)
- Of probeer eens: http://www.phpbuilder.com/columns/argerich20010125.php3
- Test je SQL queries of de indices worden gebruikt

Suc6

Bas

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Het verschil tussen het gebruik van enkele en dubbele quotes om variabelen een waarde toe te kennen wordt pas beduidend als je meer aparte woorden gebruikt. Het verschil tussen $test = "test" en $test = 'test' is minder dan tussen $test = "Dit is een test" en $test = 'Dit is een test'. Dat heeft er mee te maken dat php bij dubbele quotes alle woorden apart toevoegd aan de variabele (dat heeft te maken met het checken van variabelen in je string) en bij enkele quotes wordt direct de gehele string aan de variabele toegevoegd.

Er zijn ooit een benchmark van gemaakt, maar ik zou niet meer weten waar die te vinden zijn. Een goede start om te zoeken in de pear mailinglists lijkt me.

edit:
Wat linkjes:
php benchmark: http://www.php.lt/benchmark/phpbench.php
profiling met php: http://www.onlamp.com/pub/a/php/2002/02/28/profilingphp.html

[ Voor 17% gewijzigd door Rense Klinkenberg op 08-01-2003 13:39 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Het maakt dus wel zeker uit, denk bijvoorbeeld aan langere stukken tekst met veel speciale tekens. Zeker als je geen zin hebt om continu \ te gebruiken.

Waarom zie je trouwens zo vaak dat mensen HTML tussen dubbele quotes zetten en dan alles gaan \\\, gewoon opmdat ze niet beter weten of is er toch iets anders aan de hand?

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Als je veel html in een string wil zetten, is het ook de moeite waard om een naar de heredoc-syntax te kijken.
PHP:
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
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* More complex example, with variables. */
class foo
{
    var $foo;
    var $bar;

    function foo()
    {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Ik kan het alleen eens zijn met Soultaker op een bepaald punt. Laat snelheid niet op #1 komen maar onderhoudbaarheid van code.
Dingen als correctheid van de code, classes en simpelheid van de code zullen zich eerder uitdrukken in besparende kosten voor onderhoud dan die enkele millisecondes dat een zware optimalisatie zal opleveren. We zijn immers ook en-masse van C naar C++ gegaan, puur alleen om code beter te kunnen onderhouden.

Maw, eerst ontwerp OK. Mocht het dan te traag blijken, ga dan eens rustig optimaliseren

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Glimi schreef op 08 januari 2003 @ 22:11:
We zijn immers ook en-masse van C naar C++ gegaan, puur alleen om code beter te kunnen onderhouden.

Sterker nog, er zijn zelfs mensen van C naar Java daarvoor gegaan, toch? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb van fast SQL gehoort is het ook echt ZO FAST? of is dat gewoon only the name?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat zou het moeten zijn dan :?
Een sql-server?
Een of ander taaltje gebaseerd op SQL?

Lijkt me sterk dat je er wat aan kan hebben, aangezien je met mysql werkt en de sql-support daarvanaf hangt en nergens anders.
Doe es een linkje ernaar, als je zelf al niet meer uitleg te voorschijn kan krijgen moet je het gewoon negeren.

Je zou je sowieso niet _te_ veel moeten bekommeren om de snelheid van iets, het is doorgaans ruim snel genoeg voor de paar bezoekers die je krijgt en pas als blijkt dat het niet snel genoeg is moet je es naar het optimaliseren kijken.

Persoonlijk maak ik me er zelden druk om of iets snel genoeg is, hooguit als het een of ander stuk code is dat echt vaak aangeroepen wordt.
Pagina: 1