Privacy & Security

Kodėl vaizdų apdorojimas naršyklėje yra laimėjimas privatumui

Kaip šiuolaikinės web API leidžia kurti iš tiesų privačius vaizdų įrankius — ir ką tai reiškia žmonėms, kurie jais naudojasi.

The Wux Webtools Team The Wux Webtools Team 4 min skaityti
Editorial illustration of a closed laptop with a small lock icon, soft green and slate palette
Turinys
  1. Numatytoji prielaida yra klaidinga
  2. Ką iš tikrųjų reiškia „kliento pusėje“
  3. Kodėl tai svarbu praktiškai
  4. Kur vis dar slypi kompromisai
  5. Pirmasis paleidimas yra sunkesnis
  6. Ribą nustato naudotojo aparatinė įranga
  7. Negalite apdoroti paketų tarp naudotojų
  8. Kai kurioms operacijoms reikia serverio
  9. Nedidelis etinis aspektas
  10. Kur judėti toliau

Numatytoji prielaida yra klaidinga

Didžiąją pastarųjų dvidešimties metų dalį bet koks sudėtingesnis darbas su vaizdu internete reiškė jo įkėlimą į serverį. Konvertuoti HEIC nuotrauką, pašalinti jos EXIF metaduomenis, sugeneruoti favicon — kiekvienas iš šių įrankių istoriškai veikė už multipart formos. Naudotojas spustelėdavo upload, failas keliaudavo per viešąjį internetą, o kažkur esantis serveris atlikdavo darbą.

Techniškai tokia numatytoji tvarka nebėra būtina. Naršyklės jau prieš kelerius metus įdiegė API, leidžiančias visai grandinei veikti lokaliai:

  • <canvas> and OffscreenCanvas darbui pikselių lygiu
  • createImageBitmap() greitam dekodavimui už pagrindinės gijos ribų
  • File and Blob įkeltims skaityti jų niekur nesiunčiant
  • WebAssembly bibliotekoms, tokioms kaip libheif, libwebp ir ffmpeg
  • Web Workers kad UI išliktų reaguojanti, kol vyksta sunkus darbas

Jei tai sujungsite, failas niekada nepalieka įrenginio. Serveris jo niekada nemato. Nėra ko registruoti žurnaluose, nėra kam nutekėti, nėra ko pareikalauti teismo tvarka.

Ką iš tikrųjų reiškia „kliento pusėje“

Verta būti tiksliems, nes daugelio „privačių“ įrankių rinkodaros tekstai yra migloti.

Įrankis iš tiesų veikia kliento pusėje tada, kai, įkėlus puslapį, jokia failo turinio dalis niekada nekeliauja į serverį. Pats puslapis įkeliamas iš serverio (HTML, JavaScript, galbūt WebAssembly modulis). Po to jūsų failas patenka į naršyklės atmintį ir ten lieka, kol uždarote kortelę.

Įrankis nėra kliento pusės, jei jis:

  • POSTs failą į /api/... endpoint
  • Siunčia miniatiūrą ar peržiūrą į serverį
  • Kreipiasi į analitikos endpoint su failo metaduomenimis (matmenimis, pavadinimu, hash)
  • Nukreipia failą per trečiosios šalies CDN, kuris grąžina apdorotą URL

Jūsų naršyklės devtools tinklo skydelis pasako tiesą. Atidarykite jį, įmeskite failą ir patikrinkite, kas įkeliama. Jei matote, kad jūsų failo pavadinimas ar failo dydis keliauja lauk, įrankis nėra toks privatus, kaip teigia.

Kodėl tai svarbu praktiškai

Trys žmonių grupės tyliai laimi, kai vaizdų apdorojimas persikelia į naršyklę.

Žurnalistai, aktyvistai ir tyrėjai dirba su šaltinių medžiaga, kurios nutekėjimas galėtų būti pavojingas. EXIF metaduomenyse gali būti įrenginio, kuriuo padaryta nuotrauka, GPS koordinatės. Naršyklėje veikiantis EXIF šalinimo įrankis reiškia, kad originalus failas niekada nekeliauja tinklu.

Reguliuojamos įmonės — sveikatos priežiūros, finansų, teisės — kitu atveju turėtų sudaryti duomenų tvarkymo sutartį su tuo, kas valdo įrankį. Statinis puslapis, kuris darbą atlieka lokaliai, neturi pasirašytinos DPA, nes nėra duomenų tvarkytojo.

Visi kiti gauna akivaizdžius privalumus: greitesnį rezultatą (nereikia laukti įkėlimo), nėra failo dydžio ribų, kurias nustato hostingo sąskaita, ir nėra nesėkmės, kai serveris neveikia.

Kur vis dar slypi kompromisai

Kliento pusė nėra magija. Yra realių kaštų, kuriuos verta apgalvoti prieš pasirenkant tokį kelią konkrečiai problemai.

Pirmasis paleidimas yra sunkesnis

WebAssembly paketas HEIC dekodavimui užima kelis šimtus kilobaitų. Į WASM sukompiliuotas ffmpeg užima kelis megabaitus. Pirmasis apsilankymas sumoka šią kainą. Talpykla padeda, o code-splitting padeda dar labiau — įkelkite tik tą codec, kurį naudotojas iš tikrųjų pasirinko.

