Учим webworkers хорошим манерам

Usage

Using render props for ultimate flexibility:


importWebWorkerfrom"react-webworker"constMyComponent=()=>(<WebWorker url="/worker.js">{({ data, error, postMessage })=>{if(error)return`Something went wrong: ${error.message}`if(data)return(<div><strong>Received some data<strong><pre>{JSON.stringify(data,null,2)}<pre><div>)return<button onClick={()=>postMessage("hello")}>Hello<button>}}<WebWorker>)

Using helper components (don’t have to be direct children) for ease of use:

importWebWorkerfrom"react-webworker"constMyComponent=()=>(<WebWorker url="/worker.js"><WebWorker.Pending>{({ postMessage })=><button onClick={()=>postMessage("hello")}>Hello<button>}<WebWorker.Pending><WebWorker.Data>{data=>(<div><strong>Received some data<strong><pre>{JSON.stringify(data,null,2)}<pre><div>)}<WebWorker.Data><WebWorker.Error>{error=>`Something went wrong: ${error.message}`}<WebWorker.Error><WebWorker>)
importWebWorkerfrom"react-webworker"constmyWorker=newWorker("./worker.js")constMyComponent=()=><WebWorker worker={myWorker}>...<WebWorker>

The downside to this approach is that will not manage the Worker’s lifecycle. This means it will not automatically be terminated when is unmounted.

Using with a Service Worker is as simple as passing it as a custom worker instance:

constMyComponent=()=><WebWorker worker={navigator.serviceWorker}>...<WebWorker>

This will automatically setup a to enable bidirectional communication. Your Service Worker could look like this:

self.onmessage=({ data, portsport})=>{console.log("inside the service worker:", data)port.postMessage(data)}

Note that messages sent to an inactive (not «activated») Service Worker will be silently ignored. Like a custom Worker, you’ll have to deal with the Service Worker lifecycle yourself.

Getting Started

Web Workers run in an isolated thread. As a result, the code that they execute needs to be contained in a separate file. But before we do that, the first thing to do is create a new object in your main page. The constructor takes the name of the worker script:

var worker = new Worker('task.js');

If the specified file exists, the browser will spawn a new worker thread, which is downloaded asynchronously. The worker will not begin until the file has completely downloaded and executed. If the path to your worker returns an 404, the worker will fail silently.

After creating the worker, start it by calling the method:

worker.postMessage(); // Start the worker.

Communicating with a Worker via Message Passing

Communication between a work and its parent page is done using an event model and the method. Depending on your browser/version, can accept either a string or JSON object as its single argument. The latest versions of the modern browsers support passing a JSON object.

Below is a example of using a string to pass ‘Hello World’ to a worker in doWork.js. The worker simply returns the message that is passed to it.

Main script:

var worker = new Worker('doWork.js');

worker.addEventListener('message', function(e) {
  console.log('Worker said: ', e.data);
}, false);

worker.postMessage('Hello World'); // Send data to our worker.

doWork.js (the worker):

self.addEventListener('message', function(e) {
  self.postMessage(e.data);
}, false);

When is called from the main page, our worker handles that message by defining an handler for the event. The message payload (in this case ‘Hello World’) is accessible in . Although this particular example isn’t very exciting, it demonstrates that is also your means for passing data back to the main thread. Convenient!

Messages passed between the main page and workers are copied, not shared. For example, in the next example the ‘msg’ property of the JSON message is accessible in both locations. It appears that the object is being passed directly to the worker even though it’s running in a separate, dedicated space. In actuality, what is happening is that the object is being serialized as it’s handed to the worker, and subsequently, de-serialized on the other end. The page and worker do not share the same instance, so the end result is that a duplicate is created on each pass. Most browsers implement this feature by automatically JSON encoding/decoding the value on either end.

The following is a more complex example that passes messages using JSON objects.

Main script:

<button onclick="sayHI()">Say HI</button>
<button onclick="unknownCmd()">Send unknown command</button>
<button onclick="stop()">Stop worker</button>
<output id="result"></output>

<script>
  function sayHI() {
    worker.postMessage({'cmd': 'start', 'msg': 'Hi'});
  }

  function stop() {
    // worker.terminate() from this script would also stop the worker.
    worker.postMessage({'cmd': 'stop', 'msg': 'Bye'});
  }

  function unknownCmd() {
    worker.postMessage({'cmd': 'foobard', 'msg': '???'});
  }

  var worker = new Worker('doWork2.js');

  worker.addEventListener('message', function(e) {
    document.getElementById('result').textContent = e.data;
  }, false);
