Mam niestandardowy framework PHP MVC, który jestem w trakcie przepisywania i miał pytanie dotyczące wydajności i metod magicznych. Biorąc pod uwagę modelową część frameworka, zastanawiałem się, czy magiczne metody spowodowałyby zbyt duży spadek wydajności. Chodzi mi o to, że dostęp do danych modelu (odczyt i zapis) będzie jedną z najczęściej wykonywanych czynności. Czy korzystanie z magicznych metod jest zbyt duże w przypadku działania wydajnościowego w przypadku intensywnego użytkowania, takiego jak część modelu w strukturze MVC?__get/__ set/__ pytania dotyczące wydajności połączenia z PHP
Odpowiedz
Zmierz to.
Z pewnością ma duży hit wydajności, szczególnie biorąc pod uwagę, że wywołania funkcji są drogie w PHP. Ta różnica będzie jeszcze większa w następnej wersji PHP, która implementuje optymalizacje, które znacznie szybciej zapewniają stały dostęp do zadeklarowanych właściwości instancji.
Mimo to PHP rzadko jest wąskim gardłem. Zapytania I/O i bazy danych często wymagają dużo więcej czasu. To jednak zależy od twojego użycia; jedyny sposób, aby wiedzieć na pewno, że to benchmark.
Są to również inne problemy z czytelnością przy użyciu magicznych metod. Często ulegają degeneracji w jedno duże oświadczenie i kompromitują uzupełnianie kodu, co może być uderzeniem w wydajność programowania.
Niektóre IDE pozwalają na uzupełnianie kodu dla magicznych metod, gdy [przypisujesz klasę @metodą] (http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.method.pkg.html) – Gordon
Jest kilka dobrych oglądanie na wewnętrznych serwerach PHP na YouTube] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex
Czysto wynika z mojego doświadczenia, ale dodaje dużo narzutów. Na stronie z liczbą 4000 __get
(tak, było sporo danych na tej stronie) wydajność była dość wymiernie wolniejsza, do tego stopnia, że stała się nie do przyjęcia. Wyrzuciłem wszystkie dla zmiennych, które nie wymagają zmiany innych danych lub zewnętrznych zależności (takich jak klucze obce), po czym czas generowania tej strony wynosił około 15% czasu to trwało wcześniej.
Po prostu zadałem sobie to samo pytanie i doszedłem do tego samego wniosku: lepiej jest ustawić właściwości w tradycyjny sposób. __get() + masywny przełącznik spowalnia wszystko w dół
Oto an article (trzy lata) z niektórymi testami porównawczymi. Przeprowadź własne testy, aby zobaczyć, jak wpływa to na Twój kod.
Ogólnie mówiąc, są one znacznie wolniejsze. Ale czy to wąskie gardło? To zależy od tego, co robisz. Jeśli martwisz się szybkością, gdzie to się kończy? Pętla foreach
jest wolniejsza niż pętla for
, ale większość ludzi nie przepisuje całego swojego kodu, aby użyć for
.
Samo użycie PHP oznacza, że prędkość twojego kodu nie jest najważniejsza. Osobiście preferuję każdy styl, który ułatwia programowanie.
- 1. Najważniejsze pytania dotyczące wydajności
- 2. Pytania dotyczące wydajności zamiany
- 3. gzip - pytania dotyczące wydajności
- 4. Pytania dotyczące Command Pattern (PHP)
- 5. Niektóre pytania dotyczące dma_alloc_coherent
- 6. Pytania dotyczące klas scala: pytania
- 7. Pytania dotyczące programowania MUD
- 8. Pytania dotyczące brakujących danych
- 9. Pytania dotyczące memorybehavior wektorów
- 10. Wskazówki dotyczące dostrajania wydajności Django?
- 11. Ogólne pytania dotyczące rekurencji
- 12. Pytania dotyczące AppJS/Tidesdk
- 13. Three.js - Pytania dotyczące (używania) THREE.BufferGeometry
- 14. F # Pytania dotyczące jakości życia
- 15. Postery polimerowe pytania dotyczące postów
- 16. Pytania dotyczące operacji na NaN
- 17. Pytania dotyczące podstawowych wersji sieci
- 18. Pytania dotyczące pól bitowych C
- 19. Pytania dotyczące dobrego wywiadu z architekturą
- 20. pytania dotyczące źródła ciągu znaków?
- 21. Ant: Dwa pytania dotyczące dirsets
- 22. GWT Requestfactory sugestie dotyczące wydajności
- 23. Ogólne wytyczne dotyczące wydajności Guice
- 24. 4 Pytania dotyczące selektorów w Swift
- 25. Responsywne pytania dotyczące projektowania stron internetowych
- 26. Pytania dotyczące Akka, Scalatra i Web State
- 27. Dwa pytania dotyczące panelu sieciowego w Firebug
- 28. Klasyczne pytania dotyczące manipulowania ciągiem znaków?
- 29. Pytania dotyczące dziedziczenia i V + C++
- 30. Struts 1.2.9 - Pytania dotyczące niestandardowej internacjonalizacji
Powinieneś spróbować znaleźć inny sposób korzystania z nich i używać ich tylko w razie potrzeby. Poza tym, że są wolne, są również, moim zdaniem, trudniejsze do odczytania i utrzymania. –