Основи за обработка на слики на Web Worker
Веб работник е посебен контекст за извршување на JavaScript што може да врши скапи пресметки без да ја натера главната нишка на уредникот да ја врши целата работа. За обработка на слики од прелистувачот, тоа значи дека поставувањето на моделот и заклучоците може да избегаат од нишката одговорна за копчињата, пораките за напредок, внесувањето на четката и ажурирањата на екранот.
Резултатот не е „бесплатна обработка во позадина“. Истиот уред сè уште ја врши пресметката и користи меморија. Архитектонската придобивка е одвојувањето: тешката операција на моделот е помалку веројатно да го блокира секој одговор на интерфејсот додека работи.
Главната нишка има задача за кориснички интерфејс
Страницата на прелистувачот обично работи JavaScript на главната нишка. Таа нишка исто така ги координира распоредот, сликањето и внесувањето. Ако една долга пресметка го окупира, кликовите може да се доцнат, анимацијата може да престане, а прелистувачот може да предупреди дека страницата не реагира.
Уредувачот на слики има многу одговорности во главната нишка уште пред да започне заклучокот:
- примајте избор на датотека, залепете или испуштете;
- декодира и прикажува слика;
- ажурирање на напредокот и состојбите на грешки;
- нацртајте го платното за преглед;
- се справува со движењето на четката Додај и бришење;
- подгответе дејства за преземање или таблата со исечоци.
Ставањето на нумеричката работа на моделот за сегментација на иста нишка ќе ги натера тие задачи директно да се натпреваруваат. Работникот создава појасна граница.
Границата заснована на пораки
Уредникот и работникот не споделуваат обични променливи. Тие комуницираат со испраќање пораки. Поедноставен тек изгледа вака:
- Уредникот создава или повторно користи работник.
- Бара од работникот да го иницијализира времето на извршување и моделот на заклучоците.
- Ги подготвува податоците за сликата и испраќа барање за заклучоци.
- Работникот ги конвертира податоците во очекуваниот влез на моделот.
- Работникот го води моделот и произведува вредности на маски.
- Ја испраќа маската или податоците за резултатот назад.
- Уредникот го комбинира прегледот и овозможува рафинирање или извоз.
Пораките треба да содржат доволно контекст за да одговараат на точното барање. Ова е важно ако корисникот избере друга слика пред да заврши претходната работа. Интерфејсот мора да избегнува прикажување на стар резултат преку нов извор.
Копирање и пренесување податоци за слики
Испраќањето мала текстуална порака е евтино. Испраќањето на милиони вредности на пиксели може да биде скапо ако прелистувачот треба да го копира целиот тампон. Наместо тоа, веб API-ите можат да ја пренесат сопственоста на одредени бинарни бафери. Пренесениот тампон станува достапен за примачот без да се задржи употреблив дупликат на страната на испраќачот.
Таа оптимизација доаѓа со ограничување на дизајнот: по преносот, испраќачот не може да продолжи да го користи истиот бафер како да ги поседува податоците. Уредувачот може да задржи посебна претстава за прикажување, да создаде посветен бафер за заклучоци или да го реконструира она што му треба подоцна.
Не секоја имплементација користи пренос на точно исти места. Општата лекција е дека одвојувањето на нишките не го намалува движењето на податоците. Димензиите на сликата, големината на баферот и бројот на конверзии сè уште влијаат на латентноста и меморијата.
Што Easy Background Remover става во работникот
Easy Background Remover користи Web Worker со времетраење за заклучоци на прелистувачот за сегментација на уредот. Тешкиот чекор за автоматско исклучување произведува маска. Уредникот потоа го прикажува композитниот резултат и поддржува префинетост на четката со платно на процесорот.
Оваа поделба им дава на неуспесите покорисна граница. Ако работникот не може да иницијализира или падне за време на заклучувањето, интерфејсот може да пријави грешка поврзана со работникот наместо да се потпира на трајно замрзнато јазиче како единствен сигнал.
Исто така, го одржува разбирливо барањето за локална обработка. Испраќањето пиксели од страницата со екстензија до сопствен работник е комуникација во околината на прелистувачот, а не поставување на далечински исечок API. Првата сесија може посебно да го преземе средството на моделот за повеќекратна употреба; видете Зошто прво да извршите преземања на модел.
Работникот не прави пресметување инстант
Работниците ја подобруваат респонзивноста, а не способноста на сировиот уред. Моделот сè уште троши процесор, графички процесор или други ресурси за време на траење според тоа што може да го обезбеди прелистувачот. Голем влез сепак може да потрае подолго и бара повеќе меморија од мала.
Остануваат неколку ограничувања:
- иницијализацијата на моделот има реална цена;
- баферите за пиксели зафаќаат меморија од двете страни ако се копираат;
- за промена на големината и за конверзија на формат е потребно време;
- уредите со ниска меморија може да се борат со големи слики;
- повеќе работници можат да го зголемат спорот наместо да го намалат;
- Извозот и ажурирањата на платно сè уште може да ја вклучуваат главната нишка.
Започнувањето на пет работници за заклучување за пет слики не е автоматски пет пати побрзо. Работниците ја делат истата машина. Паралелните работни места можат да се натпреваруваат за пропусниот опсег на меморијата и ресурсите за извршување, додека секој примерок на модел може да носи свој трошок за меморија.
Известувањето за напредок е кооперативно
Работникот може да испраќа статусни пораки, но автоматски не знае колкав процент на напредок ќе се чувствува точен. Преземањето на моделот, иницијализацијата на траење, подготовката на влезот, заклучувањето, конверзијата на маската и прикажувањето на преглед се посебни фази со различен тајминг.
Некои фази имаат мерлив број на бајти. Извршувањето на еден модел може да ги открие само „започнатите“ и „завршените“. Затоа, мазниот процент што напредува подеднакво може да биде козметички наместо прецизно мерење.
Корисниот интерфејс за напредок ја именува фазата кога е можно: подготовка на модел, обработка на слика или резултат на градење. Тој, исто така, се справува со неуспехот и откажувањето, наместо да остави спинер без објаснување.
Откажувањето е повеќе од криење на спинер
Ако корисникот затвори слика или започне одново, интерфејсот може да го игнорира евентуалниот одговор од застареното барање. Веднаш запирањето на основната пресметка може да бара дополнителна поддршка од времето на работа или прекинување и повторно создавање на работникот.
Прекинувањето на работникот е одлучувачко, но ја отфрла неговата иницијализирана состојба. Следната работа можеби ќе треба повторно да го вчита и иницијализира моделот. За кратка операција, означувањето на застарениот резултат може да биде поевтино отколку да се урне сè.
Правилниот избор зависи од притисокот во меморијата, времетраењето на работата и можностите за траење. Од перспектива на корисникот, важното правило е дека застарената работа не смее да го презапише тековното уредување.
И грешките треба да ја преминат границата
Исклучок во работникот не станува нормален исклучок од главната нишка. Работникот мора да пријави употребливи грешки, а уредникот треба да слуша за неуспеси на ниво на работник.
Доброто справување со грешки разликува барем:
- моделот на средството е недостапно;
- иницијализацијата на моделот не успеа;
- декодирањето на сликата или подготовката за внесување не успеа;
- заклучокот не успеа;
- работникот неочекувано застанал;
- резултатот повеќе не припаѓа на тековното барање.
Ова е поприменливо отколку генеричкото „нешто тргна наопаку“, особено кога поставувањето на првата работа и нормалната обработка на сликата имаат различни лекови.
Работниот резултат е сè уште само прва маска
Архитектурата на нишките сама по себе не го подобрува двосмислениот раб. Работникот може да врати технички валидна маска на која и недостасува крзно, проѕирен материјал, тесни ремени или сакана сенка. Тоа се прашања за сегментација и намери.
Работата на уредникот продолжува по заклучувањето: размерете ја маската во работниот координатен систем, составете преглед, дозволете му на корисникот да ја рафинира и извезете ја моменталната состојба. Резолуција на маска наспроти големина на преглед објаснува зошто тие координатни системи не треба да се мешаат.
Концизен ментален модел
Замислете го работникот како локален специјалист зад прозорецот за пораки:
- уредникот ја поседува интеракцијата;
- работникот ја поседува тешката задача за заклучување;
- податоците за бинарни слики поминуваат дефинирана граница;
- работникот враќа маска, а не завршен суд за секој раб;
- Уредникот останува одговорен за моменталната состојба, преглед, доработка и извоз.
За приказ на моделот на самите пиксели, продолжете со Што гледа моделот со исечок на уредот. За практичен преглед од крај до крај, видете Како функционира отстранувањето на локалната позадина.