</script>

doWork2.js:

self.addEventListener('message', function(e) {
  var data = e.data;
  switch (data.cmd) {
    case 'start':
      self.postMessage('WORKER STARTED: ' + data.msg);
      break;
    case 'stop':
      self.postMessage('WORKER STOPPED: ' + data.msg +
                       '. (buttons will no longer work)');
      self.close(); // Terminates the worker.
      break;
    default:
      self.postMessage('Unknown command: ' + data.msg);
  };
}, false);

Note: There are two ways to stop a worker: by calling from the main page or by calling inside of the worker itself.

Example: Run this worker!

Say HI Send unknown command Stop worker

Examples

A.- Here’s a program that makes Node’s event loop spin freely and as fast as possible: it simply prints a dot to the console in each turn:

(functionspinForever(){setImmediate(spinForever);})();

B.- Here’s another program that adds to the one above a fibonacci(35) call in each turn, a CPU-bound task that takes quite a while to complete and that blocks the event loop making it spin slowly and clumsily. The point is simply to show that you can’t put a job like that in the event loop because Node will stop performing properly when its event loop can’t spin fast and freely due to a callback/listener/setImmediate()ed function that’s blocking.

functionfibo(n){return n >1?fibo(n -1)+fibo(n -2)1;}(functionfiboLoop(){process.stdout.write(fibo(35).toString());setImmediate(fiboLoop);})();(functionspinForever(){setImmediate(spinForever);})();

C.- The program below uses to run the fibonacci(35) calls in a background thread, so Node’s event loop isn’t blocked at all and can spin freely again at full speed:

functionfibo(n){return n >1?fibo(n -1)+fibo(n -2)1;}functioncb(err,data){process.stdout.write(data);this.eval('fibo(35)', cb);}var thread=require('webworker-threads').create();thread.eval(fibo).eval('fibo(35)', cb);(functionspinForever(){process.stdout.write(".");setImmediate(spinForever);})();

D.- This example is almost identical to the one above, only that it creates 5 threads instead of one, each running a fibonacci(35) in parallel and in parallel too with Node’s event loop that keeps spinning happily at full speed in its own thread:

functionfibo(n){return n >1?fibo(n -1)+fibo(n -2)1;}functioncb(err,data){process.stdout.write(""+this.id+""+ data);this.eval('fibo(35)', cb);}var Threads=require('webworker-threads');Threads.create().eval(fibo).eval('fibo(35)', cb);Threads.create().eval(fibo).eval('fibo(35)', cb);Threads.create().eval(fibo).eval('fibo(35)', cb);Threads.create().eval(fibo).eval('fibo(35)', cb);Threads.create().eval(fibo).eval('fibo(35)', cb);(functionspinForever(){setImmediate(spinForever);})();

E.- The next one asks to create a pool of 10 background threads, instead of creating them manually one by one:

functionfibo(n){return n >1?fibo(n -1)+fibo(n -2)1;}var numThreads=10;var threadPool=require('webworker-threads').createPool(numThreads).all.eval(fibo);threadPool.all.eval('fibo(35)',functioncb(err,data){process.stdout.write(""+this.id+""+ data);this.eval('fibo(35)', cb);});(functionspinForever(){setImmediate(spinForever);})();

F.- This is a demo of the eventEmitter API, using one thread:

var thread=require('webworker-threads').create();thread.load(__dirname+'/quickIntro_evented_childThreadCode.js');thread.emit('giveMeTheFibo',35);thread.on('theFiboIs',functioncb(data){process.stdout.write(data);this.emit('giveMeTheFibo',35);});(functionspinForever(){setImmediate(spinForever);})();

G.- This is a demo of the eventEmitter API, using a pool of threads:

var numThreads=10;var threadPool=require('webworker-threads').createPool(numThreads);threadPool.load(__dirname+'/quickIntro_evented_childThreadCode.js');threadPool.all.emit('giveMeTheFibo',35);threadPool.on('theFiboIs',functioncb(data){process.stdout.write(""+this.id+""+ data);this.emit('giveMeTheFibo',35);});(functionspinForever(){setImmediate(spinForever);})();

