Minified verze a velikost využité paměti
- Bernard Williams
- Člen | 207
Nazdárek,
provádím zrovna nějaké srovnání Frameworků a knihoven. Když přišlo na měření využité paměti, tak jsem se v případě Nette dost zhrozil. Hodnota využité paměti byla cca 6,7 MB!! Číslo se mi vůbec nelíbilo a tak jsem si řekl, že je možná špatně napsaný testovací script. Využitou paměť jsem tedy změřil na holém skeletonu z distribuce. Číslo nebylo o moc uspokojující: 5,5 MB! Pak mě napadlo, že velkou roli na tom bude mít asi minified verze. Paměť jsem tedy zase změřil jak v mé aplikaci, tak i ve skeletonu, ale nyní už bez minified verze a výsledek:
Můj script: 2,6 MB
Skeleton: 3,1 MB
Což už je přeci jen schůdnější..
A co tím vším chci říct? Všude se píše a doporučuje, aby se na ostrých serverech využívala minified verze, kterou je mnohem snaží a rychlejší nahrát na server – s tím pochopitelně souhlasím, ale stojí tato pohodlnost za (v mém případě) 2,5 krát vyšší paměťové nároky? Troufám si tvrdit, že podobně na tom budou i ostatní stránky (ne-li všechny).
Nette: 0.9.2
PHP: 5.2.5
S pozdravem
Bernard
Editoval Bernard Williams (6. 4. 2010 18:43)
- Honza Kuchař
- Člen | 1662
Ano, minified verze zabírá opravdu hodně paměti, ale
díky tomu, že je to jeden soubor, tak PHPko (nebo cache zkompilovaného
skriptu) načítá pouze jeden soubor a to je o hodně
rychlejší než načítat souborů stovky. Opravdu, změř si
to pomocí profileru, pomocí Debug::timer()
nebo
pomocí echo microtime(true);
- Jan Tvrdík
- Nette guru | 2595
Obecně platí, že diskové operace trvají poměrně dlouho (když jsem si
teď spustil profiler Nette aplikace bez minified verze na localhostu [bez
akcelerátorů], tak LimitedScope::load()
stojí více než 30 %
času) o jejich počet by se měl omezit pokud možno na minimum.
V praxi jsou navíc aplikace rozsáhlejší, takže procentuální nárůst spotřebované paměti při použití minified verze není vzhledem k paměťovým nárokům samotné aplikace tak velký.
- Erik Ferčák
- Člen | 10
Kolega previedol prednedávanom testy normálnej verzie a minified verzie. Použil kód z existujúceho projektu, nie je to žiaden skeleton a pod. Tu sú výsledky:
100 requestov (concurency 2.)
Minimalizovane.NETTE:
--------------------------------------------------------------------------------
eAccelerator, ROUND I.: Time taken for tests: 7.551 seconds
eAccelerator, ROUND II.: Time taken for tests: 7.521 seconds
bez, ROUND I.: Time taken for tests: 13.605 seconds
bez, ROUND II.: Time taken for tests: 13.617 seconds
Full.NETTE:
--------------------------------------------------------------------------------
eAccelerator, ROUND I.: Time taken for tests: 7.781 seconds
eAccelerator, ROUND II.:Time taken for tests: 7.778 seconds
bez, ROUND I.: Time taken for tests: 13.894 seconds
bez, ROUND II.: Time taken for tests: 13.925 seconds
- Bernard Williams
- Člen | 207
Erik Ferčák napsal(a):
Kolega previedol prednedávanom testy normálnej verzie a minified verzie. Použil kód z existujúceho projektu, nie je to žiaden skeleton a pod. Tu sú výsledky:
Hodnoty využité paměti by nebyly? Docela by mě zajímaly..
- Erik Ferčák
- Člen | 10
Bernard Williams napsal(a):
Erik Ferčák napsal(a):
Kolega previedol prednedávanom testy normálnej verzie a minified verzie. Použil kód z existujúceho projektu, nie je to žiaden skeleton a pod. Tu sú výsledky:
Hodnoty využité paměti by nebyly? Docela by mě zajímaly..
Výsledky využitia pamäte nemeral. Skúsim ho k tomu dokopať;)
- kravčo
- Člen | 721
Bernard Williams napsal(a):
Nazdárek,
provádím zrovna nějaké srovnání Frameworků a knihoven. Když přišlo na měření využité paměti, tak jsem se v případě Nette dost zhrozil. Hodnota využité paměti byla cca 6,7 MB!! Číslo se mi vůbec nelíbilo a tak jsem si řekl, že je možná špatně napsaný testovací script. Využitou paměť jsem tedy změřil na holém skeletonu z distribuce. Číslo nebylo o moc uspokojující: 5,5 MB! Pak mě napadlo, že velkou roli na tom bude mít asi minified verze. Paměť jsem tedy zase změřil jak v mé aplikaci, tak i ve skeletonu, ale nyní už bez minified verze a výsledek:
Můj script: 2,6 MB
Skeleton: 3,1 MB
Nebude to tým, že v prípade minified verzie sa načíta zakaždým celé Nette a v prípade komplet verzie vždy len časť, ktorá je potrebná? Minified teda načíta vždy 100% Nette čiže je pamäťovým stropom?
- Bernard Williams
- Člen | 207
kravčo napsal(a):
Nebude to tým, že v prípade minified verzie sa načíta zakaždým celé Nette a v prípade komplet verzie vždy len časť, ktorá je potrebná? Minified teda načíta vždy 100% Nette čiže je pamäťovým stropom?
Tady to ani nikdo nevyvracel. Mě jen udivilo, že je ta minified verze upřednostňovaná před normální, i když má o tolik větší paměťové nároky.. To rychlejší načítání mě tu chvílí nenapadlo..
- srigi
- Nette Blogger | 558
Bernard Williams napsal(a):
Tady to ani nikdo nevyvracel. Mě jen udivilo, že je ta minified verze upřednostňovaná před normální, i když má o tolik větší paměťové nároky.. To rychlejší načítání mě tu chvílí nenapadlo..
Najlepsie bude otestovat v ostrej prevadzke, co je pre aplikaciu lepsie – rychlejsie loadovanie frameworku ale vacsie naroky na pamat alebo naopak.
- kravčo
- Člen | 721
Bernard Williams napsal(a):
Tady to ani nikdo nevyvracel. Mě jen udivilo, že je ta minified verze upřednostňovaná před normální, i když má o tolik větší paměťové nároky.. To rychlejší načítání mě tu chvílí nenapadlo..
Z tvojho príspevku nebolo jasné, že si s týmto uzrozumený.
Môj osobný názor je, že keď Nette žerie konštantných ~7MB s ~jednou diskovou operáciou alebo ~3MB s tridsiatimi diskovými operáciami a overheadom autoloadingu, tak mám jasnú voľbu. Hostingy dávno ponúkajú viac, než 8MB pre beh php skriptov…
- pekelnik
- Člen | 462
Pokud použiješ nějakou opcode cache není disková operace ani jedna a v tu chvíli je to podle mě úplně jedno :)
Je to ostatně vidět i na tom testu…
Hlavním úkolem minified verze není vyšší výkon (to ani nejde) ale snazší deployment (protože 1 soubor).
A ještě poznámka:
Paměťové nároky jsou tak jako tak na možném minimu díky inteligentnímu autoloadingu v Nette.
Editoval pekelnik (9. 4. 2010 12:57)
- wdolek
- Člen | 331
jak je to s pouzitim treba eAcceleratoru? kdyz pouziji minified verzi, predpokladam, ze se to cele interpretovane ulozi do cache. jak se ale eAccelerator chova v pripade neminifikovane (je to spravny vyraz?) verze? i kdyz by pak byly cachovany jednotlive interpretovane skripty – nebude zas zpomalovat to, ze eAccelerator bude muset v cache hledat jednotlive jiz interpretovane kusy aplikace?
a jeste me tak napadlo – jaky ma vliv na beh aplikace uvadeni/neuvadeni
include
a require
v souborech? jsem lenivy
clovek – spoleham na RobotLoader
. neni to ale „chyba“ –
vzhledem k dosazeni optimalniho behu aplikace? (v teto souvislosti – pokud
bych se rozhodl v kazde tride pridat require
na soubor s jinou
tridou – musim includovat vzdy, kdyz je v prvni tride jen zminka o tride
druhe, nebo jen az v pripade, ze skutecne vytvarim instanci nebo volam nejake
staticke metody*)
*) mam na mysli
public function addFoo(Foo $foo)
vs
$foo = new Foo();
(podobne jako v .h
souboru jsou jen hlavicky a az v
.c
jejich implementace)
- bojovyletoun
- Člen | 667
Taky přispěji výsledky:
Pozoruji rozdíl na minified verzi, když je vyhozena vyjímka( red
screeen):
Dodám, že minified mám na php5.cz, a normal na lokálu. Debug zapnutý (jak
jinak:))
vyvolaná vyjímka
- Minifed: 800ms,14 MB
- Normal:,300ms, 5MB
Normální běh
- Minified 400MB, 7MB
- Normal 500ms, 6MB
PS: jaký je rámcově spotřebovaný čas aplikací (ten v panelu). Myslím
jednochá aplikace, mám jen 3 selecty z dibi sqlite.(samo o sobě 3ms) +
3 inputy a 2 submity +Vykreslení tabulky (pro přestavu PS: jaký je
rámcově spotřebovaný čas aplikací (ten v panelu). Myslím jednochá
aplikace, mám jen 3 selecty z dibi sqlite.(samo o sobě 3ms) + 3 inputy a
2 submity +Vykreslení tabulky (pro přestavu řádek osoba,
sloupec=města . a buňka tabulky je buĎ true nebo false = byla osoba ve
městě)+
nyní asi 30 osob a 6 měst+ ke každé bunce link na toggle)
tedy asoc pole osoba|mesta=bool
Edit: generování 180 linků nemá vliv…
Edit2 Měřeno na C2D 2Ghz.
PS: jde zrychlit načítání stránek při session->close()? prý souvislost s thread safe
Ještě dodám info o robotloader:
Vypnul jsem robot loader a ručně includoval asi 5 souborů (fomrMacros, dibi,
3 panely). A výsledky: žádný dramatický rozdíl
Editoval bojovyletoun (15. 11. 2010 1:35)