adbacz
2.01.2012, 16:47:02
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
2.01.2012, 16:49:19
Totalna ...... Wiesz ile kodu zajmuje średnio zaawansowana aplikacja? Duuuuuuuuużo. A ty to wszystko chcesz w jednym pliku trzymać.
adbacz
2.01.2012, 17:00:18
Ś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
nospor
2.01.2012, 17:05:27
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.
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
2.01.2012, 19:50:11
Ś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
2.01.2012, 19:50:57
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.
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
2.01.2012, 20:36:00
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.
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
3.01.2012, 07:23:57
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ć

Tak mało detali.
Challenge Accepted:
<?php
$dane="123\n";
$file="test.txt";
for(i=0;i<10000;i++)
{
$fp=fopen("$file", "r+"); }
?>
Ma ktoś stacje dyskietek aby to sprawdzić ?

EDIT:
Oczywiście niech nikt nie bierze powyższego kodu na serio, jest to tylko luźny humor związany z tematem.
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.