2010-07-25 12 views
5

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

+0

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. –

Odpowiedz

8

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.

+3

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

+0

Jest kilka dobrych oglądanie na wewnętrznych serwerach PHP na YouTube] (http://www.youtube.com/watch?v=p5S1K60mhQU). – alex

3

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.

0

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ół

7

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.