More Related Content
PDF
Projet de fin d'etude.pdf PDF
Mise en place d'une GTA : Vers une nouvelle organisation fonctionnelle des ac... PPTX
الاستاذ البشير حماني استشاري و مكون في المخاطر الصناعية "محاضرة بعنوان " ... PDF
Web-conference | DDMRP et flux tirés PDF
PPTX
Les tiers lieux, de nouveaux espaces pour travailler autrement DOC
PPTX
Viewers also liked
PPTX
PDF
PPTX
three.jsを「遅い」と思わせないデータの扱い方 PDF
そろそろ押さえておきたい AngularJSのセキュリティ PPTX
クラウド電話を使ってモーニングコールで起床する生活 PDF
Web Worker +α - HTML5/JavaScript and Service Worker API PPTX
PDF
JavaScript 実践講座 Framework, Tool, Performance PDF
PDF
PDF
PDF
Prototypeベース in JavaScript PPTX
PDF
FileReader and canvas and server silde PDF
役に立ちそうだけど、やっぱり役に立たなそうな技術Quine PDF
PDF
PPTX
JavaScript : What is it really? AND Some new features in ES6 PDF
海外で注目されてるJs framework “mithril”の特徴 PPT
Web Worker - Freelancing on the Web for Pinoys Recently uploaded
PDF
20260119_VIoTLT_vol22_kitazaki_v1___.pdf PDF
TomokaEdakawa_職種と講義の関係推定に基づく履修支援システムの基礎検討_HCI2026 PDF
自転車ユーザ参加型路面画像センシングによる点字ブロック検出における性能向上方法の模索 (20260123 SeMI研) PDF
アジャイル導入が止まる3つの壁 ─ 文化・他部門・組織プロセスをどう乗り越えるか PDF
maisugimoto_曖昧さを含む仕様書の改善を目的としたアノテーション支援ツールの検討_HCI2025.pdf PDF
ST2024_PM1_2_Case_study_of_local_newspaper_company.pdf PDF
Team Topology Adaptive Organizational Design for Rapid Delivery of Valuable S... Web Workerで○○する話
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
例1 Busyなループ
function loopSync(){
for (var i = 0; i < 1000000000; i++) {
// busyなループ
}
console.log('finish!');
}
document.getElementById('btn').addEventListener('click', function(evt) {
loopSync(); // これが終わるまで何もかも待たされる
}, false);
- 7.
- 8.
- 9.
- 10.
Workerを使うと...
function loopSync() {
for(var i = 0; i < 1000000000; i++) {
// busyなループ
}
console.log('finish!');
}
loopSync();
document.getElementById('btn').addEventListener('click', function(evt) {
new Worker('worker.js');
}, false);
重い部分をworker用にスクリプトごと分離
Workerを作って使う
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
Workerの種類
Dedicated Worker :今まで見てきたやつ
Shared Worker : 複数のスクリプトから共有できるやつ
Service Worker : オフラインアプリにするときに役に立つやつ
Chrome Worker : Firefox限定(アドオン用?)
Audio Worker : オーディオ処理用(らしい)
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
UI側
function Counter(props) {
const{ count, plus, minus } = props;
return (
<div>
<div>{count}</div>
<button onClick={plus}>+</button>
<button onClick={minus}>-</button>
</div>
);
}
Counterコンポーネントを用意
- 33.
UI側
import React from'react';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {};
this.worker = props.worker;
this.worker.onmessage = evt => {
this.setState(evt.data);
};
}
/** 右へ続く -> **/
/** 続き **/
render() {
const { count } = this.state;
return (
<Counter count={count}
plus={this.handlePlus.bind(this)}
minus={this.handleMinus.bind(this)} />
);
}
/** 次のスライドへ続く **/
ControllerViewとしてAppを用意
- 34.
UI側
/** 前のスライドからの続き **/
handlePlus(){
this.worker.postMessage({
type: 'UPDATE_COUNT',
payload: {
value: 1
}
});
}
/** 右へ続く -> **/
/** 続き **/
handleMinus() {
this.worker.postMessage({
type: 'UPDATE_COUNT',
payload: {
value: -1
}
});
}
}
アプリケーションコンテナを用意
- 35.
UI側
import { render} from 'react-dom';
render(
<App worker={new Worker('back.js')} />,
document.getElementById('app')
);
アプリの起動部分
- 36.
Worker側
const state ={
count: 0
};
onmessage = evt => {
postMessage(store(state, evt.data));
};
// initialize
postMessage(state);
function store(state, action) {
const { type, payload } = action;
switch (type) {
case 'UPDATE_COUNT':
return updateCount(state, payload);
default:
return state;
}
}
function updateCount(state, payload) {
const { value } = payload;
state.count += value;
return state;
}
- 37.
- 38.
- 39.