Права осіб, яких стосуються персональні дані

У зв’язку зі здійсненням обробки Ваших персональних даних Адміністратором даних вам належить:

  • право доступу до змісту даних, відповідно до ст. 15 RODO — право на отримання підтвердження факту опрацювання Ваших персональних даних і, якщо це так, — доступу до них, отримання їх копій та отримання наступної інформації: про цілі обробки, категорії персональних даних, інформації про одержувачів чи категорії одержувачів, яким персональні дані були або будуть розкриті, про період, протягом якого передбачається, що персональні дані будуть зберігати, або про критерії визначення такого періоду, про належні Вам права пов’язані з обробкою Ваших персональних даних, про можливість подавати скаргу до наглядового органу, про джерело отримання персональних даних, якщо вони не були отримані безпосередньо від Вас та про профайлинг та автоматизоване вироблення та ухвалення рішень;
  • право на виправлення даних відповідно до ст. 16 RODO — якщо Ви отримаєте інформацію про те, що ваші персональні дані, оброблені Адміністратором даних, є невірними, застарілими або неповними, Ви маєте право вимагати їх негайного виправлення чи доповнення;
  • право на видалення даних відповідно до ст. 17 RODO, однак, якщо Ви погодились на обробку персональних даних, запит на видалення матиме той же ефект, що і відкликання згоди;
  • право на обмеження опрацювання даних відповідно до ст. 18 RODO — Ви можете вимагати припинення їх обробки, за винятком їх зберігання, у разі настання таких обставин:
    • Ви ставите під сумнів точність персональних даних на період часу, протягом якого Адміністратор даних буде перевіряти точність персональних даних;
    • Ви ставите під сумнів законність опрацювання персональних даних Адміністратором даних;
    • Адміністратору даних більше не потрібні персональні дані для цілей опрацювання, але вони потрібні Вам даних для формування, здійснення або захисту правових претензій
    • Ви заперечили проти опрацювання до моменту прийняття рішення Адміністратором даних щодо обґрунтованості заперечення;
  • право на внесення заперечення щодо обробки даних відповідно до ст. 21 RODO;
  • Право на мобільність даних відповідно до ст. 20 RODO — отримати персональні дані, які ви надали Адміністратору даних, в структурованому, загальноприйнятому форматі, що легко зчитується машиною, якщо їх обробка відбувається на підставі Вашої Згоди, або вимагати пересилання цих даних іншому, вказаному Вами адміністратору.

Актуальные вакансии в Чехии:

Опалубщик, Арматурщик, Бетонщик

Требования:

— мужчина;

— возраст 25-60;

— умение работать в разных климатических условиях;

— хорошая физическая форма;

— желательно опыт работы в данной сфере;

— желательно без вредных привычек;​

  • По всей Чехии

  • Зарплата — 100-130 крон/час

  • 12 часов/6 дней в неделю

  • Проживание — 3500 квартиры (бытовня)

  • Питание за свой счет;

Строитель, мастер отделочных работ

Требования:

— мужчина/женщина;

— возраст 25-55;

— умение работать в разных климатических условиях

— хорошая физическая форма

— желательно опыт работы в данной сфере

— желательно без вредных привычек

  • По Чехии (Карловы Вары, Брно, Острава);

  • Зарплата — от 120 крон/час, специалисты больше;

  • 12 часов/6 дней в неделю

  • Проживание — 3500-4000 крон;

  • Питание за свой счет;

  • Внутренние работы: Плитка, гипсокартон, штукатурка, малярка

​​​

Работник Аэропорта (набор с января 2019)

Требования:

— мужчина;

— возраст 25-60;

— умение работать в разных климатических условиях;


— хорошая физическая форма;

— желательно опыт работы в данной сфере;

— без вредных привычек;

  • г. Прага

  • Зарплата — от 90 крон/час

  • 12 часов/6 дней в неделю

  • Проживание — 3500-4000 крон

  • Питание за свой счет;

  • Расстановка фишек для самолетов, контроль загрузки самолета​

Сварщик, помощник сварщика на завод по производству

металлоконструкций (сварка металлоконструкций)

Требования:

— мужчина;

— возраст 25-55;

— умение работать в разных климатических условиях;

— хорошая физическая форма;

— желательно опыт работы в данной сфере;

