Osnove obrade slika s web workerima
Web workeri rade težak posao izvan UI threada. U obradi slika to znači da izrez može teći dok sučelje ostaje odzivno, unutar granica memorije i CPU-a uređaja.
Ne mijenja kamo idu pikseli — mijenja kako preglednik organizira lokalni rad.
Glavna nit ima posao korisničkog sučelja
Stranica preglednika obično pokreće JavaScript na glavnoj niti. Ta nit također koordinira izgled, slikanje i unos. Ako ga zauzme jedan dugi izračun, klikovi mogu kasniti, animacija može prestati, a preglednik može upozoriti da stranica ne reagira.
Uređivač slika ima mnogo odgovornosti glavne niti prije nego što zaključivanje uopće započne:
- primite odabir datoteke, zalijepite ili ispustite;
- dekodirati i prikazati sliku;
- ažurirati napredak i stanja grešaka;
- crtanje platna za pregled;
- ručka za dodavanje i brisanje pokreta kista;
- pripremite akcije preuzimanja ili međuspremnika.
Stavljanjem numeričkog rada segmentacijskog modela na istu nit ti bi se zadaci izravno natjecali. Radnik stvara jasniju granicu.
Granica temeljena na poruci
Urednik i radnik ne dijele obične varijable. Komuniciraju slanjem poruka. Pojednostavljeni tok izgleda ovako:
- Uređivač stvara ili ponovno koristi radnika.
- Traži od radnika da inicijalizira vrijeme izvođenja zaključaka i model.
- Priprema slikovne podatke i šalje zahtjev za zaključivanje.
- Radnik pretvara podatke u očekivani unos modela.
- Radnik pokreće model i proizvodi vrijednosti maske.
- Šalje masku ili podatke o rezultatu natrag.
- Uređivač sastavlja pregled i omogućuje doradu ili izvoz.
Poruke bi trebale sadržavati dovoljno konteksta da odgovaraju odgovoru ispravnom zahtjevu. Ovo je važno ako korisnik odabere drugu sliku prije završetka prethodnog posla. Sučelje mora izbjegavati prikazivanje starog rezultata preko novog izvora.
Kopiranje i prijenos slikovnih podataka
Slanje male SMS poruke je jeftino. Slanje milijuna piksela može biti skupo ako preglednik mora kopirati cijeli međuspremnik. Web API-ji umjesto toga mogu prenijeti vlasništvo nad određenim binarnim međuspremnicima. Preneseni međuspremnik postaje dostupan primatelju bez zadržavanja upotrebljivog duplikata na strani pošiljatelja.
Ta optimizacija dolazi s ograničenjem dizajna: nakon prijenosa, pošiljatelj ne može nastaviti koristiti isti međuspremnik kao da još uvijek posjeduje podatke. Uređivač može zadržati zaseban prikaz prikaza, stvoriti namjenski međuspremnik za zaključivanje ili rekonstruirati ono što mu je potrebno kasnije.
Ne koristi svaka implementacija prijenos na potpuno istim mjestima. Opća lekcija je da odvajanje niti ne čini da kretanje podataka nestaje. Dimenzije slike, veličina međuspremnika i broj pretvorbi i dalje utječu na kašnjenje i memoriju.
Što Easy Background Remover stavlja u radnika
Easy Background Remover koristi Web Worker s izvršavanjem zaključaka preglednika za segmentaciju na uređaju. Teški automatski korak izrezivanja stvara masku. Uređivač zatim prikazuje složeni rezultat i podržava doradu kista CPU-a na platnu.
Ovo odvajanje neuspjesima daje korisniju granicu. Ako se radnik ne može pokrenuti ili se sruši tijekom zaključivanja, sučelje može prijaviti pogrešku povezanu s radnikom umjesto da se oslanja na trajno zamrznutu karticu kao jedini signal.
Također održava tvrdnju o lokalnoj obradi razumljivom. Slanje piksela sa stranice proširenja vlastitom radniku komunikacija je unutar okruženja preglednika, a ne prijenos na udaljeni API za izrez. Prva sesija može zasebno preuzeti sredstvo modela za višekratnu upotrebu; pogledajte Zašto prvo pokretanje preuzima model.
Radnik ne čini izračun trenutnim
Radnici poboljšavaju odziv, a ne sirove mogućnosti uređaja. Model i dalje troši CPU, GPU ili druge resurse vremena izvođenja prema onome što preglednik može pružiti. Veliki unos ipak može trajati dulje i zahtijevati više memorije od malog.
Ostaje nekoliko ograničenja:
- inicijalizacija modela ima stvarnu cijenu;
- međuspremnici piksela zauzimaju memoriju s obje strane ako se kopiraju;
- promjena veličine i pretvorba formata zahtijevaju vrijeme;
- uređaji s malo memorije mogu imati problema s velikim slikama;
- više radnika može povećati sukob umjesto da ga smanji;
- izvoz i ažuriranja platna i dalje mogu uključivati glavnu nit.
Pokretanje pet stručnjaka za zaključivanje za pet slika nije automatski pet puta brže. Radnici dijele isti stroj. Paralelni poslovi mogu se natjecati za propusnost memorije i izvršne resurse, dok svaka instanca modela može imati vlastitu cijenu memorije.
Izvješćivanje o napretku je kooperativno
Radnik može slati poruke o statusu, ali ne zna automatski koji će postotak napretka biti točan. Preuzimanje modela, inicijalizacija vremena izvođenja, priprema ulaza, zaključivanje, pretvorba maske i renderiranje pregleda zasebne su faze s različitim vremenskim rasporedom.
Neke faze imaju mjerljiv broj bajtova. Izvršenje jednog modela može izložiti samo “započeto” i “završeno”. Glatki postotak koji ravnomjerno napreduje stoga može biti kozmetičko, a ne precizno mjerenje.
Korisno korisničko sučelje za napredak imenuje fazu kada je to moguće: priprema modela, obrada slike ili rezultat izgradnje. Također se bavi neuspjehom i otkazivanjem umjesto ostavljanja spinnera bez objašnjenja.
Otkazivanje je više od skrivanja spinnera
Ako korisnik zatvori sliku ili počne ispočetka, sučelje može zanemariti eventualni odgovor zastarjelog zahtjeva. Odmah zaustavljanje osnovnog izračuna može zahtijevati dodatnu podršku iz vremena izvođenja ili prekidanje i ponovno stvaranje radnika.
Zatvaranje radnika je odlučujuće, ali odbacuje njegovo inicijalizirano stanje. Sljedeći zadatak će možda trebati ponovo učitati i inicijalizirati model. Za kratku operaciju označavanje rezultata kao ustajalog može biti jeftinije od rušenja svega.
Ispravan izbor ovisi o pritisku memorije, trajanju rada i mogućnostima izvođenja. Iz perspektive korisnika, važno pravilo je da zastarjeli rad ne smije prebrisati trenutno uređivanje.
Pogreške također moraju prijeći granicu
Iznimka unutar radnika ne postaje normalna iznimka glavne niti. Radnik mora prijaviti korisne pogreške, a urednik treba osluškivati kvarove na razini radnika.
Dobro rukovanje pogreškama razlikuje barem:
- imovina modela nedostupna;
- inicijalizacija modela nije uspjela;
- dekodiranje slike ili priprema ulaza nisu uspjeli;
- zaključivanje nije uspjelo;
- radnik se neočekivano zaustavio;
- rezultat više ne pripada trenutnom zahtjevu.
Ovo je djelotvornije od općeg “nešto je pošlo po zlu”, posebno kada postavljanje pri prvom pokretanju i normalna obrada slike imaju različite lijekove.
Izlaz radnika je još uvijek samo prva maska
Arhitektura niti ne poboljšava dvosmislenu granicu sama po sebi. Radnik može vratiti tehnički ispravnu masku kojoj nedostaje krzno, prozirni materijal, uske naramenice ili željena sjena. To su pitanja segmentacije i namjere.
Posao urednika nastavlja se nakon zaključivanja: skalirajte masku u radni koordinatni sustav, sastavite pretpregled, dopustite korisniku da ga poboljša i izvezite trenutno stanje. Rezolucija maske u odnosu na veličinu pregleda objašnjava zašto se ti koordinatni sustavi ne smiju miješati.
Sažeti mentalni model
Zamislite radnika kao lokalnog stručnjaka iza prozora s porukom:
- urednik je vlasnik interakcije;
- radnik posjeduje težak zadatak zaključivanja;
- binarni slikovni podaci prelaze definiranu granicu;
- radnik vraća masku, a ne gotovu prosudbu o svakom rubu;
- urednik ostaje odgovoran za trenutno stanje, pregled, doradu i izvoz.
Za pogled modela na same piksele, nastavite s Što vidi model izreza na uređaju. Za sveobuhvatni praktični pregled pogledajte Kako radi lokalno uklanjanje pozadine.