Názor k článku Protokol HTTP/2 byl dokončen. Prohlížeče už ho podporují od Vít Šesták - Nejsem si jist, jestli je to určeno i...

  • Článek je starý, nové názory již nelze přidávat.
  • 2. 3. 2015 17:52

    Vít Šesták

    Nejsem si jist, jestli je to určeno i pro tento scénář, navíc to může být problematické a náchylné na chyby v implementaci na konkrétním webu a neodolné vůči chybám při přenosu. Rozvedu to:

    Scénář, na který to bylo připravené, je spekulativní stažení souborů, které prohlížeč ještě nemá nacacheované. Taky to je připravené odmítnout soubory, které prohlížeč už nacacheované má. Pokud ale server pošle prohlížeči soubor, který už nacacheovaný má, ale má jinou expiraci, nevím, co s tím prohlížeč udělá (co když to odmítne ještě před přečtením všech hlaviček?), ani jestli se tím specifikace zabývá.

    Udělat to dobře a udržet to aktuální je taky náročné. Znamená to udržovat nebo nějak získávat separátně nějaký seznam připojených souborů. A pokud to udělá špatně, což při úpravách není až tak těžké, tak si toho nemusí všimnout a může se to projevit třeba až v produkci náhodně některým uživatelům – třeba podle toho, v jakém pořadí procházejí stránky.

    Pokud dojde k chybě při přenosu (nebo třeba útočník úmyslně odstřelí připojení ve vhodnou chvíli – může ji odhadnout podle objemu přenesených dat apod.), může se stát, že část assetů se invaliduje a část ne. Pokud se pak podívám na nějakou část webu zcela z cache, bude to rozbité. (Vím, že toto je možná trošku edge case, ale chci ukázat, že to má problémy.)

    Naproti tomu assets fingeprinting je docela fool proof. Pokud ho udělám na svém webu špatně, pak to nebude fungovat (všimnu si hned), nebo se použije fallback na neverzovanou variantu, která se cachuje s must-revalidate (pak to bude fungovat, akorát to bude mít zbytečně větší latenci). Mám podporu ve frameworcích (aspoň Play! a RoR). Není potřeba mít redundantní seznam potřebných assetů. Funguje to i se staršími verzemi prohlížečů (nemusím pro ně vymýšlet nějaké extra řešení nebo dělat nepříjemný fallback na must-revalidate). Lze zajistit i to, aby v případě update webu během načítání stránky se web načetl správně. (Prostě si budu chvilku ještě pamatovat staré assety na starých URL.) A pokud budu chtít pro lidi s prohlížeči s HTTP/2 zrychlit první načtení stránky, mám stále tu možnost. Sice je to další práce, ale už není tak náchylná na chybu a není nutné vždy řešit všechny assety. Pokud na něco z toho zapomenu, jen se zvýší latence. A v některých případech (neblokující assety dole na stránce) to ani nebude moc vadit.