Osnove obdelave slik z Web Worker
Web Worker je ločen JavaScript kontekst, ki lahko izvaja drage izračune, ne da bi glavna nit urejevalnika opravila vse delo. Pri obdelavi slik v brskalniku to pomeni, da priprava modela in sklepanje lahko tečeta stran od niti, odgovorne za gumbe, sporočila o napredku, vnos čopiča in posodobitve zaslona.
Rezultat ni »brezplačna obdelava v ozadju«. Ista naprava še vedno računa in uporablja pomnilnik. Arhitekturna korist je ločitev: težka operacija modela manj verjetno blokira vsak odziv vmesnika, medtem ko teče.
Glavna nit ima nalogo uporabniškega vmesnika
Stran brskalnika običajno izvaja JavaScript v glavni niti. Ta nit tudi usklajuje postavitev, slikanje in vnos. Če ga zasede en dolg izračun, lahko kliki zamujajo, animacija se lahko ustavi in brskalnik lahko opozori, da se stran ne odziva.
Urejevalnik slik ima veliko odgovornosti za glavno nit, preden se izvajanje modela sploh začne:
- prejmete izbiro datoteke, prilepite ali spustite;
- dekodirati in prikazati sliko;
- posodobi napredek in stanja napak;
- narišite platno za predogled;
- premikanje čopiča za dodajanje in brisanje;
- pripravite dejanja prenosa ali odložišča.
Če bi numerično delo modela segmentacije postavili na isto nit, bi te naloge neposredno konkurirale. Delavec ustvari jasnejšo mejo.
Meja na podlagi sporočila
Urednik in delavec si ne delita običajnih spremenljivk. Komunicirajo s pošiljanjem sporočil. Poenostavljen tok izgleda takole:
- Urejevalnik ustvari ali ponovno uporabi delavca.
- Od delavca zahteva, da inicializira izvajalno okolje sklepanja in model.
- Pripravi slikovne podatke in pošlje zahtevo za sklepanje.
- Delavec pretvori podatke v pričakovani vhod modela.
- Delavec zažene model in ustvari vrednosti maske.
- Pošlje masko ali podatke o rezultatu nazaj.
- Urejevalnik sestavi predogled in omogoči izboljšanje ali izvoz.
Sporočila morajo vsebovati dovolj konteksta, da se odgovor ujema s pravilno zahtevo. To je pomembno, če uporabnik izbere drugo sliko, preden se prejšnje opravilo konča. Vmesnik se mora izogibati prikazovanju starega rezultata namesto novega vira.
Kopiranje in prenos slikovnih podatkov
Pošiljanje majhnega besedilnega sporočila je poceni. Pošiljanje milijonov vrednosti slikovnih pik je lahko drago, če mora brskalnik kopirati celoten medpomnilnik. Spletni API-ji lahko namesto tega prenesejo lastništvo določenih binarnih medpomnilnikov. Preneseni medpomnilnik postane na voljo prejemniku, ne da bi obdržal uporabni dvojnik na strani pošiljatelja.
Ta optimizacija ima oblikovno omejitev: po prenosu pošiljatelj ne more več uporabljati istega vmesnega pomnilnika, kot da je še vedno lastnik podatkov. Urejevalnik lahko obdrži ločeno prikazno predstavitev, ustvari namenski medpomnilnik za sklepanje ali pozneje rekonstruira, kar potrebuje.
Vsaka izvedba ne uporablja prenosa na povsem istih mestih. Splošna lekcija je, da ločevanje niti ne povzroči, da gibanje podatkov izgine. Dimenzije slike, velikost medpomnilnika in število pretvorb še vedno vplivajo na zakasnitev in pomnilnik.
Kaj Easy Background Remover vloži v delavca
Easy Background Remover uporablja Web Worker z izvajalnim okoljem sklepanja brskalnika za segmentacijo v napravi. Težka samodejna izrezovalna stopnica ustvari masko. Urejevalnik nato prikaže sestavljeni rezultat in podpira izboljšanje čopiča na platnu CPE.
Ta ločitev daje napakam uporabnejšo mejo. Če se delavec ne more inicializirati ali se med sklepanjem zruši, lahko vmesnik sporoči napako, povezano z delavcem, namesto da bi se zanašal na trajno zamrznjen zavihek kot edini signal.
Prav tako ohranja trditev o lokalni obdelavi razumljivo. Pošiljanje slikovnih pik z razširitvene strani lastnemu delavcu je komunikacija znotraj okolja brskalnika in ne nalaganje v API za oddaljeni izrez. Prva seja lahko ločeno prenese sredstvo modela za večkratno uporabo; glejte Zakaj prvi zagon prenese model.
Delavec ne naredi izračuna takoj
Delavci izboljšajo odzivnost, ne zmogljivosti surove naprave. Model še vedno porablja CPE, GPE ali druge vire izvajalnega okolja glede na to, kar brskalnik lahko zagotovi. Velik vnos lahko še vedno traja dlje in zahteva več pomnilnika kot majhen.
Ostaja več omejitev:
- inicializacija modela ima realne stroške;
- medpomnilniki slikovnih pik zavzamejo pomnilnik na obeh straneh, če se kopirajo;
- spreminjanje velikosti in pretvorba formata zahtevata čas;
- naprave z malo pomnilnika se lahko spopadajo z velikimi slikami;
- več delavcev lahko poveča spor, namesto da ga zmanjša;
- izvoz in posodobitve platna lahko še vedno vključujejo glavno nit.
Zagon petih sklepnih delavcev za pet slik ni samodejno petkrat hitrejši. Delavci si delijo isti stroj. Vzporedna opravila lahko tekmujejo za pasovno širino pomnilnika in izvedbene vire, medtem ko lahko vsak primerek modela nosi svoje stroške pomnilnika.
Poročanje o napredku je kooperativno
Delavec lahko pošilja sporočila o stanju, vendar ne ve samodejno, kakšen odstotek napredka se bo zdel točen. Prenos modela, inicializacija izvajalnega okolja, priprava vnosa, sklepanje, pretvorba maske in upodabljanje predogleda so ločene faze z različnim časovnim razporedom.
Nekatere faze imajo merljivo število bajtov. Enkratna izvedba modela lahko razkrije le »začeto« in »končano«. Gladki odstotek, ki enakomerno napreduje, je torej lahko kozmetična in ne natančna meritev.
Uporabni uporabniški vmesnik napredka poimenuje fazo, kadar je to mogoče: priprava modela, obdelava slike ali rezultat gradnje. Obravnava tudi neuspeh in preklic, namesto da pusti spinner brez pojasnila.
Preklic je več kot skrivanje vrtavke
Če uporabnik zapre sliko ali začne znova, lahko vmesnik prezre morebitni odgovor zastarele zahteve. Takojšnja ustavitev osnovnega izračuna lahko zahteva dodatno podporo izvajalnega okolja ali prekinitev in ponovno ustvarjanje delavca.
Prekinitev delavca je odločilna, vendar zavrže njegovo inicializirano stanje. Naslednje opravilo bo morda moralo znova naložiti in inicializirati model. Za kratko operacijo je lahko cenejše označevanje rezultata kot porušitev vsega.
Pravilna izbira je odvisna od obremenitve pomnilnika, trajanja delovanja in zmogljivosti časa izvajanja. Z vidika uporabnika je pomembno pravilo, da zastarelo delo ne sme prepisati trenutnega urejanja.
Tudi napake morajo prestopiti mejo
Izjema znotraj delavca ne postane običajna izjema glavne niti. Delavec mora poročati o uporabnih napakah, urednik pa mora poslušati napake na ravni delavca.
Dobro obravnavanje napak razlikuje vsaj:
- modelno sredstvo ni na voljo;
- inicializacija modela ni uspela;
- dekodiranje slike ali priprava vnosa ni uspela;
- sklepanje ni uspelo;
- delavec se je nepričakovano ustavil;
- rezultat ne pripada več trenutni zahtevi.
To je bolj izvedljivo kot generično »nekaj je šlo narobe«, še posebej, če imata nastavitev ob prvem zagonu in običajna obdelava slike drugačna sredstva.
Delavec je še vedno le prva maska
Arhitektura niti sama po sebi ne izboljša dvoumnega roba. Delavec lahko vrne tehnično veljavno masko, na kateri manjka krzno, prozoren material, ozki trakovi ali želena senca. To so vprašanja segmentacije in namena.
Delo urednika se nadaljuje po sklepanju: skalirajte masko v delovni koordinatni sistem, sestavite predogled, pustite uporabniku, da ga izboljša, in izvozite trenutno stanje. Ločljivost maske v primerjavi z velikostjo predogleda pojasnjuje, zakaj teh koordinatnih sistemov ne smete zamenjevati.
Jedrnat mentalni model
Predstavljajte si delavca kot lokalnega strokovnjaka za oknom s sporočili:
- urednik je lastnik interakcije;
- delavec ima težko nalogo sklepanja;
- binarni slikovni podatki prečkajo definirano mejo;
- delavec vrne masko, ne pa dodelane sodbe o vsakem robu;
- urednik ostaja odgovoren za trenutno stanje, pregled, izpopolnitev in izvoz.
Za pogled modela na same slikovne pike nadaljujte z Kaj vidi model izreza v napravi. Za celovit praktični pregled si oglejte Kako deluje lokalno odstranjevanje ozadja.