Ich habe ein maßgeschneidertes MVC PHP-Framework, das ich gerade umschreibe und hatte eine Frage zu Leistung und magischen Methoden. Mit dem Model-Teil des Frameworks dachte ich, ob magische Methoden zu viel Leistung bringen würden, wenn sie sich lohnen würden. Ich meine, der Zugriff auf (Lese- und Schreib-) Modelldaten wird eines der am häufigsten ausgeführten Dinge sein. Ist die Verwendung von __get
/__set
magischen Methoden zu groß für eine Performance-Hit für starke Nutzung Funktionalität wie der Modell Teil eines MVC-Framework?__get/__ set/__ Call-Performance-Fragen mit PHP
Antwort
Messen Sie es.
Es hat sicherlich einen großen Leistungseinbruch, vor allem wenn man bedenkt, dass Funktionsaufrufe in PHP teuer sind. Dieser Unterschied wird in der nächsten Version von PHP, die Optimierungen implementiert, die den regulären Zugriff auf deklarierte Instanzeigenschaften deutlich beschleunigen, noch größer.
Das heißt, PHP ist selten der Flaschenhals. E/A- und Datenbankabfragen benötigen häufig viel mehr Zeit. Dies hängt jedoch von Ihrer Verwendung ab; der einzige Weg, um sicher zu sein, es zu benchmarken.
Das sind auch andere Lesbarkeitsprobleme mit den magischen Methoden. Sie degenerieren häufig in eine große switch
Anweisung und kompromittieren Code-Vervollständigung, die beide Treffer in der Programmierproduktivität sein können.
Einige IDEs erlauben Code-Vervollständigung für magische Methoden, wenn Sie [die Klasse mit @method kommentieren] (http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.method.pkg.html) – Gordon
Es gibt einige [gut auf PHP-Interna auf YouTube schauen] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex
Rein aus meiner Erfahrung, fügt es eine ganze Menge Overhead hinzu. Auf einer Seite mit ungefähr 4000 __get
's (ja, es gab ziemlich viele Daten auf dieser Seite) war die Leistung ziemlich messbar langsamer, bis zu dem Punkt, als es inakzeptabel wurde. Ich habe alle __set
's & __get
' s für Variablen, die keine anderen Daten geändert werden müssen oder externe Abhängigkeiten (wie Fremdschlüssel) überprüft werden, warf nach dem die Zeit, um diese Seite zu generieren war etwa 15% der Zeit Es hat vorher gedauert.
Ich habe mich gerade die gleiche Frage gestellt und kam zu der gleichen Schlussfolgerung: Es ist besser, die Eigenschaften auf die traditionelle Weise einzustellen. __get() + massiver Schalter verlangsamt alles
Hier ist ein (drei Jahre alt) mit einigen Benchmarks. Führen Sie Ihre eigenen Tests aus, um zu sehen, wie sich dies auf Ihren Code auswirkt.
Im Allgemeinen sind sie viel langsamer. Aber sind sie der Flaschenhals? Es hängt davon ab, was du tust. Wenn es um Geschwindigkeit geht, wo hört es auf? Die foreach
-Schleife ist langsamer als die for
-Schleife, aber die meisten Leute schreiben nicht ihren gesamten Code neu, um die for
zu verwenden.
Wenn Sie nur PHP verwenden, ist die Geschwindigkeit Ihres Codes nicht so kritisch. Persönlich würde ich bevorzugen, welcher Stil es einfacher macht zu programmieren.
- 1. Python __get__ Methode
- 2. Verwenden Sie __get__, __set__ mit Wörterbuchelement?
- 3. Python-Deskriptor __get__ mit zusätzlichen Argumenten aufrufen?
- 4. Verwirrung über __get__ und __call__ in Python
- 5. Zweck von __get__ einer einfachen Funktion
- 6. Warum muss def __get__: return types.MethodType?
- 7. Ein nicht funktionales __get__-Attribut eines Deskriptors erhält beim Aufruf ein zusätzliches Argument, warum?
- 8. Was sind einige Faustregeln für die Entscheidung zwischen __get__, __getattr__ und __getattribute__?
- 9. PHP mehrzeiligen String mit PHP
- 10. mit php
- 11. includin PHP-Datei von URL mit php
- 12. PHP: Parse ini Datei mit .php Erweiterung
- 13. PHP Template - Überschreibe Hintergrundbild mit PHP Shortcode
- 14. php - mit optionalen Argumente in PHP
- 15. Modal in PHP mit PHP include
- 16. Entfernen Sie PHP-Erweiterung mit PHP
- 17. PHP/SQL Umgang mit Sonderzeichen (PHP Anfänger)
- 18. Wie eine PHP-Datei mit PHP
- 19. PHP Cron-Job mit PHP-Parameter
- 20. mit php-r R innerhalb PHP
- 21. PHP: Wie man Browserfensterbildschirm mit PHP erfasst?
- 22. PHP: schwarzes Bild beim Zuschneiden mit PHP
- 23. PHP-Kontaktformular mit Fehlermeldungen triggern php script
- 24. mit jQuery Post mit php
- 25. Verbinden mit WebDAV mit PHP?
- 26. php autocomplete mit vim
- 27. php security mit Joomla
- 28. regex Problem mit PHP
- 29. Lucene mit PHP
- 30. Sanieren SVG mit PHP
Sie sollten versuchen, einen anderen Weg zu finden, sie zu benutzen, und sie nur verwenden, wenn es notwendig ist. Abgesehen davon, dass sie langsam sind, sind sie meiner Meinung nach auch schwieriger zu lesen und zu warten. –