— желательно без вредных привычек;

  • г. Пардубице

  • Зарплата — от 120 крон на старт — 150 крон/час

  • 12 часов/день, до 340 часов в месяц.

  • Проживание — 4000 крон.

Электрик, электромонтажник 

Требования:

— мужчина;

— возраст 25-55;

— умение работать в разных климатических условиях;

— хорошая физическая форма;

— желательно опыт работы в данной сфере;

— желательно без вредных привычек;

  • г. Прага

  • Зарплата — 120-130 крон/час;

  • 10-12 часов/6 дней в неделю

  • Проживание — 5500 крон;

  • Питание за свой счет;

  • Разводка электрики в многоэтажном доме

Работник картонной фабрики 

Требования:

— м/ж, сем.пары;

— возраст 20-55;

— умение работать в разных климатических условиях;

— хорошая физическая форма;

— желательно опыт работы в данной сфере;

— желательно без вредных привычек;

  • г. Острава

  • Зарплата — 90 крон/час;

  • 11,5 часов, 6 дн./нед.

  • Проживание — 3500 крон/месяц;

  • Питание за свой счет;

  • Работа за станком, нужны права, т. к. дадут автомобиль, чтобы добираться на работу

Упаковщики на фабрику, производство, склад


Требования: 

— м/ж, сем.пары;

— возраст 20-55;

— чистоплотность; 

— ответственность;

— физическая выносливость;

— опыт работы не обязателен;

— без вредных привычек;

  • г. Плзень, Брно, Карловы Вары

  • Зарплата — от 100 крон/час

  • 12-16 час/день (по желанию), 6 дней/неделя.

  • Проживание — 4500 крон;

  • Питание за свой счет;

  • Складывать товар на палеты, готовить до отправки.

Сиделки, рабочие в дом престарелых

Требования: 

— женщина;

— возраст 20-55;

— чистоплотность; 

— ответственность;

— физическая выносливость;

— опыт работы не обязателен;

— без вредных привычек;

  • г. Прага

  • Зарплата — 80 крон/час

  • 12 часов/6 дней в неделю

  • Проживание — БЕСПЛАТНОЕ;

  • Есть обед (1500 крон/мес.)

  • Уход за пожилыми людьми

Охранник складов (КПП)

Требования: 

— мужчины до 45 лет.

— чистоплотность; 

— ответственность;

— физическая выносливость;

— без вредных привычек;

  • г. Пардубице

  • Зарплата — 90 крон/час,

  • если хорошо работает с 2-го месяца 100 кр/час

  • 10-12 ч./день, 6 дн./нед.

  • Проживание — 3600 кр/мес. (бытовня)

  • Есть обед (1500 крон/мес.)

  • Охрана складов (КПП)

Рабочий фабрики по производству матрасов

Требования: 

— женщины;

— возраст 20-55;

— чистоплотность; 

— ответственность;

— физическая выносливость;

— опыт работы не обязателен;

— без вредных привычек;


  • г. Оломоуц

  • Зарплата — 90 крон/час

  • 11 раб.час /день, 6 дней/неделя

  • Проживание — БЕСПЛАТНОЕ;

  • Питание за свой счет;

  • Работа за станком;

Рабочий шоколадной фабрики

Требования: 

— женщины;

— возраст 18-55;

— чистоплотность; 

— ответственность;

— физическая выносливость;

— опыт работы не обязателен;

— без вредных привычек;

  • г. Брандис-над-Лабем-Стара-Болеслав

  • Зарплата — 90 крон/час

  • 11 раб.час /день, 6 дней/неделя

  • Проживание — БЕСПЛАТНОЕ;

  • Питание за свой счет;

  • Изготовление, упаковка шоколадных изделий;

А также порядка 200-х актуальных и горячих вакансий которые могут Вас заинтересовать.

Для получения дополнительной информации Вы можете позвонить в офис нашей компании либо оставить свою заявку по Viber +38-067-459-20-11 и мы в кратчайшие сроки дадим Вам ответ.

Цілі обробки Ваших персональних даних та правові підстави їх обробки

Адміністратор даних здійснює обробку персональних даних Кандидатів та Працівників, надіслані за допомогою контактної форми, розташованої в підрозділах www.workservice.pl/kontakt/kandydaci та www.workservice.pl/kontakt/pracownicy з наступними цілями:

