13. 1. 2016

HTML je špatné

Všichni to používají, ale to neznamená, že je to dobré.

Spoustu věcí používáme tak běžně a rutinně, že nám na tom ani nic nepřijde divné. Například email, usb konektory, html... A přitom divné jsou. Špatné, nelogické, nepraktické, zastaralé a mohly by být lepší.

První špatná věc - prohlížeče si dělají co chtějí

HTML kód si každý prohlížeč vykresluje jak se mu zachce. To je úplně do očí bijící hloupost. Proto tu máme šílená zadání, jako "optimalizuj mi zobrazení html stránky pro prohlížeče IE7, IE8, IE9 IE10, IE11, Edge, Opera, Firefox, Safari, Chrome".

Je to naprosté plýtvání vším a je to úplně postavené na hlavu. Webové stránky a aplikace by se měly dělat tak, aby byly udělány správně. A ne je hackovat tak, aby v každém prohlížeči fungovali tak, jak mají a kolikrát to ani udělat nejde, nebo na to prohlížeč nenabízí možnosti a tak se musí hackovat hacky.

Přitom to všichni dělají. Pěkně si nás výrobci prohlížečů vychovali, jen co je pravda. Správně by totiž měly být jedny stránky, správně udělané a autor prohlížeče by se měl snažit, aby ten jeho prohlížeč zobrazoval stránky tak jak má a když ne, tak on by měl opravit prohlížeč. Ne my opravit stránky, respektive je ohackovat. Ale tak to nefunguje, protože přijde zákazník a řekne "vy máte rozbité stránky" a místo abychom my, programátoři a kodeři řekli "ne, to vy máte rozbitý prohlížeč, použijte něco, co správně funguje" tak řekneme "ano, hned to opravíme a upravíme pro deset různých prohlížečů, je to naše chyba".

To je jeden problém, ale ten koření v tom, jak prohlížeče fungují a to zase koření v minulosti. Zkrátka prohlížeč si vykresluje co chce a jak chce, nebo použije nějaký engine a pak to různě vylepšuje. Všichni známe těch asi pět různě pojmenovaných CSS hodnot s prefixy pro různé prohlížeče, které dělají tu samou věc, ale jen pro svůj prohlížeč. Je to normální? Není. Je to bordel.


Jak by to teda mělo fungovat správně? Správně by měl být jeden jediný základ toho, jak se má html chovat a zobrazovat. Tenhle jediný základ by měl být celý engine, který by ostatní prohlížeče používaly a externě si ho stahovali, pokud by vyšla nová verze - něco jako plugin. Autor by mohl optimalizovat výkon, nebo přidávat vlastnosti okolo, ale rozhodně by nikdy neměl hrabat do toho, jak se html zobrazuje a ani přidávat žádné vlastní vykreslovací vychytávky.

Tím by se zajistilo, že se všude bude html kód zobrazovat stejně. A pokud by byla někde chyba, byla by všude, dokud by se v centrálním enginu neopravila. Stejně tak by se nové vlastnosti mohli začít používat ihned v den vydání nové verze enginu a ne až za deset let, kdy lidi pomalu přejdou ze starých prohlížečů na nové a mezitím se budou dělat dvoje stránky pro staré prohlížeče a pro nové s novou vychytávkou.

Byl by konec hacků, více času na jiné věci, více spokojených lidí. Stávající systém jen brzdí vývoj a plodí chyby ve funkčnosti zobrazení stránek a i v jejich fungování, viz různé verze javascriptu (to je to samé v bledě modrém) nebo různá funkčnost javascriptu v různých prohlížečích.

Navíc to není udržitelné, protože budou pomalu vznikat další a další prohlížeče a jednou prostě už nebudou peníze na to, aby se jedny stránky optimalizovaly pro sto prohlížečů najednou.

Byl tady podobný systém například pro Flash. To byl plugin, který fungoval všude stejně a když vyšla nová verze, uživatel si ji stáhl a nainstaloval. Všichni měli stejnou verzi, všichni mohli používat nejnovější vlastnosti a nikdo nemusel flash aplikace optimalizovat pro deset prohlížečů najednou.

Druhá špatná věc - HTML je moc složité a neumí ani zarovnat text

Umí v něm každý udělat jakoukoliv primitivní stránku, protože je tak jednoduché a tolerantní k chybám. Ale přesto je moc složité a nedokonalé.

Složité je v tom, že má spoustu zbytečných tagů, nejen z minulosti. Téměř každý tag se dá přetypovat na jiný, ale přesto se spousta z nich chová odlišně. Když chci udělat tlačítko s odkazem na jinou stránku, proč mám řešit úplně jinak to, když tlačítko udělám jako odkaz (<a href ...), jako button (<button ...) nebo třeba jako div (<div ...)? A proč musím řešit spoustu banálních problémů, jako je třeba obyčejné zarovnání textu vertikálně na střed?

Proč si prostě nemůžu říct, že tohle (kus textu, obrázek, video, animace, zkrátka cokoliv) teď bude fungovat jako odkaz a hotovo? A že to tak bude fungovat jednotným stylem a ne že každé budu řešit jiným způsobem a potom to ještě hackovat pro mobily jinak?

Html by bylo lepší ještě zjednodušit, aby pracovalo hlavně s objekty a ty objekty měly vlastnosti. Takže bych měl objekt, ten bych mohl animovat, umisťovat, zarovnávat, použít jako pozadí, jako odkaz, jako cokoliv a kdekoliv. A ne řešit, jestli ve <spanu> nesmí být <div>.

Krom toho by html také měl podporovat jakýsi integrovaný ajax, a ne stále znovu, po každém kliknutí, načítat kompletní stránku i když se změnila jen minimální část, převážně jen text. Snadno a v samotném html by mělo jít načíst json ze serveru a ten promítnout do tagů ve stránce.

Žádné komentáře:

Okomentovat