Ribą nustato naudotojo aparatinė įranga

200 megapikselių RAW failas biudžetiniame telefone pritrūks atminties gerokai anksčiau nei serveryje. UI sąžiningai parodykite, kas tame įrenginyje realu.

Negalite apdoroti paketų tarp naudotojų

Serverio pusės apdorojimas gali pašalinti dubliavimą ir paskirstyti sąnaudas. Jei milijonas naudotojų konvertuoja tą patį stock image, serveris gali jį apdoroti vieną kartą. Kliento pusėje tai bus padaryta milijoną kartų. Daugumai asmeninių įrankių darbo krūvių tai yra gerai — darbas vis tiek unikalus — bet verta tai žinoti.

Kai kurioms operacijoms reikia serverio

Atvirkštinei vaizdų paieškai reikia indekso. Turinio moderavimui reikia modelio, kuris per didelis siųsti naudotojui. Viskam, kas lygina jūsų failą su jums nepriklausančiu corpus, reikia backend.

Nedidelis etinis aspektas

Jei jūsų įrankis iš tiesų veikia kliento pusėje, aiškiai tai pasakykite ir įrodykite. Pateikite nuorodą į source, parodykite į tinklo skydelį, paaiškinkite, kas kur veikia. Tokios frazės kaip „mes nesaugome jūsų duomenų“ nieko nereiškia be architektūros, kuri tai pagrįstų — kiekvienas serverio pusės įrankis, iš kurio kada nors nutekėjo klientų duomenys, sakė lygiai tą patį ir tuo metu tai turėjo omenyje.

Galioja ir priešingai. Jei jūsų įrankis yra serverio pusės, neapsimeskite kitaip. Naudotojai jau atpažįsta šį modelį, o pasitikėjimo praradimas, kai jie jus pagauna, yra negrįžtamas.

<!-- tool-cta:start -->

💡 Išbandykite tai: Pamatykite kliento pusės apdorojimą veikiant su Image Compressor, kuris sumažina vaizdus visiškai jūsų naršyklėje, todėl niekas niekada neįkeliama į serverį.

<!-- tool-cta:end -->

Kur judėti toliau

Jei šiandien kuriate nedidelį vaizdų įrankį, pagal nutylėjimą rinkitės kliento pusę ir serverio imkitės tik tada, kai turite konkrečią priežastį. Naršyklė jus nustebins, kiek toli gali nunešti darbą — o žmonės kitame tinklo ryšio gale tyliai padėkos už baitus, kurie niekada nepaliko jų kompiuterio.

Diagram showing a browser-only image processing flow where the page loads once, then the file stays in browser memory and never reaches a server
InfographicWhat truly client-side image processing looks like — A genuinely client-side tool loads code first, then keeps the file entirely inside the browser
Two-column comparison of genuine client-side tools versus tools that still send files, thumbnails, or metadata to servers
InfographicClient-side vs fake-private processing — The network panel is the simplest test: if file contents, thumbnails, or metadata leave the browser, it is not fully client-side
Checklist-style visual summarizing privacy and speed benefits of browser processing alongside cold start, hardware, batching, and backend limits
InfographicWhere browser-side processing wins — and where it doesn't — Browser-side tools remove upload risk, but cold starts, device limits, and corpus-scale tasks still define the boundary

Dažnai užduodami klausimai

Ar apdorojimas kliento pusėje visada privatesnis nei serverio pusėje?
Jei įgyvendinta teisingai, taip — failas niekada nekeliauja tinklu, todėl jo negalima perimti, užregistruoti ar prarasti per saugumo incidentą. Išlyga yra įgyvendinimas: įrankis gali būti įkeltas per HTTPS, veikti jūsų naršyklėje ir vis tiek išsiųsti failą į trečiosios šalies endpoint. Visada patikrinkite tinklo skydelį.
Kodėl tada ne visi įrankiai veikia taip?
Dėl trijų priežasčių. Kai kurioms operacijoms tikrai reikia serverio (atvirkštinė paieška, turinio moderavimas, indeksavimas). Kai kuriuos senus produktus reikėtų visiškai perrašyti. O kai kurios įmonės nori analitikos signalo, gaunamo matant, ką naudotojai įkelia.
Ar WebAssembly sulėtina mano kompiuterį?
Ne reikšmingai. Šiuolaikinis WASM veikia beveik native greičiu. Matomas kaštas yra pradinis modulio atsisiuntimas. Kai jis jau yra talpykloje, vėlesni paleidimai faktiškai nieko nekainuoja.
O kaip dėl labai didelių failų?
Naršyklės atmintis yra riba. Telefonai ir žemesnės klasės nešiojamieji kompiuteriai pritrūksta atminties gerokai anksčiau nei serveris. Gerai sukurtas įrankis iš anksto pasako, kada failas greičiausiai per didelis įrenginiui, užuot nulaužęs kortelę.

Šaltiniai ir tolesnis skaitymas

  1. MDN — File API
  2. MDN — Web Workers
  3. WebAssembly.org — Use cases
Apie autorių
The Wux Webtools Team

Paskutinį kartą atnaujinta:

Tęsti skaitymą