надання відповідей в межах, вказаних Вами у контактній формі. Обробка персональних даних, які в ній містяться здійснюється на підставі Вашої згоди (відповідно до ст. 6 абз. 1 літ. а) RODO); Надання Вами персональних даних є добровільним, проте необхідним для можливості скористатися функціональністю форми. Відсутність надання персональних даних призведе до неможливості надсилання даних через форму. Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.

Адміністратор даних здійснює обробку персональних даних Кандидатів, які шукають роботу, надісланих за допомогою контактної форми, та зареєстрованих на сервісі з наступними цілями:

  • реалізація рекрутингових процесів та створення і підтримка облікового запису користувача. Обробка персональних даних, які в ній містяться здійснюється на підставі Вашої згоди (відповідно до ст. 6 абз. 1 літ. а) RODO); Надання Вами персональних даних є добровільним, проте необхідним для реєстрації на сервісі. Відсутність надання персональних даних призведе до неможливості здійснення реєстрації та створення облікового запису на сервісі. Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.
  • профайлинг даних Кандидатів — порівняння наданої Вами інформації в автоматичному режимі і автоматичний підбір Вашого профілю для пропозицій щодо працевлаштування з метою реалізації послуг на основі новітніх технологічних рішень. Профайлинг даних відбувається у випадку надання Вами згоди на обробку даних у цій сфері (правова підстава ст. 6. абз. 1 літ. а у зв. З ст. 22 абз. 1 і 4 Регламенту RODO). Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.

Адміністратор даних здійснює обробку персональних даних Кандидатів, які зареєстровані та мають обліковий запис на сервісі rms.workservice.pl з наступними цілями:

  • реалізація рекрутингових процесів та підтримка облікового запису користувача. Обробка персональних даних, які в ній містяться здійснюється на підставі Вашої згоди, наданої в процесі реєстрації облікового запису (відповідно до ст. 6 абз. 1 літ. а) RODO); Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.
  • профайлинг даних Кандидатів — порівняння наданої Вами інформації в автоматичному режимі і автоматичний підбір Вашого профілю для пропозицій щодо працевлаштування з метою реалізації послуг на основі новітніх технологічних рішень. Профайлинг даних відбувається у випадку надання Вами згоди на обробку даних у цій сфері (правова підстава ст. 6. абз. 1 літ. а у зв. З ст. 22 абз. 1 і 4 Регламенту RODO). Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.

Адміністратор здійснює обробку даних, надісланих через контактну форму, отриманих в процесі реєстрації, які обробляються як частина профілю зареєстрованого користувача, з наступними цілями:

  • забезпечення будь-яких претензій Адміністратора даних, Користувача або Неавторизованого користувача, якщо такі претензії виникають, на підставі законно обґрунтованого інтересу Адміністратора Даних що полягає у захисті від претензій третіх осіб або з метою висловлення власних претензій (відповідно до ст. 6 абз. 1 літ f) RODO); обробка персональних даних буде здійснюватися до закінчення строку давності претензій, пов’язаних з обробкою Ваших персональних даних.
  • маркетингу та промоції продуктів та послуг — у випадку надання згоди (відповідно до ст. 6 абз. 1 літ а) RODO); Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.
  • надсилання комерційної інформації (відповідно до ст.10 абз. 2 Закону про надання послуг в електронному вигляді та ст. 6 абз.1 літ. a) RODO); Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.
  • використання телекомунікаційного термінального обладнання у прямих маркетингових цілях у випадку надання згоди (ст. 172 Закону від 16 липня 2004 р. Телекомунікаційне право та ст. 6 абз.1 літ. a) RODO); Обробка персональних даних буде здійснюватися до моменту відкликання Вами згоди на здійснення такої обробки.

Цели обработки персональных данных, а также правовые основания обработки персональных данных.

Администратор данных обрабатывает персональные данные кандидатов и сотрудников передаваемых через контактную форму, расположенную в разделах www.workservice.pl/kontakt/kandydaci и www.workservice.pl/kontakt/pracownicy в следующих целях:

получения ответа в отношении указанной кандидатом области в контактной Форме. Обработка персональных данных, содержащихся в ней, осуществляется на основании Вашего согласия (согласно z art. 6 ust.1 lit. a) RODO); Указание персональных данных является добровольным, но необходимым для возможности использования функциональности формы. Отсутствие указания персональных данных может привести к невозможности отправки данных через форму. Персональные данные обрабатываются до момента отзыва вами согласия на такую обработку.

