![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam !
Spotkałem się ostatnio z pewnym frameworkiem Flex, w głównym katalogu były dwa pliki include_all.php i include_list.php : include_all.php
include_list.php
Z tego wynika, że wszystkie pliki są na początku ładowane i to budzi we mnie zastrzeżenia. Czy pliki powinny być na początku od razu wszystkie ładowane czy dopiero wtedy gdy dany jest potrzebny ? Pozdrawiam Darektbg -------------------- skocz.org - system skracania linków
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Rozważałem kiedyś ten problem, bo też wydało mi się niezbyt dobrym pomysłem ładowanie wszystkiego jak leci. Wiele tu zależy od budowy aplikacji, rozdziału klas na pliki itp. Wiadomo, im większa funkcjonalność tym więcej pojawi się plików. Osobiście uważam, że bardziej logiczne wydaje się ładowanie plików wtedy kiedy są potrzebne i tak właśnie organizuje to u siebie. Zbudowałem sobie ku temu prosty ObjectManager, który zajmuje się dostarczaniem potrzebnych plików. Jest to klasa, w której statycznie wywołuję metodę Import, która sprawdza czy dany plik został już załadowany i w razie potrzeby ładuję odpowiedni plik.
Jedna ważna uwaga, bo wydaje mi się, że rzadko zwraca się uwagę na to. Wszystkie instrukcje require" title="Zobacz w manualu php" target="_manual czy require_once" title="Zobacz w manualu php" target="_manual znalezione w kodzie w czasie kompilacji zostaną wykonane i pliki zostaną faktycznie załączone. Nawet jeśli taka instrukcja znajduje się wewnątrz instrukcji warunkowej dla której warunek nie jest spełniony, plik zostanie faktycznie załączony. Wynika z tego, że jakiekolwiek dynamiczne ładowanie można zbudować tylko w oparciu o include" title="Zobacz w manualu php" target="_manual i include_once" title="Zobacz w manualu php" target="_manual. Ot, moje 2 grosze :) pozdr. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
siemakuba:
Cytat Wszystkie instrukcje require czy require_once znalezione w kodzie w czasie kompilacji zostaną wykonane i pliki zostaną faktycznie załączone. Nawet jeśli taka instrukcja znajduje się wewnątrz instrukcji warunkowej dla której warunek nie jest spełniony, plik zostanie faktycznie załączony. Wynika z tego, że jakiekolwiek dynamiczne ładowanie można zbudować tylko w oparciu o include i include_once. Totalne bzdury: 1. w manualu pisze ze require i include zachowuja sie identycznie, rozni je jedynie typ bledu wyrzucanego w momencie nie znalezienia pliku. 2. wez sprawdz, wszystkie autoloadery przestaly by dzialac bo w nich jest kod typu:
3. powiedz mi jaki plik zostanie zalaczony w czasie KOMPILACJI: ? Zaden, bo zostanie zaladowany w czasie interpretacji, bo dopiero wtedy bedzie znana wartosc zmiennej $costam darektbg: Masz watek o autoloaderach, chyba nawet w php Pro. Jesli ladujesz wszystko na raz to niepotrzebnie ladujesz czesc plikow (przy zalozeniu ze nie wszystkich zawsze potrzebujesz), ale pliki ladowane od razu szybciej sie laduja Jesli ladujesz pojedynczo, na rzadanie (autoloaderem), to tracisz czas na przelaczaniu sie php miedzy wykonywaniem skryptu a kompilacja dolaczanych plikow, ale zyskujesz przez niezalaczanie niepotrzebnych plikow. Kompromisem zdaje sie byc (opisane przeze mnie a wykonane przez hwao -- w tamtym watku o autoloaderach) polaczenie obu rozwiazan -- na sztywno ladowanie plikow zawsze wykorzystywanych, a te zalezne od requestu ladowanie autoloaderem. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 112 Pomógł: 20 Dołączył: 10.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo: no przecież nie wyssałem tego z palca...
Cytat Notatka: Począwszy od php 4.0.2, zachowanie instrukcji jest następujące: require() będzie zawsze próbować odczytać plik docelowy, nawet jeśli linia w której ona się znajduje nigdy nie zostanie wykonana. Instrukcja warunkowa nie wpływa na działanie require(). Jednakże, jeśli linia, w której pojawia się require() nie zostaje wykonana, zawartość pliku wczytywanego też nie zostaje wykonana. Podobnie, instrukcje pętli nie wpływają na działanie require(). Chociaż kod zawarty w pliku docelowy wciąż jest podmiotem pętli, require() działa tylko raz. Wynika z tego chyba jednoznacznie, że pliki które ładujesz przez require, require_once będą ładowane przed wykonaniem skryptu, co za tym idzie, będą ładowane bez względu na to czy są potrzebne w danym momencie czy nie są. Owszem, będzie to sprawdzanie czy plik da się załadować czy nie, a nie wykonanie kodu z dołączanego pliku, ale zawsze jest to trochę więcej działania niż robi include. pozdr. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 00:45 |