Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет статью про Web Workers #5190

Merged
merged 19 commits into from Mar 27, 2024

Conversation

ByMarsel
Copy link
Contributor

@ByMarsel ByMarsel commented Mar 5, 2024

Описание

Closes Статья "Использование Web Workers"

Чек-лист

  • Текст оформлен согласно руководству по стилю
  • Ссылки на внутренние материалы начинаются со слеша и заканчиваются слэшем либо якорем на заголовок (/css/color/, /tools/json/, /tools/gulp/#kak-ponyat)
  • Ссылки на картинки, видео и демки относительные (images/example.png, demos/example/, ../demos/example/)

@github-actions github-actions bot added js Контент по JavaScript статья Расширенный материал labels Mar 5, 2024
@ByMarsel
Copy link
Contributor Author

ByMarsel commented Mar 5, 2024

Привет!
Это моя первая попытка контрибьюта в доку, поэтому не судите, пожалуйста строго. Очень буду рад фидбэку, особенно о том насколько статья попала в ожидания issue.

@HellSquirrel
Copy link
Member

@ByMarsel а докинь еще себя, пожалуйста в папочку People прямо в этом PR. Примерно вот так:
https://github.com/doka-guide/content/blob/main/people/ipogorelova/index.md?plain=1 :) Пасиба!

Copy link
Member

@HellSquirrel HellSquirrel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я посмотрела только кусочек. Оставила немножко комментов. Чуть позже принесу еще :)
Очень крутая статья. Спасибо тебе большое 💪

js/web-workers/index.md Outdated Show resolved Hide resolved

## Что такое Web Worker?

Web Worker — это функциональность JavaScript, которая позволяет выполнять скрипты в фоновом режиме параллельно с основным потоком выполнения, не блокируя его и не влияя на производительность пользовательского интерфейса. Это дает возможность выполнять сложные вычисления или обработку данных без замедления отзывчивости веб-страницы.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может как-то так?)

Suggested change
Web Worker — это функциональность JavaScript, которая позволяет выполнять скрипты в фоновом режиме параллельно с основным потоком выполнения, не блокируя его и не влияя на производительность пользовательского интерфейса. Это дает возможность выполнять сложные вычисления или обработку данных без замедления отзывчивости веб-страницы.
WebWorker — это функциональность JavaScript, которая позволяет выполнять код вне основного потока, не блокируя его. Долгие или сложные вычисления на WebWorkers не блокируют пользовательский интерфейс.


Web Worker — это функциональность JavaScript, которая позволяет выполнять скрипты в фоновом режиме параллельно с основным потоком выполнения, не блокируя его и не влияя на производительность пользовательского интерфейса. Это дает возможность выполнять сложные вычисления или обработку данных без замедления отзывчивости веб-страницы.

По сути, это скрипт js, который запускается в отдельном потоке браузера и выполняет код параллельно основному потоку браузера. К тому же Web Workers имеют свой собственный контекст, отличный от window.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот тут надо очень аккуратно. WebWorker (в хроме) выполняется в отдельном isolate https://v8docs.nodesource.com/node-0.8/d5/dda/classv8_1_1_isolate.html. Это отдельный экземпляр JS движка. Это чуть хитрее чем отдельный поток
Давай как-то попробуем это донести? )


По сути, это скрипт js, который запускается в отдельном потоке браузера и выполняет код параллельно основному потоку браузера. К тому же Web Workers имеют свой собственный контекст, отличный от window.

Что скрывается под фразой “собственный контекст”? Если упростить, то внутри Web Workers недоступны **`window`**, **`document`** или **`parent`** объекты, то есть нам недоступно управление DOM. По крайней мере, напрямую, но ничто не мешает нам манипулировать DOM косвенно, например, через отправку команд в window-поток с помощью `postMessage`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот что-то такое :)

Suggested change
Что скрывается под фразой “собственный контекст”? Если упростить, то внутри Web Workers недоступны **`window`**, **`document`** или **`parent`** объекты, то есть нам недоступно управление DOM. По крайней мере, напрямую, но ничто не мешает нам манипулировать DOM косвенно, например, через отправку команд в window-поток с помощью `postMessage`.
Разберёмся что означает “собственный контекст”? Контекст выполнения WebWorkers [WorkerGlobalScope](https://html.spec.whatwg.org/multipage/workers.html#workerglobalscope), отличается от контекста выполнения для обычного потока. В нем недоступны объекты window и document и DOM API. Чтобы управлять DOM можно использовать другой механизм – отправку команд в основной поток через `postMessage`

const worker = new Worker('worker.js');
```

Давайте теперь разберёмся, как нам связать главный поток браузера и поток Worker. Они общаются между собой с помощью сообщений:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно использовать термин поток выполнения... мб будет чуть-чуть понятнее.

worker.postMessage({ message: '415тый, я база, ответьте' });
```

Далее в Web Worker с помощью свойства onmessage, которое находится в глобальном контексте Worker или другими словами `self`, мы записываем туда наш обработчик сообщений из вышестоящего контекста. Обратите внимание, что postMessage или self.postMessage мы можем вызвать из любого места нашего Worker.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы написала про self где-то в начале, там где мы говорим про глобальный поток

@github-actions github-actions bot added the дока Справочный материал label Mar 24, 2024
@HellSquirrel
Copy link
Member

Супер! Я чуть подредачу и помержим.

@TatianaFokina
Copy link
Contributor

TatianaFokina commented Mar 27, 2024

У меня фундаментальный вопрос: а можем транслит использовать и называть их веб-воркеры/воркеры везде? Насколько это устоявшийся термин? Или это как с API или, не знаю, user agent, которые в переводе ну такое.

@HellSquirrel
Copy link
Member

HellSquirrel commented Mar 27, 2024

О! Я задавалась тем же самым вопросом при редактировании. У меня даже был вариант "веб работники" :)
Я не могу уверенно утверждать что воркер это устоявшееся понятие, но кажется такая замена выглядит более естественно чем, например, такой вариант https://developer.mozilla.org/ru/docs/Web/API/Web_Workers_API/Using_web_workers
Но так как я не автор статьи, давай уточним у @ByMarsel окей ли он с такой заменой :)

@ByMarsel
Copy link
Contributor Author

Вообще я не против, но мне кажется что Web Worker гуглится очень хорошо, в сравнении с Веб Воркер и тем более Веб работник. Что думаете? Я голосую за вариант Web Worker.

@HellSquirrel @TatianaFokina

@HellSquirrel
Copy link
Member

Пусть будут воркеры :) Поехали 🚀

@HellSquirrel HellSquirrel merged commit 2c88408 into doka-guide:main Mar 27, 2024
6 checks passed
Copy link

Превью контента из f4e356a опубликовано.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js Контент по JavaScript дока Справочный материал статья Расширенный материал
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Статья "Использование Web Workers"
3 participants