Администратор данных обрабатывает персональные данные кандидатов, ищущих работу с помощью регистрационной формы и регистрирующихся на сайте в следующих целях:

  • осуществление процессов рекрутинга, а также создания и поддержки учетной записи пользователя. Обработка персональных данных, содержащихся в ней, осуществляется на основании Вашего согласия (согласно с art. 6 ust.1 lit. a) RODO); Указание персональных данных является добровольным, но необходимым для регистрации в сервисе. Отсутствие указания персональных данных может привести к невозможности регистрации и создания аккаунта на сайте. Персональные данные обрабатываются до момента отзыва вами согласия на такую обработку.
  • профилирования данных Кандидатов — составление подаваемой Вами информации в автоматическом режиме и автоматическая подборка профиля пользователя под предложения работы для реализации услуг на основе новейших технологий. Профилирование данных осуществляется в случае предоставления вами согласия на обработку персональных данных в этой сфере (правовая основа art. 6 ust. 1 lit. a w zw. z art. 22 ust. 1 i 4 Распоряжения RODO). Персональные данные обрабатываются до момента отзыва вами согласия на такую обработку.

Администратор Данных обрабатывает персональные данные Кандидатов, зарегистрированных и имеющих учетную запись на сайте rms.workservice.pl в следующих целях:

  • осуществления процессов рекрутинга и обслуживания учетной записи пользователя. Обработка персональных данных, содержащихся в ней, осуществляется на основании вашего согласия, выраженного при регистрации учетной записи (в соответствии с art. 6 ust.1 lit. a) RODO); персональные данные обрабатываются до момента отзыва вами согласия на такую обработку.
  • профилирования данных Кандидатов — составление подаваемой Вами информации в автоматическом режиме и автоматическая настройка профиля пользователя под предложения работы для реализации услуг на основе новейших технологий. Профилирование данных осуществляется в случае предоставления вами согласия на обработку персональных данных в этой сфере (правовая основа art. 6 ust. 1 lit. a w zw. z art. 22 ust. 1 i 4 Распоряжения RODO) персональные Данные обрабатываются до момента отзыва вами согласия на такую обработку.

Администратор обрабатывает данные, передаваемые через контактную форму, собранные во время регистрации и обработанные в профиле пользователя, зарегистрированного для следующих целей:

  • защиты возможных претензий Администратора Данных, Пользователя или неавторизованого пользователя, если такие претензии возникнут, на основании юридически обоснованного интереса Администратора Данных заключающегося на защите от претензий третьих лиц или расследовании их претензий (в соответствии с art. 6 ust. 1 lit. F RODO); Персональные данные будут обрабатываться до тех пор, пока претензии, связанные с обработкой ваших персональных данных, не будут ограничены по времени
  • маркетинга и продвижения продукции и услуг — в случае согласия (в соответствии с art. 6 ust.1 lit. a) RODO)); персональные Данные обрабатываются до момента отзыва вами согласия на такую обработку.
  • передачи коммерческой информации (в соответствии с z art. 10 ust. 2 u.ś.u.d.e. i art. 6 ust.1 lit. a) RODO); персональные Данные обрабатываются до момента отзыва вами согласия на такую обработку.
  • использования телекоммуникационных устройств для непосредственного маркетинга, в случае выражения согласия (art. 172 закона от 16 июля 2004 r. Право, телекоммуникации art. 6 ust.1 lit. a) RODO). Персональные данные обрабатываются до момента отзыва вами согласия на такую обработку

Начало работы

Объекты Web Worker запускаются в изолированном потоке. По этой причине выполняемый ими код должен храниться в отдельном файле. Однако сначала необходимо создать новый объект на главной странице. Конструктор принимает название скрипта объекта:

var worker = new Worker('task.js');

Если указанный файл существует, браузер создаст новый поток объекта Worker, загружаемый асинхронно. Объект не запускается до полной загрузки и выполнения файла. Если путь к объекту Worker возвращает ошибку 404, его выполнение прекращается без уведомлений.

После создания объекта Worker его можно запустить с помощью метода , как показано ниже.

worker.postMessage(); // Start the worker.

Взаимодействие с объектами Worker путем обмена сообщениями

Взаимодействие объекта Worker с исходной страницей осуществляется с помощью модели событий и метода . В зависимости от типа и версии браузера метод принимает строку или объект JSON в качестве единственного аргумента. Новейшие версии современных браузеров поддерживают передачу объектов JSON.

