Autor Zpráva
iiic
Profil
Ahoj,

Používáte někdo nějaké knihovny pro načítání javascriptových souborů?
Známý byl třeba head.js , pak Modernizr se svým Modernizr.load(…); a určitě ještě spousty dalších podobných.

Slibují zajímavou věc, kterou je asynchronní paralelní načítání javascriptových souborů
a díky tomu slušné zrychlení načítání webu.

Navíc jsou tam bonusy jako řešení různých cross-browser odlyšností.
Řešení bugu s novými HTML5 elementy ve starších IE (inline/block zobrazení) a další.

Pak věci jako testování podpory JS vlastností rodiny HTML5 a spousty a spousty featur,
které už zase tak moc nepotřebuji.



Tyhle věci vypadají zajímavě a užitečně a přesto je většina webů nepoužívá.
Tak se chci zeptat proč?

Neslyšeli o nich? Nestojí jim to za tu práci je použít? Nabízí až moc funkcí když z nich
potřebuji třeba jen jednu konkrétní? Něco úplně jiného?
Joker
Profil
iiic:
Tyhle věci vypadají zajímavě a užitečně a přesto je většina webů nepoužívá.
Tak se chci zeptat proč?

Tak v mém případě:

Slibují zajímavou věc, kterou je asynchronní paralelní načítání javascriptových souborů
a díky tomu slušné zrychlení načítání webu.

U většiny mých projektů si neumím představit, v čem by to zrychlení spočívalo.

Například Péhápko.cz obsahuje celkem čtyři JS soubory, které se načítají až na konci stránky a dohromady mají 65,5 kB, z čehož 95 % tvoří jeden (JUSH) a zbytek ty další tři.
Skoro bych se vsadil, že přilinkování 12kB skriptu to může leda zpomalit.

Řešení bugu s novými HTML5 elementy ve starších IE (inline/block zobrazení)

To není „bug“, prostě ty nové elementy nejsou ve starších prohlížečích podporované, protože v době vzniku těch prohlížečů neexistovaly.
Na to je ale snadné řešení fungující všude: Nepoužívat ty nové elementy :-) Jejich použití většinou nemá žádný jiný efekt, než problémy s kompatibilitou.

a spousty a spousty featur, které už zase tak moc nepotřebuji.

Tak právě věci, které nepotřebuji, nepotřebuji ani připojovat ke stránce :-)


Dále může být výkonnostní problém. Ty různé frameworky sice odstraňují různé nekompatibility, ale často je volání jejich metod daleko pomalejší, než volání nativních metod a ve spoustě případů odstraňují nekompatibility, které se mého použití netýkají.

Jeden čas jsem si u několika projektů prošel tím, že jsem vesele nasadil jQuery a následně skripty předělával zpátky na nativní JS, protože s jQuery to bylo pomalé.


Možná ještě jedna poznámka:
Jinak se ale použití doplňkových JS nebráním, pokud v tom vidím nějaký smysl.

Na druhou stranu pokud se mi líbí třeba tři metody nějakého frameworku, je výhodnější si z toho frameworku vykuchat ty tři metody, než kvůli nim připojovat celý framework.
Chamurappi
Profil
Reaguji na iiice:
Na jednom větším webu jsem si napsal vlastní systém na asynchronní načítání dalších skriptů. Trochu mě štve, protože hodně věcí dělám raději synchronně, neb jde o věci, které prostě mají fungovat hned, nebo potřebují nějak vzájemně reagovat a ten nejistý časový rozměr všechno trošku komplikuje.
Na druhou stranu tyto věci mají být jen na některých stránkách a třeba jen někdy, takže je zbytečné tahat jejich desítky kB vždy a všude. Obtížně se vymezují situace, kdy potřeba jsou a kdy ne, může nastat i doba, kdy se nebudou používat vůbec => dynamické načtení jen v případě potřeby je jednoznačně přínosem. Ale cizí knihovna by mi s tímto patrně nepomohla.

Slibují zajímavou věc, kterou je asynchronní paralelní načítání javascriptových souborů
Asynchronně paralelně jdou načítat i bez knihovny, ne? Sice s atributy async a defer nemám moc zkušeností, ale doufal bych, že nějak fungují.

