Які випадки використання для веб-працівників? [зачинено]


174

Я шукаю сценарії в реальному світі для використання Web Workers API .


Чи підтримують їх мобільні / веб-платформи?
dmp

Не знаю точно, але гадаю, що вони є.
Сергій Ілинський

6
Підтримка браузера @danp: caniuse.com/webworkers
Dheeraj Vepakomma

1
Я написав випадок, коли ми спочатку використовували веб-працівника, а потім визначили, що нам краще без нього - windward.net/blogs/web-workers-abandon/#.Vl3QdXarQ-U
Девід Тілен

Відповіді:


143
  • Джон Резіг (слава jQuery) має купу цікавих прикладів використання тут веб-працівників - ігор, графіки, криптовалют.

  • Інше використання - це введення / виведення Інтернету - іншими словами, опитування URL-адрес у фоновому режимі. Таким чином, ви не блокуєте інтерфейс користувача, який чекає результатів опитування.

  • Ще одне практичне використання: в Беспіні вони використовують веб-працівників для виділення синтаксису, який ви не хочете блокувати редагування коду, використовуючи додаток.

  • Від Mozilla : Одним із способів корисності працівників є надання дозволу вашому коду виконувати обчислювальні процеси, не блокуючи потік інтерфейсу користувача.

    Як практичний приклад, уявіть додаток, у якому є велика таблиця #s (це реальний світ, BTW - взято з програми, яку я запрограмував ~ 2 роки тому). Ви можете змінити один # у таблиці за допомогою поля введення, а ще ряд інших чисел у різних стовпцях буде повторно обчислений у досить інтенсивному процесі.

    Старий робочий процес був таким чином: Змініть #. Ідіть, випийте каву, тоді як JavaScript розчавлюється через зміни інших номерів, і веб-сторінка не відповідає 3 хвилини - після того, як я оптимізував її до пекла і назад. Поверніться з кавою. Змініть секунду #. Повторіть багато разів. Натисніть кнопку Зберегти.

    Новим робочим процесом з працівниками може бути: Змінити #. Отримайте повідомлення про стан, що щось перераховується, але ви можете змінити інші #. Змінити більше #. Закінчивши зміну, зачекайте, поки зміни статусу стануть "усі розрахунки завершені, тепер ви можете переглянути остаточний номер і зберегти".


5
Чудові посилання! Я ніколи не чув про Робітників ... ммм, Робітників. (Час поїхати прийняти довгий гарячий душ ...)
Пітер Роуелл

51
Я знаю, що це дворічна відповідь, але я просто хотів зазначити, що вам не потрібно мати веб-працівників для пункту №2 (опитувальні URL-адреси). XHR відбувається асинхронно і не блокується; не потрібно запускати запити XHR в окремий потік. (Звичайно, у сучасному додатку ви хочете використовувати WebSockets замість опитування.)
josh3736,

6
@ josh3736 - Ви маєте рацію, але мені зараз цікаво, чи багато паралельних запитів на асинхронізацію XHR можуть якось зробити браузер нещасним? Крім того, вам потрібні місцеві ресурси для обробки відповідей XHR, де працівники можуть бути корисними.
DVK

Якщо всі паралельні запити мають один і той же сервер, ви натиснете ліміт імені хоста десь між 2 і 9 одночасними з'єднаннями. (Я припускаю, що ліміт застосовується для всіх з'єднань, незалежно від того, ініційований він від основного потоку або від робочого.) Звичайно, якщо у вас одночасно працює 10 одночасних запитів, вам, ймовірно, потрібно переосмислити дизайн програми.
josh3736

2
Вибачте просте моє запитання, але що ви називаєте "#" у своєму прикладі вище?
маневрений

35

Я використовував їх для надсилання більшої кількості даних з браузера на сервер. Очевидно, ви можете це зробити за допомогою регулярних дзвінків AJAX, але якщо це займе одне з дорогоцінних з'єднань на ім’я хоста. Крім того, якщо користувач здійснює перехід сторінки під час цього процесу (наприклад, натискає на посилання), ваші об’єкти JavaScript з попередньої сторінки відходять, і ви не можете обробляти зворотні дзвінки. Якщо використовується веб-працівник, ця діяльність відбувається поза діапазоном, тому ви маєте кращу гарантію, що вона завершиться.


2
Але вам доведеться обмінятися повідомленням з веб-працівником. Коли вартість цієї операції заслуговує на користь?
Danielo515

6

Ще один випадок використання:

Стиснення / видалення файлів у фоновому режимі, якщо у вас багато зображень та інших медіа-файлів, які обмінюються з сервера у стисненому форматі.


39
Це не повинно відбуватися в JavaScript. Зображення вже стиснуті (PNG, JPEG) за допомогою алгоритмів, призначених для ефективного стиснення даних зображень. Накидання іншого шару стиснення зверху може фактично збільшити розмір даних. Для інших типів даних (наприклад, великий файл JSON), стиснення має оброблятися браузером, використовуючи стандартний HTTP gzipping. Якщо ви робите стиснення в JavaScript, ви, ймовірно, робите це неправильно .
josh3736

11
Я бачу, що деякі користувачі дискваліфікують випадок використання, але ось що я мав намір сказати. розгляньте таку програму, як MS Word, як потужний редактор документів, за допомогою якого ви можете вставляти зображення, музичні файли, дані, аркуші excel тощо тощо в один файл. і вважайте, що у вас є веб-клієнт і клієнт настільних ПК та клієнт IOS / Android. У такому випадку використання ви можете зберігати весь вміст файлу у zip-файлі та потім розпаковувати кожного клієнта.
сбр

3
Закладка Instapaper стискає збережену сторінку перед відправкою на сервер. Це економить час і пропускну здатність.
stevendaniels

12
@ josh3736 Єдине, що може зробити браузер - це згорнути файл з веб-сервера (або кеш-пам’ятника браузера). Він не може розпаковувати дані з локального сховища, ані з веб-розетки, а також не може стискати взагалі. Веб-додатки надсилають постійно зростаючу кількість даних вище за течією, і стиснення для цього надзвичайно корисно. Так само діє рік тому, коли це було розміщено: Якщо ви не можете придумати жодних дійсних випадків використання для стиснення JavaScript, вам, мабуть, не вистачає фантазії.
Адрія

1
@Adria: Стандарт веб-сокетів додає підтримку стиснення . Якщо ви маєте справу з зображеннями, створеними в браузері ( <canvas>), ви можете отримати дані зображення у стисненому форматі (тобто png). Моя думка полягала не в тому, що ніколи не доречно стискати в JS; моя думка полягала в тому, що в більшості випадків це не так , і для більшості випадків - особливо це стосується зображень, про що йдеться у цій відповіді - є краща альтернатива згортанню власного стиснення.
josh3736
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.