Ergebnis 1 bis 15 von 15

Thema: Contao und Referenzen in PHP - Performance?

  1. #1
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard Contao und Referenzen in PHP - Performance?

    Hallo allerseits!

    Ich bin auf der Suche nach jemandem, der regelmässig mal Performance-Tests macht und eine geeignete Entwicklungsumgebung besitzt.

    Ich habe vor einigen Wochen mal einen interessanten Artikel gelesen. Geschrieben hat der Artikel Johannes Schlüter, der Release-Manager von PHP 5.3.
    Den Artikel findet ihr hier: http://schlueters.de/blog/archives/1...eferences.html

    Momentan werden in TL/Contao ja alle Sprach-Arrays mit Referenz übergeben und ich frage mich, ob wir Contao noch performanter machen könnten, wenn wir die Referenzen entfernen würden.

    Einfach mal ein einfaches "Suchen und ersetzen" mit "&$GLOBALS" und "$GLOBALS" machen und dann mal gucken, ob PHP effektiv schneller interpretieren kann.

    Wie seht ihr das? Meinungen? Tests? Kann jemand sowas testen? Jemand Erfahrung im Performance testen?

    Bin mal gespannt auf's Resultat
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  2. #2
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Wenn man bei den Language strings nun die & entfernt, dann wird nix mehr tun..

    Schliesslich wird hierdurch eine "klemmende" Referenz auf einen String gesetzt und nicht der String selbst gesetzt.
    Probier es aus und denk nochmal dryber nach.

    PS: im Allgemeinen hat er jedoch Recht, Referenzen sollten vermieden werden, sofern nicht zwingende Grynde dafyr sprechen (wie z.B. bei der Ybersetzung).
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  3. #3
    Contao-Hauptentwickler
    AG Core-Entwicklung
    Avatar von leo
    Registriert seit
    05.06.2009.
    Ort
    Wuppertal
    Beiträge
    816

    Standard

    Ich frage mich auch, wie viel langsamer die Verwendung von Referenzen ein Skript wohl macht. Das sollte doch im Bereich von Millisekunden liegen, oder? Zudem finde ich es ein bisschen extrem, Referenzen per se zu verteufeln. Klar, in PHP4 wurde das Feature sehr extensiv genutzt und vielen ist sicherlich die Umstellung auf PHP5 nicht leicht gefallen. Aber es soll auch Fälle geben, in denen Referenzen ein hilfreiches und somit durchaus berechtigtest Instrument sind

  4. #4
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Daher mein PS, es gibt Faelle wo dies Sinn macht.
    Aber generell kaempfen wir hier noch mit PHP4 Code wo diese schlichtweg keinen Sinn mehr machen.
    Ebenso haengen, wie von dir gesagt, etliche ihrer alten Mentalitaet nach alles per se zu verreferenzieren.

    Im allgemeinen gibt es jedoch viel groessere Bottlenecks die man eher angehen sollte.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Wenn man bei den Language strings nun die & entfernt, dann wird nix mehr tun..

    Schliesslich wird hierdurch eine "klemmende" Referenz auf einen String gesetzt und nicht der String selbst gesetzt.
    Probier es aus und denk nochmal dryber nach.
    Muss ich gucken ne Ich quetsch Dich dann wieder aus. Momentan kapier ich nämlich nicht ganz, was Du meinst, aber ohne Code geht das ja auch schlecht. Mal drüber schauen, wenn ich Zeit hab!

    @leo: Wenn überhaupt Milisekunden. Denke auch nicht, dass es viel ausmacht. Aber man soll ja nichts unversucht lassen, um das System schnell zu halten

    Ich hab im Grunde genommen nur nach "php references" gegoogelt und diesen Artikel gefunden und mir gedacht "hmm, vielleicht gibts da Optimierungspotenzial, wer weiss"
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    AG Core-Entwicklung
    Registriert seit
    16.10.2009.
    Ort
    Bad Lausick
    Beiträge
    437

    Standard

    Nur mal zum Verständnis: Was passiert genau, wenn man die Übersetzungen nicht per Referenz anspricht? 1-2 Sätze reichen.

  7. #7
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von backbone Beitrag anzeigen
    Nur mal zum Verständnis: Was passiert genau, wenn man die Übersetzungen nicht per Referenz anspricht? 1-2 Sätze reichen.
    nur ein kleines Beispiel um das Problem zu beschreiben:
    PHP-Code:
    // Entspricht dem laden der lanugage files.
    $GLOBALS['TL_LANG']['tl_proofofconcept']['langstr']='Test 1';
    // entspricht dem laden der DCA (mit referenz)
    $GLOBALS['TL_DCA']['tl_proofofconcept1']['fields']['langstr']['label']=&$GLOBALS['TL_LANG']['tl_proofofconcept']['langstr'];
    // entspricht dem laden der DCA (ohne referenz)
    $GLOBALS['TL_DCA']['tl_proofofconcept2']['fields']['langstr']['label']=$GLOBALS['TL_LANG']['tl_proofofconcept']['langstr'];

    // nochmaliges Laden der language Dateien ggf. in einer anderen Sprache oder evtl. andere is ja nur proof of concept.
    $GLOBALS['TL_LANG']['tl_proofofconcept']['langstr']='was ist passiert?';

    // Nun haben wir:
    $GLOBALS['TL_DCA']['tl_proofofconcept1']['fields']['langstr']['label']=='was ist passiert?';
    // Und 
    $GLOBALS['TL_DCA']['tl_proofofconcept2']['fields']['langstr']['label']=='Test 1'
    Anmerkung am Rande: dca Dateien werden per include_once() importiert (und das ist auch aus gutem Grunde so). Die Sprachwerte koennen jedoch yberall wild vertauscht werden und ersetzen dank Referenz "dynamisch" die alten Werte in den DCA.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ein ganz einfacher, wichtigerer Grund: Die Sprachdateien werden NACH dem DCA geladen. Ohne Referenz wären die Sprachlabels immer leer...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von leo.unglaub Beitrag anzeigen
    BSP doppelte Hochkomma statt einfachen. Besonders bei Query's im prepare() wird diesr Fehler seeehr oft und gerne gemacht. Ich glaube selbst im Core.
    Was ist daran ein Fehler? Meinst du weil nach Variablen geparst wird?
    Bei SQL-Queries verwende ich auch immer Hochkommas. Allerdings gerade bei Queries lässt sich sehr viel optimieren wenn für "sichere" Werte nicht prepare()->execute() genutzt wird...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  10. #10
    Contao-Hauptentwickler
    AG Core-Entwicklung
    Avatar von leo
    Registriert seit
    05.06.2009.
    Ort
    Wuppertal
    Beiträge
    816

    Standard

    Interpolation kann man nun wirklich nicht als Bottleneck bezeichnen. Die Unterschiede liegen im Nanosekundenbereich

  11. #11
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von leo Beitrag anzeigen
    Interpolation kann man nun wirklich nicht als Bottleneck bezeichnen. Die Unterschiede liegen im Nanosekundenbereich
    Das ist nun ein Punkt bei dem ich sogar bereit bin zu streiten.
    Welchen Sinn macht Interpolation, wenn keine vorgenommen werden kann, weil nichts zum interpolieren vorhanden ist?

    Fyr alle die nicht wissen worum es generell dabei geht ein paar links (englisch):
    http://www.astahost.com/info.php/Php...ion_t4286.html
    http://stackoverflow.com/questions/1...nation-in-php5

    Die Zeit von etwa 2/3 bei concat ggyber interpolation kann ich bei mir bestaetigen (da bei einer Interpolierung intern ebenfalls eine concat vorgenommen wird ist dies auch wirklich verstaendlich).
    Klar sind diese Zeiten im allgemeinen im ms Bereich und in real world Anwendungen recht klein, jedoch sind dies Zeitfresser die einfach nicht notwendig sind und mit minimalstem Aufwand ohne negative Seiteneffekte vermieden werden koennen (Zumindest bei literalen Strings bleibt der code genausogut lesbar wie ohne).
    Die Aussage von Andreas ist jedoch ebenfalls genauso richtig, man kann durch concatenation und das Umgehen von prepare recht viel gewinnen, execute nichts zu tun hat ausser das Query "durchzuwinken".

    Im Endeffekt waege ich immer ab, was im jeweiligen Falle die richtige Methode ist (nein, auch ich messe nicht jede Zeile in allen Varianten durch und nehme dann die, die gerade den Besten Benchmark bekommen hat ).
    Ich denke, das sollte jeder Entwickler tun und deshalb tu ich es auch.

    Ein groesseres Bottleneck koennte z.B. sein, dass die Singletons yberall mitgeschleift werden, egal ob gebraucht oder nicht. Doch dazu fehlen mir die Benchmarks, das ist nur ein subjektives Gefyhl.

    Ich finde die Diskussion hier aber super, solche Dinge sollten wir auch alle auf der Contao DevCon in Stuttgart (Die sollte doch bei Jan steigen, oder?) besprechen.

    Gruss
    Chris
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  12. #12
    Contao-Hauptentwickler
    AG Core-Entwicklung
    Avatar von leo
    Registriert seit
    05.06.2009.
    Ort
    Wuppertal
    Beiträge
    816

    Standard

    Deswegen nutzen wir ja auch einfache Anführungszeichen als Standard. In SQL-Statements werden die einfachen Anführungszeichen aber bereits verwendet und ich schreibe lieber

    PHP-Code:
    $sql "SELECT * FROM tl_user WHERE username='leo'"
    anstatt

    PHP-Code:
    $sql 'SELECT * FROM tl_user WHERE username=\'leo\''
    Denn viele Backslashes nerven auf Dauer gewaltig, machen den Code unübersichtlicher und sind dadurch auch eine potentielle Fehlerquelle. Dasselbe gilt für HTML-Code (sofern er nicht sowieso in Templates ausgelagert ist).

    PHP-Code:
    $html '<span class="info">Info</span>' 
    anstatt

    PHP-Code:
    $html "<span class=\"info\">Info</span>" 
    Zitat Zitat von xtra
    solche Dinge sollten wir auch alle auf der Contao DevCon in Stuttgart besprechen
    Wann wird die sein? Gibt es da schon konkrete Pläne?

  13. #13
    Community-Moderator Avatar von alex
    Registriert seit
    05.06.2009.
    Ort
    Wuppertal
    Beiträge
    702

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Ich finde die Diskussion hier aber super, solche Dinge sollten wir auch alle auf der Contao DevCon in Stuttgart (Die sollte doch bei Jan steigen, oder?) besprechen.
    Wird da die "DevCon" mit dem "Usertreffen 2011" verwechselt ?
    Interessant ist auch, dass der Ort "Stuttgart" auch schon fest steht....

  14. #14
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von alex Beitrag anzeigen
    Wird da die "DevCon" mit dem "Usertreffen 2011" verwechselt ?
    Interessant ist auch, dass der Ort "Stuttgart" auch schon fest steht....
    Nein wird sie nicht.
    Dennoch hatten wir etwas derartiges bei der Schlussbesprechung auf dem TLUT10 in den Raum gestellt.
    Weiterhin ist dies nicht zwingend sondern ein einfacher Vorschlag, da Jan Theofel von ETES freundlicherweise angeboten hatte, sich um Raeumlichkeiten zu kymmern.

    Abschliessend ist die Zielgruppe der DevCon eine gaenzlich andere als die vom UT, da es um entwicklerspezifische Aspekte gehen soll und nicht so breitgefaechert wie auf dem UT.

    Die Planungen hierzu haben aber noch nicht wirklich begonnen (zumindest soviel ich weiss), daher Ball flach halten und abwarten.
    Erstmal muss 2.9 released werden.

    Gruss
    Chris
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  15. #15
    AG Core-Entwicklung
    Registriert seit
    16.10.2009.
    Ort
    Bad Lausick
    Beiträge
    437

    Standard

    Zitat Zitat von xtra Beitrag anzeigen
    Ein groesseres Bottleneck koennte z.B. sein, dass die Singletons yberall mitgeschleift werden, egal ob gebraucht oder nicht. Doch dazu fehlen mir die Benchmarks, das ist nur ein subjektives Gefyhl.
    Auch wenn ich bei dem Punkt nichts direkt zu dem Thema Performance sagen kann, ist es abgesehen davon, aus Sicht der objektorientierten Softwarearchitektur ziemlich fraglich, ob Referenzen auf Singletons mit öffentlichen getInstance()-Zugriffsmethoden irgendwoanders als im Singleton selbst (bzw. in der zugehörigen Manager-Klasse) gespeichert werden sollen.
    mMn. sollte man diese Referenzen generell entfernen. Natürlich ist es etwas kürzer $this->Input als Input::getInstance() zu schreiben, aber das kann man verkraften. Zur Not könnte man dann auch eine "Accessor-Function" schreiben wie:
    Code:
    function Input() { return Input::getInstance(); };
    oder von mir aus auch das Singleton in den GLOBALS abspeichern.
    Da lazy-init auch nicht notwendig sein sollte (da eh fast alle Singletons, während initialize.php instanziiert werden), kann man auch direkt auf eine public static zugreifen (da aber leider kein "final" vorhanden ist, könnte man dies überschreiben).

    Edit:
    Die "Accessor-Function" sollte egtl. auch als Closure möglich sein? (Bin nicht sicher)
    Das würde im Konstruktor der Singleton-Klasse dann ungefähr so aussehen:
    Code:
    class Input {
      private static $objInstance;
      private function __constructor(...) {
        function Input() {
          return self::$objInstance;
        };
      }
    }
    Geändert von backbone (09.06.2010 um 16:05 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Referenzen, die beeindrucken können?
    Von cybernaut im Forum Was kann Contao?
    Antworten: 28
    Letzter Beitrag: 25.06.2013, 15:23
  2. Performance bei 30.000 Artikeln
    Von tpunkt im Forum isotope
    Antworten: 9
    Letzter Beitrag: 13.06.2011, 10:24
  3. Schlechte Performance
    Von svr im Forum Installation / Update
    Antworten: 37
    Letzter Beitrag: 27.11.2010, 17:42
  4. performance
    Von oblaum im Forum Was kann Contao?
    Antworten: 0
    Letzter Beitrag: 04.08.2010, 11:39
  5. Referenzen darstellen
    Von rocco im Forum Allgemeine Inhaltselemente
    Antworten: 17
    Letzter Beitrag: 13.11.2009, 06:27

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •