kostenloser Webspace werbefrei: lima-city


Kleiner Tipp zur Geschwindigkeitsoptimierung

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    spammi

    spammi hat kostenlosen Webspace.

    Hallo ihr lieben,

    ich hab mal Spasseshalber meinen Rechner gequält.

    Genutzte Schleife: while

    100.000.000 Durchläufe, Laufzeit in Sekunden
    Laufzeit bei "++i": 8.1130919456482
    Laufzeit bei "i++": 8.4843690395355
    Laufzeit bei "i += 1": 8.9624669551849
    Laufzeit bei "i = i+1": 10.120517969131

    Für die, die eine erklärung möchten:
    PHP wird in Maschinencode Interpretiert.(Assembler).
    i = i +1: hierbei arbeitet der Interpreter mit einer Temporären Variablen, dadurch, das der wert zum Addieren nicht fest sein muss dauert die anweisung länger zum parsen in binär
    i += 1: diese variante ist schon schneller, da nicht mit temporären werten gearbeitet werden muss, sondern direkt addiert wird, dennoch muss der wert erst in binär geparst werden.
    i++: übersetzt in assembler bedeutet dies "i inc", ist aber so durch den syntaxfehler nicht verwendbar, und muss umgedreht werden.
    ++i: wird direkt in "inc i" geparst(assembler);

    was ihr nun mit dem Wissen macht ist euer ding :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wo ist dein Protokoll bzw. Dokumentation?

    Sorry, aber selbst wenn die Daten exakt auf dein System zutreffen würden und reproduzierbar wären, was nutzt MIR das?

    http://www.beltz.de/fileadmin/beltz/downloads/OnlinematerialienPVU/Statistik_und_Forschungsmethoden/Leseprobe%20fuer%20Einsteiger.pdf
  4. Das Verhalten ist bekannt und logisch erklärbar (Ref).
    Allerdings kann man nicht immer ++i verwenden, das hängt ganz und gar von der Anwendung ab, die man ausführen will.

    Edit:
    Noch ein bisschen mehr zur Erklärung:
    ++i erhöht den Integer um den Wert 1 und gibt das sofort zurück. i++ speichert den alten Wert zwischen und verwendet diesen, erst nach Abschluss der Operation wird der Wert wirklich um +1 erhöht.

    Beitrag zuletzt geändert: 11.5.2014 22:27:18 von tct
  5. Autor dieses Themas

    spammi

    spammi hat kostenlosen Webspace.

    kigollogik schrieb:
    Wo ist dein Protokoll bzw. Dokumentation?

    Sorry, aber selbst wenn die Daten exakt auf dein System zutreffen würden und reproduzierbar wären, was nutzt MIR das?

    http://www.beltz.de/fileadmin/beltz/downloads/OnlinematerialienPVU/Statistik_und_Forschungsmethoden/Leseprobe%20fuer%20Einsteiger.pdf

    Das sollte auch keine Doktorarbeit werden, sondern für die sein, die ihre Scripts ein wenig optimieren möchten. Das verhalten ist wie tct auch schreibt, bereits bekannt. Ich dachte mir, dass es einigen eine hilfe sein kann, die extrem hohe ladezeiten durch schleifen haben (warum auch immer), oder ihre Seitenladezeit, wenn auch nur um MS, verkürzen wollen.

    Das Verhalten ist bekannt und logisch erklärbar (Ref).
    Allerdings kann man nicht immer ++i verwenden, das hängt ganz und gar von der Anwendung ab, die man ausführen will.

    Edit:
    Noch ein bisschen mehr zur Erklärung:
    ++i erhöht den Integer um den Wert 1 und gibt das sofort zurück. i++ speichert den alten Wert zwischen und verwendet diesen, erst nach Abschluss der Operation wird der Wert wirklich um +1 erhöht.


    das ++i nicht immer verwendbar ist, ist nicht ganz richtig. es ist nur dann nicht anwendbar, wenn man um mehr als 1 erhöhen will. wobei hier nun die frage spannend ist, ob es leichter ist mit ++i zu arbeiten, und dann den wert nach der schleife zu multiplizieren (bzw die bedingung vor der schleife zu teilen) oder ob ein addieren von größeren Werten sinniger ist.
  6. da hier das problem (was einige haben) nicht benannt werden wollte, tu ich es jetzt und bringe gleich ein beispiel dazu, das eindeutig dartsellt, was dabei passiert
    // pre-increment:
    $y = $x = 0;
    y = ++x; // y=1, x=1
    
    // post-increment:
    $y = $x = 0;
    y = x++; // y=0, x=1
    jetzt ist es klar, welche wann und wofür anwendbar ist.
    die bisher angebotene i++ o. ++i beispiele mit nur einer variable, zeigen nicht den unterschied.
  7. Ich shcließ mich den kritiken meiner Vorposter an.

    Außerdem ist in Bezug auf Ladezeitverhalten der Flaschenhals meist GANZ woanders...

    lass dir mal 100.000 Elemente in den DOM-Tree laden, und schau mal was das Leistungsprofil dazu sagt. der Server hats in etwa 0.1 sec abgearbeitet, aber der Browser fängt an irre Dinge zu tun und somit liegt das Problem lokal. Wenn man derart große Projekte hat, kommt man um z.B. JSON nicht drum herum und lädt nur die Inhalte in den DOM-Tree, die gerade sichtbar sind, ohne z.b. eine neue Server Request rauszuschicken.


    Was ich damit sagen will, es macht keinen Sinn, einen Anweisungsblock zu optimieren, der vielleicht 1% der Last ausmacht, nur um da 5% Performance rauszuholen, die sich dann mit 0,05% Auswirkung auf das Gesamtprojekt auswirken... Wenn sowas erforderlich ist, hat das Projekt einen groben Konzeptionellen Fehler!

    Konzeptionelle Fehler wären:

    -Fehler in der Logik(welches Webprojekt zum Geier erfordert z.b. 100 Mio Schleifendurchläufe? und wenn ich eine DB-Query mit so vielen Einträgen auf diese Art und Weise abarbeite, hab ich eh ein anderes Problem...)
    -Der Versuch dieses Projekt mit der falschen Programmiersprache umzusetzen. (PHP ist jetzt nciht geeignet, auf Rechennlast derartig viele Schleifendurchläufe zu benutzen, um vielleicht generisch Inhalte zu erzeugen... da wäre C/C++ eher relevant)
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!