ЈаваСцрипт АПИ за увод у Веб раднике
Веб Воркерс је ЈаваСцрипт АПИ који вам омогућава покренути скрипте у засебној нити од главне. То може бити корисно када не желите било какву препреку у извршавању главних скрипти, због скрипти у позадини.
Веб Воркерс АПИ је подржан у скоро свим претраживачима, за детаљније информације, погледајте ЦанИУсе документе. Пре него што уђемо у код, да видимо неколико сценарија у којима можда желите да користите овај АПИ, тако да можете добити идеју о томе шта мислим бацкгроунд-ескуе скрипте
.
Користите случајеве
Рецимо да постоји скрипта преузима и обрађује датотеку. Ако је датотека знатно биће потребно много времена да се обради! Што би могло зауставити друге скрипте које су касније позване да буду извршене.
Међутим, ако обрада датотека се помера у позадинску нит, познат као радни конац, други догађаји неће бити блокирани док се не заврши први.
Скрипта извршена у позадинском радном низу је познат као радни скрипт или само радник.
На пример, замислите да постоји велики облик, распоређен у табовима. Направљен је тако да ажурира контроле на једној картици утиче на неке контроле у другима.
Ако ажурирање осталих картица траје неко време, корисник не може непрекидно да користи тренутну картицу без да се његови догађаји стављају на чекање. То може замрзнути корисничко сучеље, ужас корисника.
Пошто корисник неће видети друге картице док попуњава тренутни, можете ажурирајте контроле других картица у позадини. На овај начин корисник може да настави да користи тренутну картицу коју попуњава, без да било који од његових скрипти буде блокиран процесом ажурирања контрола на другим картицама.
Исто тако, ако нађете сценариј у којем је скрипта може блокирати корисника од коришћења корисничког интерфејса док се његово извршење не заврши, можете размислити о премештању у радну нит, тако да се може извршити у позадини.
Области и врсте радника
Веб Воркерс АПИ је вероватно један од најједноставнијих АПИ-јева са којима можете да радите. То има прилично јасне методе креирајте радне нити и комуницирати са њима из главног скрипта.
Глобални опсег радног низа је у другом контексту од главне нити. ти не могу приступити методама и својствима прозор
објекат као такав алерт ()
унутар радног конца. Ти такође не могу директно да промене ДОМ из радничке нити.
Међутим, ви моћи користите многе АПИ-је који спадају под прозор
, на пример Промисе
и Фетцх
, у вашој радној нити (погледајте потпуну листу).
Такође можете имати угњеждене радне нити: радни нити креирани из другог радног низа. Радник којег је створио други назива се а субворкер.
Постоје мани врсте радника. Два главна су посвећени и заједнички радници.
Дедицатед воркерс припадају истом контексту претраживања којој припада њихова главна нит. Међутим, заједнички радници су присутан у другом контексту претраживања (на пример, у ифраме-у) из главног скрипта. У оба случаја, главни сценариј и радници морају бити у истом домену.
Пример у овом туториалу ће бити о посвећеном раднику, који је најчешћи тип.
АПИ методе
Погледајте доњи дијаграм за а брзи преглед свих главних метода који чине АПИ Веб Воркерс.
Тхе Радник()
конструктор ствара наменску радну нит и враћа свој референтни објект. Затим, користимо овај објекат да комуницирамо са одређеним радником.
Тхе постМессаге ()
Метод се користи у главним и радним скриптама слати податке једни другима. Послани подаци се затим примају на другој страни од стране онмессаге
евент хандлер.
Тхе заврши ()
метода завршава радну нит из главног скрипта. Овај прекид је непосредан: било која тренутна извршења скрипте и скрипти на чекању биће отказани. Тхе Близу()
Метод ради исту ствар, али је позван од стране радничке нити која се затвара.
Пример кода
Сада, да видимо неки узорак кода. Тхе индек.хтмл
страница држи маин сцрипт унутра а tag, while the worker script is held in a JavaScript file called
worker.js
.
Почињемо са креирање радног низа из главног скрипта.
в = нови радник ('воркер.јс');
Тхе Радник()
конструктор узима УРЛ датотеке радника као аргумент.
Затим додајемо управљач догађаја за онмессаге
догађаја новонастале радничке инстанце добијате податке од њега. Тхе података
имовине е
догађај ће задржати примљене податке.
в = нови радник ('воркер.јс'); в.онмессаге = (е) => цонсоле.лог ('Примљено од радника: $ е.дата');
Сада, ми користимо постМессаге ()
до послати неке податке у радну нит кликом на дугме. Тхе постМессаге ()
метода може узети два аргумента. Први може бити било ког типа (стринг, арраи ...). То су подаци за слање у радни конац (или главној скрипти, када је метода присутна у радној нити).
Други, опционални параметар је низ објеката који могу се користити радни нити (али не главном скриптом или обрнуто). Такве врсте објеката се зову Преносиви
објеката.
доцумент.куериСелецтор ('буттон'): онцлицк = () => в.постМессаге ('јохн');
Само шаљем вредност низа радној нити.
У радној нити, морамо додати онмессаге
евент хандлер тхат ће примити податке послао је главном скриптом на клик дугмета. Унутар руководиоца, ми спојите примљени низ са другим и пошаљите резултат назад на главни скрипт.
цонсоле.инфо ('радник креиран'); онмессаге = (е) => постМессаге ('Хи $ е.дата');
За разлику од главног сценарија гдје смо морали користити в
референце објецт односи се на специфичну радну нит на којем скрипта онда користи онмессаге
и постМессаге
методе нема потребе за референтним објектом у радној нити да покаже главну нит.
Код ради на следећи начин. Када се претраживач учита индек.хтмл
, конзола ће показати "радник је створио"
поруку чим радник()
конструктор се извршава у главној нити, стварање новог радника.
Када кликнете на дугме на страници, добићете "Примљено од радника: Хи јохн"
у конзоли, која је била стринг спојена у радној нити са подацима који су му послани, а онда је послати назад на главни скрипт.