Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ile można zaoszczędzić czasu na NIEinclude'owaniu plików PHP?
Forum PHP.pl > Forum > PHP
adbacz
Tak się zastanawiam właśnie, czy można zbudować aplikację, albo jakis prosty FW używając jednego pliku PHP? Albo dwóch, index.php do którego przychodzi żądanie z przeglądarki i JakisGlownyPlik.php który zawiera wszystko co potrzeba. Gdzieś czytałem kiedyś, że include i require bardzo dużo czasu zabiera apache-owi, żeby przyłączyć pliki do działania. Ale czy można pozbyć się tego słabego punktu budując aplikację w jednym pliku?

Nie biorę tutaj pod uwagi jakości kodu oraz prostego poruszania się w nim (to nawet nie możliwe jest), ale ogólnej szybkości. Oczywiście wszystko napisane z użyciem OOP itd. Co o tym myślicie?
nospor
Totalna ...... Wiesz ile kodu zajmuje średnio zaawansowana aplikacja? Duuuuuuuuużo. A ty to wszystko chcesz w jednym pliku trzymać.
adbacz
Średnio zaawansowana aplikacja - jaką masz na myśli? Jestem początkujący, i faktycznie mogę nie wiedzieć jak bardzo "kobylaste" mogą być aplikacje WEB no ale az takie? Jaka może być różnica w include plików powiedzmy 40-50 (szacuję, że coś koło tego, zawsze jest włączanych do projektu) a jednego dużego? pytam czysto teoretycznie wink.gif
nospor
Srednio skomplikowana aplikacja zajmuje parę mega.

Stworzyłem plik o rozmiarze 2.6 MB. Plik składal się z linii:
$zm = 1 + 3 +4 .'aaaaa'.'5';
linii tych jest prawie 100tys.

include takiego pliku trwa 0.38 sekundy i konsumuje prawie 200MB pamięci. A takich odwołan będziesz miał tyle ile userów.
Zaincludowanie paru zdecydowanie mniejszych plików zajmuje zdecydowanie mniej czasu i mniej pamięci.
erix
Cytat
Jestem początkujący, i faktycznie mogę nie wiedzieć jak bardzo "kobylaste" mogą być aplikacje WEB no ale az takie? Jaka może być różnica w include plików powiedzmy 40-50 (szacuję, że coś koło tego, zawsze jest włączanych do projektu) a jednego dużego

Tak, aż takie. Poza tym, poguglaj sobie, co to jest code coverage.

A wciskanie wszystkiego do jednego pliku jest bez sensu:
  • utrudnia pracę grupową
  • zwiększa zużycie pamięci, jak zauważył ~nospor
  • nie można tego normalnie edytować (bo środowisko zaczyna pożerać w cholerę pamięci)
  • jw., tylko outline pliku musi być przewijane bez końca
  • marnujesz pamięć akceleratora
Uriziel01
Średnio zaawansowany projekt (nawet mało zaawansowany) prawdopodobnie nigdy nie potrzebuje wczytać 100% dostępnego kodu. Jeżeli projekt waży 4-5MB (normalna ilość kodu), to podczas pojedyńczego requesta potrzebujesz może 10-20% tego kodu, czyli średnio 750KB, nie wyobrażam sobie abym pomijając include/require zaoszczędził czas ładując 4,25MB zbędnego kodu. Pomijam już kosmiczne zużycie pamięci tego potworka, pomyśl o samych obciążeniach dla IDE podczas edycji tego. Bardzo ale to bardzo kiepski pomysł, podsumowując.
adbacz
Dziękuję za rozjaśnienie mi w głowie. Oczywiście to było pytanie czysto teoretyczne i nie uwzględniałem takich problemów jakie napisał erix. Zastanawiałem się tylko, czy możnaby było napisać aplikację, która jako pewnego rodzaju cache, włącza właśnie wszystki pliki, z których korzysta - do jednego pliku. Ale teraz widzę, że to zła droga. Dzięki za uwagi.
erix
Cytat
Zastanawiałem się tylko, czy możnaby było napisać aplikację, która jako pewnego rodzaju cache, włącza właśnie wszystki pliki, z których korzysta - do jednego pliku. Ale teraz widzę, że to zła droga. Dzięki za uwagi.

Już parę lat temu ktoś wpadł na ten pomysł pisząc APC/eAccelerator/etc. Teraz prawie każdy serwer posiada jakiś akcelerator zainstalowany z interpreterem. [;
by_ikar
Czas wykonywania takiego skryptu gdzie jest dużo include/require głównie jest zauważalny, ponieważ operacje na plikach są wolne. Zmień dysk na ssd, lub utwórz ramdisk i sprawdź różnice.
erix
Cytat
Czas wykonywania takiego skryptu gdzie jest dużo include/require głównie jest zauważalny, ponieważ operacje na plikach są wolne. Zmień dysk na ssd

Kolega ~by_ikar chyba nie czytał:

Cytat
Już parę lat temu ktoś wpadł na ten pomysł pisząc APC/eAccelerator/etc.

O ile zakład, że skrypt wykona się szybciej z dyskietki na interpreterze z APC niż z dysku SSD bez akceleratora?
Uriziel01
Cytat(erix @ 2.01.2012, 21:20:11 ) *
O ile zakład, że skrypt wykona się szybciej z dyskietki na interpreterze z APC niż z dysku SSD bez akceleratora?


Oj z tobą to mógł bym się zakładać wink.gif Tak mało detali.
Challenge Accepted:
  1. <?php
  2. $dane="123\n";
  3. $file="test.txt";
  4. for(i=0;i<10000;i++)
  5. {
  6. $fp=fopen("$file", "r+");
  7. $dane=$dane.fread($fp, filesize($file));
  8. rewind($fp);
  9. flock($fp, 2);
  10. fwrite($fp, $dane);
  11. flock($fp, 3);
  12. fclose($fp);
  13. }
  14. ?>

Ma ktoś stacje dyskietek aby to sprawdzić ? biggrin.gif

EDIT:
Oczywiście niech nikt nie bierze powyższego kodu na serio, jest to tylko luźny humor związany z tematem.
erix
Ale include a operacje I/O, to "lekko" coś innego, a przypominam, czego wątek dotyczy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.