Navíc jsou tam bonusy jako řešení různých cross-browser odlyšností.
Bonusy jsou špatné. A odlyšnosti děsivé :-)
Měl bych se spoléhat na to, že knihovna důsledně řeší něco navíc, kvůli čemu nebyla stvořena? Co když to v příští verzi řešit přestane? Nebudu pak na jejích bonusech závislý i tam, kde bych její hlavní náplň práce nepotřeboval? Co když stejnou věc budou chtít řešit i jiné knihovny, nepomlátí se to?

Řešení bugu s novými HTML5 elementy ve starších IE (inline/block zobrazení)
Vůbec nejde o inline/block, starší Explorer je vnímá jako neznámé prázdné (nepárové) elementy a neumožňuje jejich stylování.
Mnohem účinnější způsob, jak se tohoto problému zbavit, je nevytvářet ho, tedy používat jen podporované bloky.

Tyhle věci vypadají zajímavě a užitečně a přesto je většina webů nepoužívá. Tak se chci zeptat proč?
Na to nevím, jak odpovědět, těžko říct, které weby máš na mysli.
Je hodně webů, které jsou dělané konzervativně, fungují rychle a všude, žádné problémy si nevytvářejí a žádné tedy nepotřebují vyřešit. Zlomek z nich si svoji malou hrstku much umí zkrotit jinak.
Pak je také dost webů, kde si autor mnohokrát místo uvážlivého „potřebuji tohle?“ řekl opojně „jé, takhle to chci taky!“ a je sám se svým moderně morbidně stvořeným slepencem nekriticky spokojený, nějaká rychlost načítání ho nezajímá, kompatibilita s prohlížeči také ne.
Radek9
Profil
iiic:
Tomu asynchronnímu načítání JS souborů jsem nikdy moc nepřišel na chuť (tedy kromě JSONP). Na většinu projektů používám Browserify, kde se prostě všechno sloučí do jednoho souboru a zminifikuje. Díky kešování se to potom celé stáhne jen jednou. A nikdy s tím nebyl problém. Sám ve své knihovně asynchronní načítání souborů mám, ale ještě nikdy jsem ho vlastně nepoužil.

Řešení bugu s novými HTML5 elementy ve starších IE (inline/block zobrazení) a další.
Naposledy jsem použil ty nové elementy na soutěži, kde to bylo výslovně v zadání. Moc výhod u nich nevidím, spíš právě nevýhody způsobené nepodporou. Nechci, aby se stránka rozpadla, pokud nepojede JavaScript.
iiic
Profil
[#4] Radek9

Rozumím tomu dobře, že Browserify je javascript, který provádí minimalizaci a sloučení jiných javascriptů? Jak to pak ukládá/cachuje? čistě jen u klienta v prohlížeči? Nebo je to taková ta věc, jak před nasazením webu musí spustit, provede si to to svoje a výsledný soubor s minimalizovaným a sloučeným výstupem si někam uložím já sám?
Radek9
Profil
iiic:
Browserify samo o sobě sloučí soubory do jednoho. Jednotlivé soubory se načítají pomocí funkce require dle CommonJS specifikace. Minifikace se pak ještě musí provést nějakým dalším nástrojem (UglifyJS nebo Closure Compiler), ale to už je maličkost, pokud je to zautomatizované.

Ano, keš jsem myslel u klienta. Do keše se to většinou ukládá samo, pokud server neposílá no-cache hlavičku. Potom při zmeně souboru stačí jen změnit např. query string u zdroje:
<script src="bundle.js?v=1.2.3"></script>

Úplně nevím, jestli jsem správně pochopil poslední otázku, ale snad ano. Tohle všechno se musí vygenerovat pomocí těch nástrojů před nasazením webu. Jak jsem ale říkal, dá se to všechno hezky zautomatizovat buď pomocí nějakého BAT souboru, nebo task runnery typu Grunt/Gulp.
iiic
Profil
Radek9:
Úplně nevím, jestli jsem správně pochopil poslední otázku, ale snad ano. …“ Přesně tohle mě zajímalo, děkuji

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0