Ниже приведен пример использования строки для передачи сообщения Hello World объекту Worker в скрипте doWork.js. Объект Worker просто возвращает полученное сообщение.

Основной скрипт:

var worker = new Worker('doWork.js');

worker.addEventListener('message', function(e) {
  console.log('Worker said: ', e.data);
}, false);

worker.postMessage('Hello World'); // Send data to our worker.

doWork.js (объект Worker)

self.addEventListener('message', function(e) {
  self.postMessage(e.data);
}, false);

Если метод вызывается на главной странице, объект Worker обрабатывает сообщение, определяя обработчик для события . Информационное наполнение сообщения (в данном случае – Hello World) доступно в объекте . Хотя этот конкретный пример и не является интересным, он демонстрирует, что метод также служит для передачи данных обратно в главный поток. Удобство использования

Сообщения, передаваемые между главной страницей и объектами Worker, копируются, но общий доступ к ним не предоставляется. Так, в следующем примере свойство msg сообщения JSON доступно в обоих местах. Может показаться, что элемент передается непосредственно объекту Worker, хотя действие выполняется в выделенном пространстве. В действительности при передаче в объект Worker элемент преобразуется в последовательную форму, а обратное преобразование затем происходит в конце пути. Страница и объект Worker не имеют общего доступа к одному экземпляру элемента, и в результате каждый раз при передаче создается его дубликат. Большинство браузеров реализуют эту функцию путем автоматической кодировки и декодирования значения в конечных точках маршрута, используя для этого технологию JSON.

Ниже приведен более сложный пример, в котором обмен сообщениями осуществляется с помощью объектов JSON.

Основной скрипт:

<button onclick="sayHI()">Say HI</button>
<button onclick="unknownCmd()">Send unknown command</button>
<button onclick="stop()">Stop worker</button>
<output id="result"></output>

<script>
  function sayHI() {
    worker.postMessage({'cmd': 'start', 'msg': 'Hi'});
  }

  function stop() {
    // Calling worker.terminate() from this script would also stop the worker.
    worker.postMessage({'cmd': 'stop', 'msg': 'Bye'});
  }

  function unknownCmd() {
    worker.postMessage({'cmd': 'foobard', 'msg': '???'});
  }

  var worker = new Worker('doWork2.js');

  worker.addEventListener('message', function(e) {
    document.getElementById('result').textContent = e.data;
  }, false);
</script>

doWork2.js

self.addEventListener('message', function(e) {
  var data = e.data;
  switch (data.cmd) {
    case 'start':
      self.postMessage('WORKER STARTED: ' + data.msg);
      break;
    case 'stop':
      self.postMessage('WORKER STOPPED: ' + data.msg + '. (buttons will no longer work)');
      self.close(); // Terminates the worker.
      break;
    default:
      self.postMessage('Unknown command: ' + data.msg);
  };
}, false);

Примечание. Прекратить работу объекта Worker можно двумя способами: вызвать метод на главной странице или в самом объекте.

Пример. Запустите этот объект Worker.

Поздороваться Послать неизвестную команду Остановить объект Worker

Analityka internetowa

Administrator realizuje funkcje pozyskiwania informacji o Użytkownikach i ich zachowaniach w następujący sposób:

  • poprzez gromadzenie plików cookies;
  • poprzez korzystanie z Google Analytics.

Administrator oświadcza, że korzysta z Google Analytics, serwisu analityki internetowej udostępnionego przez Google Inc. (dalej: „Google”). Google Analytics przetwarza pliki cookies zawierające informacje dotyczące oglądalności stron internetowych, a także profilu systemowego Użytkownika (w tym jego adresie IP).

Wspomniane wyżej informacje są przekazywane Google i przechowywane na serwerach zlokalizowanych w Stanach Zjednoczonych. Google wykorzystuje te informacje w celu oceny korzystania z Serwisów przez Użytkownika, tworzenia raportów dotyczących ruchu na Serwisach oraz świadczenia innych usług związanych z ruchem na Serwisach i korzystaniem z sieci Internet.

Google może również przekazywać powyższe informacje osobom trzecim, o ile jest to wymagane prawnie lub jeśli osoby trzecie przetwarzają te informacje na zlecenie Google.


С этим читают