čtvrtek 5. března 2015

Miluji datově nenáročné aplikace a mnozí to nechápou. :(

To víte, pamatuji si ještě na doby, když se pro komunikaci dvou počítačů používal tzv. "kabelový přenos". To se data zkrátka nahrála na diskety, ty se vložily do kabely a k druhému počítači se zajelo autem. Byly to krásné časy - už jenom z toho důvodu, jak špatně se zálohovalo a hlavně protože nebyl internet (aspoň tedy pro mě běžně přístupný).

V té době jsem začínal s programováním a někdy v 6. třídě základní školy jsem sestavil svoje první webové stránky, které se však nikdy nedostaly do internetu a do dnes leží někde na tom porouchaném harddisku. A víte proč? Protože internet ještě nebyl takovou samozřejmostí a můj tehdejší počítač dokonce ani neměl síťovou kartu. No, byly to těžké časy, za dnešní světosíť jsem rád.

Největší zlom ale nastal ve chvíli, když jsem si pořídil svojí první pořádnou kalkulačku s monochromatickým pixelovým displayem (rozlišení je tuším 128 x 64 pixelů) a s možností programování. Tehdy jsem byl typický nenažraný uživatel, který chtěl mít stovky GB na disku. Objevil se ale problém, ta kalkulačka měla "jen" 4 KB paměti - tehdy jsem na to hleděl, jako na úplnou katastrofu (vždyť se mi tam nic nevejde), ale opak byl pravdou.

Postupně jsem při psaní kódu začal přemýšlet nad jeho technickou podstatou a více jsem se zanořil do problémů algoritmizace. Při každé nové funkcionalitě jsem se zamýšlel zhruba v tomto stylu: "Je tam vážně potřeba další globální proměnná? Nešlo by nějaká data zahodit?". Takový přístup byl sice za začátku opravdu namáhavý, ale brzy se ukázalo, že i relativně slušně vybavený program, lze vměstnat na méně než kilobajt a generátor (vykreslovač) grafů včetně jednoduché kalkulačky (pro výpočty) se vejde pod 500 bajtů.

S rostoucím výkonem počítačů a s čím dál většími disky jsem se rozhodl investovat a pořídil jsem si 1 TB disk se slovy, že to stejně nikdy nezaplácnu; a vskutku, po 3 letech denního používání jsem dohromady zapsal asi 3 GB dat, víc jsem toho vyprodukovat nezvládl (vždyť texty zabírají úplné minimum a snadno se komprimují).

Štve mě plýtvání s daty

Co mě ale štve je fakt, že většina dnešních vývojářů plýtvá jak s daty, tak s výkonem. To, že se napíše zaprasený algoritmus si většina moderních "programátorů" akorát kompenzuje tím, že přidá více hardware. To ale není správná cesta. Sice takový přístup může být dočasně výhodnější (protože špatně napsaný program je hotový mnohem dříve, než ten dobrý), ale z dlouhodobého hlediska to je katastrofa. Stačí jen založit špatně tabulku v databázi. Ze začátku to je sranda, ale jakmile se nahromadí pár stovek tisíc záznamů (nebo i milionů), tak není problém, čekat na výsledky hledání i 2 sekundy.

Já jako poučený programátor ale v tomto případě hledím dopředu a přijde mi to jako samozřejmé. Prohledat 1 milion záznamů by se mělo stihnout pod 1.5 ms, nebo snad ne?

jQuery

Nejvíc mě deptá právě jQuery. Chápu, že za tuto část článku mi akorát vynadáte v komentářích, ale což, stejně to sem chci napsat.

Mnoho lidí argumentuje, že jQuery usnadňuje práci a že je úspornější, než čistý JavaScript. Myslíte si to také? Já rozhodně ne, nebo aspoň často ne.

Často vidím situaci, kdy někdo na stránce potřebuje udělat nějakou blbost, třeba vysouvací menu, nebo tahací okénko. V jQuery se toto řeší jediným řádkem, v čistém JS jich je potřeba asi 20. Odsud asi táhnou všechny ty srovnávání velikosti.

Když si to ale vezmete z technického hlediska. Programátor v tu chvíli sice ušetřil 20 řádků v jeho kódu, nicméně každý uživatel musel načíst nějaký externí script (takže musel navázat další request, na který se muselo čekat), poté musel přenést asi 500 KB a následně celý velký script zpracovat u sebe v prohlížeči, což v případě pomalejšího telefonu může způsobit například padání prohlížeče. A to se bavíme jenom o vysouvacím menu a jezdícím okénku.

Vážně, nemám takový přístup rád. Často jsem odbíjen slovy: "data neřeš, dneska má každý rychlý internet a těch pár KB navíc FUPko nevyžere.". No, co na to říct. FUP sice nějaký čas vydrží, ale umíte si představit tu krásu, kdyby všichni psali scripty skutečně na míru konkrétnímu problému? Pak by se přenášelo jen to nejnutnější a FUPko 500 MB by bylo naprosto optimální i pro náročného uživatele.

Já osobně se občas připojuji s vyčerpaným FUP limitem (takže mám rychlost kolem 8 kb/s) a je vážně cítit, který web je udělaný správně (třeba mnoho služeb Googlu), a který špatně (typicky české zpravodajské servery). Jako uživatel se pak skutečně rád vracím na stránky, které se i tak načítají rychle a vejdou se na tu pomyslnou disketu ještě s velkou rezervou.

A co vy? Taky píšete jako prasata, jak se vám to zrovna hodí, nebo přemýšlíte nad kódem tak, abyste z něj vyčerpali maximální rychlost (a přitom nevyžrali baterku) a zároveň minimální datovou velikost?