ďťż
Podstrony
|
telcocafezrobiłem sobie stronę w php a wszystkie funkcje jakie używam wstawiłem do pliku funkcje.php który jest includowany przez index.php (dla wygody i przejrzystości pracy :P). funkcji jest dosyc dużo i są one raczej obszerne, a zauważyłem że parser php przy includowaniu tego pliku sprawdza wszystkie funkcje czyli niepotrzebnie marnuje czas i obciąza serwer ponieważ i tak większość tych funkcji nie będzie używana :/ da się jakoś uniknąć tego wczytywania ? niby taka drobnostka ale po co niepotrzebnie obciążać serwer :)Użyj: zamiast funkcji include() ~ require() Pogrupuj funkcje wg przeznaczenia i podziel je na kilka plików. Najczęściej używane pozostaw w głównym pliku funkcji, który będziesz dołączał za każdym razem. Pozostałe możesz dołączyć w poszczególnych modułach bądź instrukcjach warunkowych. :) Użyj: zamiast funkcji include() ~ require() ale co to mi da ?! nic :P ... przecież include i require to jest to samo :P jedyna różnica polega na tym że inlcude zwraca w razie niepowodzenia warringsa i skrypt jest wywoływany a require zwraca fatal errora i skrypt jest przerywany :) chodzi o to ... żeby wczytywać funkcje wtedy kiedy będzie ona potrzebna czyli przy jej wywołaniu ... po co wczytywać nieużywaną funkcję ?! wyjaśnie na przykładzie :P otóż jeśli mamy coś takiego: if($liczba == 7) { echo('liczba jest siedem'); //instrukcje jakieś } else { echo('liczba jest inna niż siedem'); //instrukcje jakieś } to jeżeli $liczbą będzie równa 7 to instrukcje else nie bądą wogóle sprawdzane, może tam być nawet tysiąc błędów i parser nie zwróci na to uwagi, natomiast jeśli mamy kilka zdefiniowanych kilka funkcji i w jakiejś z nich zapomnimy średnika to parser od razu wywala nam błąd mimo że wcale danej funkcji nie wywoływaliśmy :) nie chodzi tu o to że wyskakuje błąd ale o to że funkcja jest sprawdzana mimo że nie była wywoływana ! czyli marnowanie czasu i serwera :/ ... nie można jakoś zrobić tak żeby funkcje były tylko zadeklarowane a w przypadku ich wywołania były definiowane ? Cały skrypt jest kompilowany do kodu operacyjnego. Jeżeli gdziekolwiek znajdzie się błąd, parser wywali błąd parse error, nawet w instrukcji warunkowej. Im więcej kodu, tym dłużej trwa kompilowanie (chyba, że funkcje nie są duże). :) Jeśli już to: function DefiniujBlokFunkcji() { function A() {} function B() {} }Tylko jak już pisałem - jeżeli funkcje zawierają dużo kodu i nie są używane za każdym razem, lepiej przenieść je do innego pliku. Drobna poprawka... Samo include/reguire zajmuje więcej czasu niż samo prasowania. Bo musi na dysku znaleźć ten plik, otworzyć... A sam praser bardzo szybko prasuje. Ja zalecam nie baczenia na optymalizacje, bo nic tu nikt nie zdziała za wiele. Include proszę raczej stosować dla wygody, by nie szukać procedury X w kodzie 500kB :] Moja rada: Lepiej jeden include niż dwadzieścia. Ponadto co tam.... użyj microtime i sam potestuj opcje. Bo może my Cię kłamiemy i wkręcamy ;) Jeżeli gdziekolwiek znajdzie się błąd, parser wywali błąd parse error, nawet w instrukcji warunkowej Teraz to sprawdziłem i ... faktycznie masz rację !!! ... a byłem pewien że tak nie jest, bo wydawało mi się że kiedyś zapomniałem w else średnika (albo jakiś inny błąd, ale już nie pamiętam :P) i wywaliło mi błąd dopiero wtedy gdy warunek if-a sie nie zgadzał. Czyli nawet za pomocą if-ów nie da się tak zrobić żeby funkcje były definiowane wybiórczo jedyne co można zrobić to includować pliki z funkcjami Jeśli już to: function DefiniujBlokFunkcji() { function A() {} function B() {} } to akurat też nic nie zmienia ;] ... bo i tak przy definicji funkcji DefiniujBlokFunkcji zostaną zdefiniowane funkcja A i B (nie będzie ich można co prawda uruchomić przed uruchomieniem funkcji DefiniujBlokFunkcji ale będą one sprawdzane :P) Istnieje takie coś jak dynamiczne includowanie, opisane na jednym z polskich serwisów poświęconych php albo forum (nie pamiętam którym). Dynamiczne includowanie polega na tym że pisze się kod który będzie includował w trakcie wykonywania daną funkcję kiedy zostnie użyta po raz pierwszy. Edytka: znalazłem :D polecam lekture tego wątku: http://forum.php.pl/...der-t26107.html Użytkownik NeVeS edytował ten post 28 lipiec 2007, 12:53 Szukanie optymalizacji w takich miejscach jest właściwie bezcelowe. Dobrze skonfigurowany serwer mający eAcceleratora czy Zend Optimizera zręcznie sobie sam z takim czymś poradzi. Polecam użycie profilowania w xdebug2, zęby zobaczyć, gdzie jest wąskie gardło aplikacji. @NeVeS: autoloader działa z klasami, a i tak zwykle sprowadza się to do wczytania osobnego pliku dla osobnej klasy. Ten mechanizm zdaje mi się jakoś znacząco na czas ładowania nie powinien wpływać. |
|||
Sitedesign by AltusUmbrae. |