Hlavní navigace

Odpověď na názor

Odpovídáte na názor ke zprávičce Servo Engine už umí renderovat HTML tabulky vícevláknově.

  • 4. 8. 2024 1:20

    Filip Jirsák
    Stříbrný podporovatel

    OK, vysvětlím vám to ještě jednou. Pluginy do prohlížeče jsou nativní kód na platformě, kde je spuštěn prohlížeč. Je to normální proces, který nastartuje vedle prohlížeče, a může dělat absolutně cokoli, co jakýkoli jiný uživatelský proces v systému – komunikovat s hardwarem, volat API systému apod. K tomu se právě pluginy v prohlížečích používaly – pro komunikaci s hardwarem (třeba čipové karty, čtečky čárových kódů) nebo pro volání služeb OS (třeba systémové úložiště certifikátů). Plugin navíc může komunikovat s procesem prohlížeče a může vykreslovat svůj obsah do vymezeného obdélníku na webové stránce (normálně prostředky operačního systému).

    (Chrome později implementoval pro Windows jakýsi sandbox, který se snaží v uživatelském prostoru omezit proces pluginu. Smysl to mělo pro pluginy, které měly akorát něco zobrazovat v prohlížeči, neměly mít žádné jiné funkce – jako třeba Flash. Spouštět plugin komunikující s hardwarem v sandboxu by nedávalo smysl, protože to je přesně to, čemu by se ten sandbox snažil zabránit. Navíc ten sandbox rozhodně nebyl něco, čemu by se dalo stoprocentně věřit – prostě se ve Windows jeden uživatelský proces pokusil omezit jiný jím spuštěný proces. Na to Windows nikdy neměly bůhvíjaké prostředky, srovnatelné třeba alespoň s linuxovými kontejnery.)

    WebAssembly není samostatný proces, není to nativní kód a nemůže přímo komunikovat s ničím mimo prohlížeč. Jediné, co bude moci do budoucna je volat webová API prohlížeče (dnes může volat akorát JavaScriptové funkce). WebAssembly vám tedy neumožní (teď ani v budoucnu) v prohlížeči nic jiného, než co vám umožňuje JavaScript v prohlížeči. Nebudete moci komunikovat s hardwarem (jinak než přes API poskytovaná prohlížečem), nebudete moci volat systémové služby (pokud je nevystavuje prohlížeč přes nějaké API).

    Když je tu ten příklad s GPS. V době, kdy prohlížeče neměly Location API, jste si mohl napsat plugin, který by komunikoval třeba s nějakou externí bluetooth GPS. Nebo, když se lokační služby dostali do operačních systémů, mohl by ten plugin volat t yslužby operačního systému – ještě v době, kdy to neimplementovaly prohlížeče. S WebAssembly v prohlížeči nic takového neuděláte – nyní ani do budoucna. Jste odkázán na API poskytované prohlížečem, takže třeba na Location API nebo Web Bluetooth API – ale pokud prohlížeč takové API neposkytuje, z WebAssembly se nikam mimo prohlížeč ne dostanete.

    Lidi přestali používat NN i IE dávno předtím, než je firmy přestaly vydávat.

    To, čemu říkáte „glue vrstva“, jsou ve skutečnosti právě ta Web API. To jsou prostě standardy, které říkají, jaké funkce má prohlížeč v tom API poskytovat. A je to na prohlížeči, jak to zařídí. To Web API klidně může mít úplně jinou strukturu, než API operačního systému, které pro to prohlížeč použije, takže to vůbec nemusí být jednoduché lepidlo, které by propojilo JavaScript (nebo do budoucna WebAssembly) s funkcemi operačního systému. Někdy tam může být dost komplikovnaý převod.
    A nemusí to být ani služby operačního systému. V době, kdy operační systémy neměly standardní rozhraní pro lokační služby mohlo být klidně Location API v prohlížeči implementováno tak, že by se prohlížeč uměl napojit na různé externí GPS (třeba přes bluetooth, sériový port nebo USB) přes jejich proprietární protokoly a knihovny. A i kdyby se ty různé externí GPS chovaly r§zně, prohlížeč by je dovnitř JavaScriptu vystavil pořád přes to jednotné Location API.