Асновы апрацоўкі малюнкаў Web Worker
Web Worker - гэта асобны кантэкст выканання JavaScript, які можа выконваць дарагія вылічэнні, не прымушаючы асноўны паток рэдактара выконваць усю працу. Для апрацоўкі відарысаў у браўзеры гэта азначае, што наладка мадэлі і высновы могуць уцякаць ад патоку, які адказвае за кнопкі, паведамленні аб прагрэсе, увод пэндзлем і абнаўленні экрана.
Вынік не “бясплатная фонавая апрацоўка”. Тая ж прылада па-ранейшаму выконвае вылічэнні і выкарыстоўвае памяць. Архітэктурная перавага заключаецца ў падзеле: цяжкая аперацыя мадэлі з меншай верагоднасцю заблакуе кожны адказ інтэрфейсу падчас працы.
Асноўны паток мае заданне карыстальніцкага інтэрфейсу
Старонка браўзера звычайна запускае JavaScript у галоўным патоку. Гэты паток таксама каардынуе макет, маляванне і ўвод. Калі гэта займае адно доўгае вылічэнне, пстрычкі могуць адчувацца з затрымкай, анімацыя можа спыніцца, а браўзер можа папярэдзіць, што старонка не рэагуе.
Рэдактар малюнкаў мае мноства абавязкаў асноўнага патоку яшчэ да таго, як пачнецца вывад:
- атрымаць выбар, устаўку або падзенне файла;
- расшыфраваць і адлюстраваць малюнак;
- абнаўленне стану прагрэсу і памылак;
- намаляваць палатно папярэдняга прагляду;
- апрацоўваць рух пэндзля Add і Erase;
- падрыхтаваць дзеянні па загрузцы або буферы абмену.
Размяшчэнне лікавай працы мадэлі сегментацыі ў адным патоку прымусіла б гэтыя задачы канкурыраваць непасрэдна. Рабочы стварае больш выразную мяжу.
Мяжа на аснове паведамленняў
Рэдактар і рабочы не падзяляюць звычайныя зменныя. Яны маюць зносіны шляхам адпраўкі паведамленняў. Спрошчаны паток выглядае так:
- Рэдактар стварае або паўторна выкарыстоўвае воркер.
- Ён просіць работніка ініцыялізаваць асяроддзе выканання вываду і мадэль.
- Ён рыхтуе дадзеныя выявы і адпраўляе запыт вываду.
- Работнік пераўтворыць даныя ў чаканы ўвод мадэлі.
- Работнік запускае мадэль і стварае значэнні маскі.
- Ён адпраўляе маску або даныя выніку назад.
- Рэдактар аб’ядноўвае папярэдні прагляд і дазваляе ўдакладненне або экспарт.
Паведамленні павінны ўтрымліваць дастаткова кантэксту, каб адказ адпавядаў правільнаму запыту. Гэта важна, калі карыстальнік выбірае іншую выяву да завяршэння папярэдняй працы. Інтэрфейс павінен пазбягаць адлюстравання старога выніку замест новай крыніцы.
Капіраванне і перадача даных выявы
Адпраўка невялікага тэкставага паведамлення каштуе танна. Адпраўка мільёнаў значэнняў пікселяў можа каштаваць дорага, калі браўзер павінен капіяваць увесь буфер. Вэб-API могуць замест гэтага перадаць права ўласнасці на пэўныя двайковыя буферы. Перададзены буфер становіцца даступным для атрымальніка без захавання прыдатнай копіі на баку адпраўніка.
Гэтая аптымізацыя звязана з дызайнерскім абмежаваннем: пасля перадачы адпраўнік не можа працягваць выкарыстоўваць той жа буфер, быццам ён усё яшчэ валодае дадзенымі. Рэдактар можа захаваць асобнае прадстаўленне дысплея, стварыць спецыяльны буфер вываду або рэканструяваць тое, што яму спатрэбіцца пазней.
Не кожная рэалізацыя выкарыстоўвае перадачу ў аднолькавых месцах. Агульны ўрок заключаецца ў тым, што падзел патокаў не прыводзіць да знікнення руху даных. Памеры выявы, памер буфера і колькасць пераўтварэнняў па-ранейшаму ўплываюць на затрымку і памяць.
Што Easy Background Remover змяшчае ў рабочага
Easy Background Remover выкарыстоўвае Web Worker з асяроддзем выканання браўзера для сегментацыі на прыладзе. Цяжкая аўтаматычная прыступка выразання вырабляе маску. Затым рэдактар адлюстроўвае камбінаваны вынік і падтрымлівае ўдакладненне пэндзля на палатне працэсара.
Гэты падзел дае няўдачам больш карысную мяжу. Калі рабочы не можа ініцыялізавацца або выходзіць з ладу падчас вываду, інтэрфейс можа паведаміць пра памылку, звязаную з рабочым, замест таго, каб спадзявацца на пастаянна замарожаную ўкладку ў якасці адзінага сігналу.
Гэта таксама робіць прэтэнзію на лакальную апрацоўку зразумелай. Адпраўка пікселяў са старонкі пашырэння яго ўласнаму рабочаму - гэта сувязь у асяроддзі браўзера, а не загрузка ў аддалены выразаны API. Першы сеанс можа асобна загрузіць актывы шматразовай мадэлі; глядзіце Чаму пры першым запуску спампоўваецца мадэль.
Рабочы не робіць вылічэнні імгненнымі
Рабочыя паляпшаюць хуткасць рэагавання, а не сырыя магчымасці прылады. Мадэль па-ранейшаму спажывае працэсар, графічны працэсар або іншыя рэсурсы выканання ў залежнасці ад таго, што можа забяспечыць браўзер. Вялікі ўвод можа заняць больш часу і запатрабаваць больш памяці, чым малы.
Застаецца некалькі абмежаванняў:
- ініцыялізацыя мадэлі мае рэальны кошт;
- пры капіраванні піксельныя буферы займаюць памяць з абодвух бакоў;
- змяненне памеру і пераўтварэнне фармату патрабуе часу;
- прылады з нізкім узроўнем памяці могуць мець праблемы з вялікімі выявамі;
- большая колькасць работнікаў можа павялічыць спрэчку, а не паменшыць яе;
- экспарт і абнаўленні палатна ўсё яшчэ могуць уключаць асноўны паток.
Запуск пяці рабочых вывадаў для пяці малюнкаў не будзе аўтаматычна ў пяць разоў хутчэй. Рабочыя карыстаюцца адной машынай. Паралельныя заданні могуць канкурыраваць за прапускную здольнасць памяці і рэсурсы выканання, у той час як кожны асобнік мадэлі можа мець уласны кошт памяці.
Справаздача аб прагрэсе - гэта супрацоўніцтва
Супрацоўнік можа адпраўляць паведамленні аб стане, але ён не ведае аўтаматычна, які працэнт прагрэсу будзе адчуваць сябе дакладным. Загрузка мадэлі, ініцыялізацыя асяроддзя выканання, падрыхтоўка ўводу, вывад, пераўтварэнне маскі і візуалізацыя папярэдняга прагляду - гэта асобныя фазы з розным часам.
Некаторыя фазы маюць вымерную колькасць байтаў. Выкананне адной мадэлі можа паказваць толькі «пачатае» і «скончанае». Такім чынам, гладкі працэнт, які раўнамерна павялічваецца, можа быць хутчэй касметычным, чым дакладным вымярэннем.
Карысны інтэрфейс прагрэсу называе фазу, калі гэта магчыма: падрыхтоўка мадэлі, апрацоўка выявы або вынік зборкі. Ён таксама апрацоўвае збой і адмену замест таго, каб пакідаць круцёлку без тлумачэння прычын.
Адмена - гэта больш, чым схаванне спінера
Калі карыстальнік закрывае малюнак або пачынае спачатку, інтэрфейс можа праігнараваць канчатковы адказ ад састарэлага запыту. Для неадкладнага спынення асноўных вылічэнняў можа спатрэбіцца дадатковая падтрымка з боку асяроддзя выканання або спыненне і паўторнае стварэнне працоўнага працэсара.
Завяршэнне рабочага мае вырашальнае значэнне, але яно адкідае яго ініцыялізаваны стан. Для наступнага задання можа спатрэбіцца зноў загрузіць і ініцыялізаваць мадэль. Для кароткай аперацыі пазначыць вынік састарэлым можа быць танней, чым усё знесці.
Правільны выбар залежыць ад нагрузкі на памяць, працягласці працы і магчымасцяў выканання. З пункту гледжання карыстальніка важнае правіла заключаецца ў тым, што састарэлая праца не павінна перазапісваць бягучую праўку.
Памылкі таксама павінны перасякаць мяжу
Выключэнне ўнутры рабочага не становіцца звычайным выключэннем асноўнага патоку. Воркер павінен паведамляць аб памылках, якія можна выкарыстоўваць, а рэдактар павінен прыслухоўвацца да збояў на ўзроўні воркера.
Добрая апрацоўка памылак адрознівае прынамсі:
- актыў мадэлі недаступны;
- няўдалая ініцыялізацыя мадэлі;
- збой дэкадавання відарыса або падрыхтоўкі ўводу;
- вывад не атрымаўся;
- рабочы нечакана спыніўся;
- вынік больш не належыць бягучаму запыту.
Гэта больш эфектыўна, чым звычайнае “нешта пайшло не так”, асабліва калі першапачатковае ўсталяванне і звычайная апрацоўка выявы маюць розныя сродкі.
Вывад воркера - гэта толькі першая маска
Архітэктура патокаў сама па сабе не паляпшае неадназначны край. Работнік можа вярнуць тэхнічна спраўную маску, у якой яшчэ адсутнічае мех, празрысты матэрыял, вузкія раменьчыкі або патрэбны цень. Гэта пытанні сегментацыі і намераў.
Праца рэдактара аднаўляецца пасля вываду: маштабаваць маску ў рабочай сістэме каардынат, складаць папярэдні прагляд, даць карыстальніку ўдакладніць яго і экспартаваць бягучы стан. Раздзяленне маскі супраць памеру папярэдняга прагляду тлумачыць, чаму не варта блытаць гэтыя сістэмы каардынат.
Кароткая разумовая мадэль
Думайце пра рабочага як пра мясцовага спецыяліста за акном паведамленняў:
- рэдактар валодае ўзаемадзеяннем;
- работнік валодае цяжкай задачай вываду;
- двайковыя дадзеныя выявы перасякаюць вызначаную мяжу;
- працаўнік вяртае маску, а не скончанае меркаванне аб кожным краі;
- рэдактар нясе адказнасць за бягучы стан, агляд, дапрацоўку і экспарт.
Каб убачыць мадэль саміх пікселяў, перайдзіце да Што бачыць мадэль з выразам на прыладзе. Каб атрымаць скразны практычны агляд, глядзіце Як працуе лакальнае фонавае выдаленне.