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.
Turinys
- Numatytoji prielaida yra klaidinga
- Ką iš tikrųjų reiškia „kliento pusėje“
- Kodėl tai svarbu praktiškai
- Kur vis dar slypi kompromisai
- Pirmasis paleidimas yra sunkesnis
- Ribą nustato naudotojo aparatinė įranga
- Negalite apdoroti paketų tarp naudotojų
- Kai kurioms operacijoms reikia serverio
- Nedidelis etinis aspektas
- 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>andOffscreenCanvasdarbui pikselių lygiucreateImageBitmap()greitam dekodavimui už pagrindinės gijos ribųFileandBlobį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.


