Portál AbcLinuxu, 25. dubna 2024 03:48
Frontendisti za pamäťové nároky prehliadačov môžu. Prehliadač len tak prenič-zanič veľa pamäte nežerie. Píšem ako frontend/backend developer, ktorý má občas chuť nejakému frontendistovi dať po hube.
Taká nedávna skúsenosť. Potreboval som aktualizovať gitlab. Mám ho vpsfree serveri, takže 4GB RAM je horný limit. Tak si teda veselo akutalizujem keď zrazu v jednom kroku havaruje. Príčina - webpack vyžral 3.3 GB RAM. Skúsil som vypnúť všetky služby, ktoré na serveri bežia, takže nakoniec som mal 3.6 GB RAM, ktoré webpack v pohode vyžral. Skúsil som teda vypnúť kompresiu a čo z toho vypadlo? 160 MB prvý chunk javascriptu. 160 MB na blbý gitlab, ktorý na frontende potrebuje asi toľko, koľko sa zmestí do 20kB normálne napísaného javascriptu. Z akého racionálneho dôvodu potrebuje bežná webová stránka 1723 závislostí?
Ešte aby som dokončil ako to dopadlo ... Takže som spustil webpack priamo, nie cez ruby, čo mi dalo k dispozícii dodatočných 300-400 MB RAM. Síce webpack veselo padal na OOM pri vyžratých 3.9 aj niečo GB RAM. Začal som sa teda hrať s NODE_OPTIONS, znížil som maximum pamäte, ktorú môže alokovať a dokázal som komprimovať javascript s 3.8GB RAM. Keď som znižoval max_old_space_size pod túto hranicu, tak už samotný node nebol schopný alokovať dosť pamäte. S odretými ušami, ale gitlab aktualizovaný a žiadnu ďalšiu aktializáciu už nezvládnem. Fyzicky. Psychicky. Hardvérovo. Prvý chunk skomprimovanéh javascriptu po tomto trápení má 600kB.
Prehliadač len tak prenič-zanič veľa pamäte nežerieAle to víš že žere, nebo proč si myslíš že zabírá takhle stránka v chromu 50 MB? Myslíš že to odpovídá samotnému obsahu - tzn. text a čtyři malé obrázky? about:blank má 16 MB, je to taky chyba frontendistů? A jinak popisuješ serverou stránku věci, to je v kontextu diskuze úplně jedno.
Chrome nepoužívam, ale vo firefoxe bez pluginov má táto stránka 7.6 MB.
Samozrejme pamäť nie je len o prenesenom texte a obrázkoch. Obrázky budú v pamäti väčšinou v nekomprimovanej forme, takže budú zaberať neporovnateľne viacej pamäte. Javascript zase pri budovaní objektov postupne cez prototypy bude mať v pamäti každý medziobjekt, pretože nemať ich v pamäti by znamenalo brutálne zníženie výkonu, takže js kľudne môže žrať 10-100x viac pamäte než samotné prenesené dáta. No a potom sú tu také pluginy napríklad. Od kedy máme web extensions spúšťajú sa pluginy pre taby samostatne, takže k spotrebe každého tabu sa musí prirátať aj spotreba pluginov. Naschval som preto teraz spúšťal firefox s prázdnym profilom, aby som videl spotrebu bez pluginov.
Obávám se, že tady funguje jakási obdoba Parkinsonova zákona. Na problém bylo zaděláno ve chvíli, kdy vzniklo něco jako pozice „frontendista“. Tito lidé se nemají jak jinak realizovat, takže vymýšlejí, jak co nejvíc zesložitit to, co dělají, a nabalit kolem toho co nejvíc opičáren.
Frontendista nemá podřízené, ale zato má JavaScriptové knihovny, CSS frameworky, buildovací nástroje, transpilery atd. Čím obskurnější a méně pochopitelný systém vytvoří, tím bude hůře nahraditelný. Kromě toho tím dosahuje pocitu uspokojení z „důležité“, „potřebné“ a „odborné“ práce.
Když se ho zeptáte, proč by ten web nemohl být jednoduše generovaný na serveru (a na klientovi se jen jednoduše vykreslit z HTML+CSS jako někdy zhruba před dvaceti lety), tak vám začne povídat o tom, jak ten starý způsob byl obrovsky neefektivní a nemoderní a že uživatelé potřebují něco jiného. Jistě je efektivnější posílat na začátku několik megabajtů obfuskovaného JavaScriptu. Další vtipná věc jsou různé mikrooptimalizace. Zažil jsem i vytáčené spojení 56 kbps modemem – i tehdy existoval web, dokonce i s obrázky, hudbou a někdy i virtuální realitou… a hlavně se spoustou užitečných informací. Od té doby se technologie výrazně posunuly, máme několikanásobně rychlejší linky, větší disky, rychlejší procesory, větší monitory… no prostě všechno. A přesto se dnes dělá spousta různých předčasných a mikro-optimalizací, které tehdy nikdo neřešil, protože se soustředil na to podstatné – sdělit ostatním pomocí webu nějakou informaci (web byl tehdy nástroj, nikoli cíl). A nakonec současný webař všechny tyto mikrooptimalizace zabije třeba tím, že v článku je video, člověk si ho pustí, budiž, ale pak si začne číst článek a mezi tím se stáhne a začne na tom místě nahlas přehrávat úplně jiné nesouvisející video. Pomyslným komínem vyletí zbůhdarma desítky megabajtů nežádoucího rušivého obsahu a uživatel je akorát naštvaný. Ale hlavně že se před tím podařilo „minifikovat“ (a znečitelnit) nějaký ten JavaScript (a ušetřit třeba nějaké kilobajty oproti prosté a transparentní kompresi GZipem).
# free -m total used free shared buff/cache available Mem: 64166 20222 35067 836 8876 43023 Swap: 32767 0 32767
Polevku nejis nozem[...]a prave proto kurzor "mysi" neovladam mysi ani touchpadem, ale trackpointem, kterej ze Apple NB ma trackpoint?
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.