Miten paikallinen tiedostonkäsittely selaimessa toimii
Jos mitään ei lähetetä palvelimelle, mikä työn oikeasti tekee – ja missä?
Mitä ”paikallinen” tässä tarkoittaa
Tavanomainen verkkomuunnin on sivusto, jossa on latauspääte. Tiedostosi lähetetään koneelle, jota et hallitse, käsitellään siellä, säilytetään jonkin aikaa ja tarjotaan takaisin ladattavaksi. Paikallinen käsittely poistaa tuon lauseen keskiosan: tiedostosi lukeva koodi ajetaan siinä selaimen välilehdessä, joka sinulla on jo auki, omalla suorittimellasi, ja tulos kirjoitetaan takaisin omalle levyllesi.
Sivusto haetaan yhä verkosta – HTML, tyylitiedostot, skriptit ja WebAssembly-moduulit saapuvat kaikki palvelimelta kuten millä tahansa verkkosivulla. Ero on suunnassa. Ohjelmakoodi tulee alas; tiedostosi ei mene ylös.
Selaimessa on osat jo valmiina
| Ominaisuus | Mitä se tarjoaa |
|---|---|
| File- ja Blob-rajapinnat | Lukevat käyttäjän valitseman tai raahaaman tiedoston tavut ilman lomakkeen lähetystä |
| Web Workers | Ajaa raskaan työn taustasäikeessä, jotta käyttöliittymä pysyy reagoivana |
| WebAssembly | Ajaa käännettyjä C-, C++- tai Rust-koodekkikirjastoja lähes natiivinopeudella |
| Canvas ja OffscreenCanvas | Purkavat, piirtävät, skaalaavat ja pakkaavat kuvia uudelleen |
| WebCodecs | Antaa pääsyn selaimen omiin laitteistokiihdytettyihin videoenkoodereihin ja -dekoodereihin |
| WebGPU | Ajaa mallien päättelyä ja rinnakkaista pikselityötä näytönohjaimella |
| File System Access | Kirjoittaa tuloksen suoraan käyttäjän valitsemaan paikkaan siellä, missä tuki on |
Mikään tässä ei ole eksoottista. Kyseessä on sama alusta, joka pyörittää taulukkolaskentaa, suunnittelutyökaluja ja pelejä välilehdessä. Ainoa epätavallinen päätös on kieltäytyä lisäämästä siihen palvelinta.
Reitti, jonka tiedosto kulkee
- Valitset tiedoston. Selain antaa sivulle kahvan siihen – ei kopiota vaan viittauksen.
- Sivu lukee ensimmäiset tavut tunnistaakseen todellisen tiedostotyypin sen tunnisteesta sen sijaan että luottaisi päätteeseen.
- Se arvioi, paljonko muistia työ vaatii, ja kieltäytyy työstä tai laittaa sen jonoon, jos määrä ylittää sen minkä laite voi turvallisesti tarjota.
- Tavut siirretään Web Workeriin. ArrayBufferin siirto vaihtaa omistajuutta eikä kopioi sitä, joten suuri tiedosto ei ole muistissa kahteen kertaan.
- Workerin sisällä WebAssembly-koodekki tai alustan rajapinta hoitaa varsinaisen purkamisen ja pakkaamisen.
- Tulos palaa tavuina, kääritään Blobiin ja tarjotaan sinulle ladattavaksi tai kirjoitetaan valitsemaasi paikkaan.
- Blobin väliaikainen URL-osoite mitätöidään ja puskurit vapautetaan.
Miksi WebAssembly on se osa, joka muutti asetelman
Kuva- ja videokoodekit ovat vuosikymmenten huolellisesti optimoitua C-koodia. Niiden kirjoittaminen uudelleen JavaScriptillä ei ollut koskaan realistista. WebAssembly on siirrettävä binäärinen käskymuoto, jota selaimet suorittavat hiekkalaatikossa lähes natiivikoodin nopeudella, mikä tarkoittaa että nuo olemassa olevat kirjastot voidaan kääntää ja toimittaa selaimeen sellaisinaan.
Hiekkalaatikko on yhtä tärkeä kuin nopeus. WebAssembly-moduulilla ei ole automaattista pääsyä tiedostojärjestelmääsi, verkkoosi tai muihin välilehtiisi. Se näkee sen muistin, jonka sivu sille antaa, eikä mitään muuta. Haitallinen tai vain buginen koodekki ei voi lähteä harhailemaan ja lukea jotain, mitä sille ei annettu.
Mikä käyttää yhä verkkoa, ja miksi se ei ole tiedostosi
Verkosta saapuu kolme asiaa: itse sivu, avaamasi työkalun moottori ja – taustanpoistoa varten – mallin painot. Kaikki kolme ovat FileSlimmerin omia staattisia resursseja, jotka haetaan FileSlimmerin omasta originista ennen kuin yhtäkään sinun tavuistasi luetaan. Ne ovat latauksia, ne ovat välimuistitettavissa, ja ensimmäisen käyttökerran jälkeen ne voidaan tarjota selaimen omasta välimuistista ilman verkkoa lainkaan.
Kaikki sen jälkeen on paikallista. Moottorit saavat tiedoston tavut vain sivulta postMessage-kutsun kautta; niille ei koskaan anneta URL-osoitetta, johon lähettää jotain, ja Content Security Policy rajoittaa sitä, minne sivu voisi ylipäätään yhdistää, vaikka jokin koodi yrittäisi.
Vaihtokaupat suoraan sanottuna
| Näkökohta | Selaimessasi | Palvelimella |
|---|---|---|
| Minne tiedostosi menee | Ei minnekään | Koneelle, jota et hallitse |
| Nopeus | Sen mukaan mihin laitteesi pystyy | Sen mukaan mistä ylläpitäjä on maksanut |
| Hyvin suuret tiedostot | Rajana selaimen muisti | Rajana ylläpitäjän asettamat rajat |
| Toimii ilman verkkoa | Kyllä, kun moottori on välimuistissa | Ei |
| Eksoottiset muodot | Vain se, mikä kääntyy WebAssemblyksi | Kaikki, minkä ylläpitäjä asentaa |
| Tuhannen tiedoston erä | Laitteen rajoittama | Yleensä sopivampi |
Paikallinen käsittely ei ole kauttaaltaan parempi. Se on parempi silloin, kun tiedosto on yksityinen, kun laite on riittävän tehokas ja kun työ mahtuu muistiin. Palvelin on parempi silloin, kun käsiteltävää on paljon enemmän kuin yksi kone pystyy pitämään sisällään. On hyödyllisempää olla selvillä siitä, kummassa tilanteessa on, kuin väittää yhden lähestymistavan voittavan kaikkialla.
Mitä tässä ei väitetä
Tämä on lausunto siitä, mitä tämä sovellus tekee. Se ei ole väite selainlaajennuksistasi, jotka voivat lukea minkä tahansa avaamasi sivun sisällön, eikä käyttöjärjestelmästäsi, joka voi tarkastella mitä tahansa koskemaasi tiedostoa, eikä verkko-operaattoristasi, joka näkee että kävit sivustolla. Ne ovat minkä tahansa verkkosivuston ulottumattomissa, ja työkalu joka väittää muuta liioittelee.
Väite on kapea ja tarkistettavissa: valitsemasi tiedostot käsitellään paikallisesti tässä selaimessa, eikä FileSlimmer lähetä niitä palvelimelle. Seuraava opas kertoo, miten sen voi todeta itse sen sijaan että uskoisi sen.
Työkalut tähän
Lähteet
- W3C — File API
- W3C — WebAssembly Core Specification
- WHATWG — HTML Standard, Web Workers
- W3C — WebCodecs