[ã¢ããã€ã¹ãèªã]ãµã€ã¯ã«ã®ä»ã®19ã®éšå
ããŒã1ïŒ ãšã³ãžã³ãã©ã³ã¿ã€ã ã¡ã«ããºã ãã³ãŒã«ã¹ã¿ãã¯ã®æŠèŠ
ããŒã2ïŒ V8å éšãšã³ãŒãã®æé©åã«ã€ããŠ
ããŒã3ïŒ ã¡ã¢ãªç®¡çã4çš®é¡ã®ã¡ã¢ãªãªãŒã¯ãããã³ããããšã®æŠã
ããŒã4ïŒ ã€ãã³ãã«ãŒããéåæãããã³éåæ/åŸ æ©ã䜿çšããŠã³ãŒããæ¹åãã5ã€ã®æ¹æ³
ããŒã5ïŒ WebSocketãšHTTP / 2 + SSEã äœãéžã¶ïŒ
ããŒã6ïŒ WebAssemblyã®æ©èœãšç¯å²
ããŒã7ïŒ Web Workersãš5ã€ã®äœ¿çšã·ããªãª
ããŒã8ïŒ ãµãŒãã¹ã¯ãŒã«ãŒ
ããŒã9ïŒ Webããã·ã¥éç¥
ããŒã10ïŒ MutationObserverã䜿çšããŠDOMã®å€æŽã远跡ãã
ããŒã11ïŒ WebããŒãžã¬ã³ããªã³ã°ãšã³ãžã³ãšããã©ãŒãã³ã¹ãæé©åããããã®ãã³ã
ããŒã12ïŒ ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ãæé©åãããã©ãŠã¶ãŒã®ãããã¯ãŒã¯ãµãã·ã¹ãã
ããŒã12ïŒ ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ãæé©åãããã©ãŠã¶ãŒã®ãããã¯ãŒã¯ãµãã·ã¹ãã
ããŒã13ïŒ CSSãšJavaScriptã䜿çšããã¢ãã¡ãŒã·ã§ã³
ããŒã14ïŒ JSã®ä»çµã¿ïŒæœè±¡æ§æããªãŒã解æãããã³ãã®æé©å
ããŒã15ïŒ JSã®ä»çµã¿ïŒã¯ã©ã¹ãšç¶æ¿ãBabelããã³TypeScriptã§ã®ãã©ã³ã¹ãã¬ãŒã·ã§ã³
ããŒã16ïŒ JSã®ä»çµã¿ïŒã¹ãã¬ãŒãž
ããŒã17ïŒ JSã®ä»çµã¿ïŒShadow DOMãã¯ãããžãŒãšWebã³ã³ããŒãã³ã
ããŒã18ïŒ JSã®ä»çµã¿ïŒWebRTCããã³P2Péä¿¡ã¡ã«ããºã
ããŒã19ïŒ JSã®ä»çµã¿ïŒã«ã¹ã¿ã èŠçŽ
ããŒã2ïŒ V8å éšãšã³ãŒãã®æé©åã«ã€ããŠ
ããŒã3ïŒ ã¡ã¢ãªç®¡çã4çš®é¡ã®ã¡ã¢ãªãªãŒã¯ãããã³ããããšã®æŠã
ããŒã4ïŒ ã€ãã³ãã«ãŒããéåæãããã³éåæ/åŸ æ©ã䜿çšããŠã³ãŒããæ¹åãã5ã€ã®æ¹æ³
ããŒã5ïŒ WebSocketãšHTTP / 2 + SSEã äœãéžã¶ïŒ
ããŒã6ïŒ WebAssemblyã®æ©èœãšç¯å²
ããŒã7ïŒ Web Workersãš5ã€ã®äœ¿çšã·ããªãª
ããŒã8ïŒ ãµãŒãã¹ã¯ãŒã«ãŒ
ããŒã9ïŒ Webããã·ã¥éç¥
ããŒã10ïŒ MutationObserverã䜿çšããŠDOMã®å€æŽã远跡ãã
ããŒã11ïŒ WebããŒãžã¬ã³ããªã³ã°ãšã³ãžã³ãšããã©ãŒãã³ã¹ãæé©åããããã®ãã³ã
ããŒã12ïŒ ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ãæé©åãããã©ãŠã¶ãŒã®ãããã¯ãŒã¯ãµãã·ã¹ãã
ããŒã12ïŒ ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ãæé©åãããã©ãŠã¶ãŒã®ãããã¯ãŒã¯ãµãã·ã¹ãã
ããŒã13ïŒ CSSãšJavaScriptã䜿çšããã¢ãã¡ãŒã·ã§ã³
ããŒã14ïŒ JSã®ä»çµã¿ïŒæœè±¡æ§æããªãŒã解æãããã³ãã®æé©å
ããŒã15ïŒ JSã®ä»çµã¿ïŒã¯ã©ã¹ãšç¶æ¿ãBabelããã³TypeScriptã§ã®ãã©ã³ã¹ãã¬ãŒã·ã§ã³
ããŒã16ïŒ JSã®ä»çµã¿ïŒã¹ãã¬ãŒãž
ããŒã17ïŒ JSã®ä»çµã¿ïŒShadow DOMãã¯ãããžãŒãšWebã³ã³ããŒãã³ã
ããŒã18ïŒ JSã®ä»çµã¿ïŒWebRTCããã³P2Péä¿¡ã¡ã«ããºã
ããŒã19ïŒ JSã®ä»çµã¿ïŒã«ã¹ã¿ã èŠçŽ
ããŸããŸãªJavaScriptã¡ã«ããºã ã®æ©èœã«é¢ããäžé£ã®è³æã®ç¬¬7éšã®ç¿»èš³ãå ¬éããŠããŸãã ä»æ¥ã®ãããã¯ã¯ãŠã§ãã¯ãŒã«ãŒã§ãã ç¹ã«ãããŸããŸãªã¿ã€ãã®Webã¯ãŒã«ãŒã«ã€ããŠãããããæ§æãããŠããéšåã®å ±åäœæ¥ãã©ã®ããã«ç·šæãããŠããããããã³ããŸããŸãªäœ¿çšã·ããªãªã§çºçããå¯èœæ§ã®ããæ©èœãšå¶éã«ã€ããŠã§ãã ããã§ã¯ãWebã¯ãŒã«ãŒã®å®çšçãªã¢ããªã±ãŒã·ã§ã³ã®5ã€ã®ãªãã·ã§ã³ã衚瀺ãããŸãã
éåæããã°ã©ãã³ã°ã®å¶é
Webã¯ãŒã«ãŒã«ã€ããŠèª¬æããåã«ãJavaScriptã¯ã·ã³ã°ã«ã¹ã¬ããèšèªã§ããããéåæã³ãŒãå®è¡ã®å¯èœæ§ããµããŒãããŠããããšãæãåºããŠãã ããã
JSãããžã§ã¯ãã§ã®éåæããã°ã©ãã³ã°ãšãã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã®ã·ãªãŒãºã®ä»¥åã®è³æã®1ã€ã«åœãŠãããŸãã ã
éåæã³ãŒãã®å®è¡ã«ãããWebã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯æ£åžžã«æ©èœãããŠãŒã¶ãŒã³ãã³ãã«å¿çã§ããŸãã ã·ã¹ãã ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«é¢é£ããæäœãæåã«å®è¡ãããããã«ãã€ãã³ãã«ãŒãã®è² è·ããèšç»ãããŸãã
éåæããã°ã©ãã³ã°ã¡ãœããã䜿çšããè¯ãäŸã¯ãAJAXãªã¯ãšã¹ããå®è¡ããæè¡ã«ãã£ãŠç€ºãããŸãã å¿çã®åŸ æ©ã«ã¯å€ãã®æéãããããããèŠæ±ãéåæã«è¡ãããšãã§ããã¯ã©ã€ã¢ã³ããå¿çãåŸ æ©ããŠããéã«ãèŠæ±ã«é¢ä¿ã®ãªãã³ãŒããå®è¡ã§ããŸãã
// jQuery jQuery.ajax({ url: 'https://api.example.com/endpoint', success: function(response) { // , } });
ãã ãããã®ã¢ãããŒãã¯æ¬¡ã®åé¡ã瀺ããŸãããªã¯ãšã¹ãã¯ãã©ãŠã¶ã®WEB APIã«ãã£ãŠåŠçãããŸãã ä»»æã®ã³ãŒãã®éåæå®è¡ã®å¯èœæ§ã«èå³ããããŸãã ã³ãŒã«ããã¯é¢æ°å ã®ã³ãŒããããã»ããµãªãœãŒã¹ãéäžçã«äœ¿çšããå Žåã®å¯ŸåŠæ¹æ³ãèããŠã¿ãŸãããã
var result = performCPUIntensiveCalculation();
performCPUIntensiveCalculation
é¢æ°ãéåæã«å®è¡ãããHTTPãªã¯ãšã¹ãã®ãããªãã®ã§ã¯ãªããã¡ã€ã³ã¹ã¬ããããããã¯ããã³ãŒãïŒå·šå€§ã§éã
for
ã«ãŒããªã©ïŒã®å ŽåãJSéçºãžã®ã·ã³ã°ã«ã¹ã¬ããã¢ãããŒãã§ã¯ãã€ãã³ãã«ãŒãã解æŸããŠãã©ãŠã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããã¯è§£é€ããæ¹æ³ã¯ãããŸãã ãã®çµæããŠãŒã¶ãŒã¯éåžžã®æäœãè¡ããªããªããŸãã
ããã¯ãéåæé¢æ°ãJSã·ã³ã°ã«ã¹ã¬ããã«é¢é£ããå¶éã®ããäžéšããç·©åããªãããšãæå³ããŸãã
å Žåã«ãã£ãŠã¯ã
setTimeout
ã䜿çšããŠããªãœãŒã¹ã
setTimeout
æ¶è²»ããæäœãå®è¡ãããšãã«ã¡ã€ã³ã¹ã¬ãããã¢ã³ããŒããããšããè¯ãçµæãåŸãããŸãã ããšãã°ãè€éãªèšç®ãããŸããŸãª
setTimeout
åŒã³åºãã§å®è¡ããããã©ã°ã¡ã³ãã«å解ããå Žåãããããã€ãã³ãã«ãŒãã«ãåæ£ãããŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ããããšã¯ã§ããŸããã
æ°å€é åã®å¹³åå€ãèšç®ããåçŽãªé¢æ°ãèŠãŠãã ããã
function average(numbers) { var len = numbers.length, sum = 0, i; if (len === 0) { return 0; } for (i = 0; i < len; i++) { sum += numbers[i]; } return sum / len; }
ãã®ã³ãŒãã¯ãéåæå®è¡ãããšãã¥ã¬ãŒããããããã«æžãçŽãããšãã§ããŸãã
function averageAsync(numbers, callback) { var len = numbers.length, sum = 0; if (len === 0) { return 0; } function calculateSumAsync(i) { if (i < len) { // . setTimeout(function() { sum += numbers[i]; calculateSumAsync(i + 1); }, 0); } else { // , callback(sum / len); } } calculateSumAsync(0); }
ãã®ã¢ãããŒãã§ã¯ã
setTimeout
é¢æ°ã䜿çšããŠãèšç®ã®å®è¡ãã¹ã±ãžã¥ãŒã«ããŸãã ããã«ãããèšç®ã®æ¬¡ã®ããããå®è¡ããé¢æ°ã®ã€ãã³ãã«ãŒãã«é 眮ãããããããã®é¢æ°ã®ã»ãã·ã§ã³éã§ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«é¢é£ãããã®ãå«ãä»ã®èšç®ã«ååãªæéããããŸãã
ãŠã§ãã¯ãŒã«ãŒ
HTML5ã«ã¯ã次ã®ãããªå€ãã®åªããæ©èœããããŸãã
- SSEïŒä»¥åã®è³æã® 1ã€ã§ããã®æè¡ã調ã¹ãŠWebSocketãããã³ã«ãšæ¯èŒããŸããïŒã
- ãžãªãã±ãŒã·ã§ã³ã
- ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥
- ããŒã«ã«ã¹ãã¬ãŒãžã
- ãã©ãã°ã¢ã³ããããããã¯ãããžãŒã
- Web Workers
Webã¯ãŒã«ãŒã¯ãã€ãã³ãã«ãŒãããããã¯ããã«JSã³ãŒããå®è¡ããããã«äœ¿çšã§ãããã©ãŠã¶ãŒææã®ã¹ã¬ããã§ãã
ããã¯æ¬åœã«çŽ æŽãããæ©äŒã§ãã JavaScriptã®æŠå¿µã®ã·ã¹ãã ã¯ãã·ã³ã°ã«ã¹ã¬ããç°å¢ã®æŠå¿µã«åºã¥ããŠãããçŸåšããã®å¶éãïŒéšåçã«ïŒåãé€ãæè¡ããããŸãã
Webã¯ãŒã«ãŒã䜿çšãããšãéçºè ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ããããšãªããããã»ããµãéäžçã«äœ¿çšããŠãé·ãè€éãªèšç®ãå¿ èŠãšããã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã¹ã¬ããã«é 眮ã§ãããããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®åœ±é¿ã«ãã°ãã察å¿ã§ããŸãã ããã«ãã€ãã³ãã«ãŒããšå¯Ÿè©±ããããã®èš±å®¹å¯èœãªæ¹æ³ãèŠã€ããããã«ãäžèšã§èª¬æãã
setTimeout
ããªãã¯ãªã©ã®åé¿çã¯äžèŠã«ãªããŸããã
以äžã«ãWeb Workerã䜿çšããå Žåãšäœ¿çšããªãå Žåã®é åã®ãœãŒãã®éãã瀺ãç°¡åãªäŸã瀺ããŸãã
âWeb Workerã¬ãã¥ãŒ
Webã¯ãŒã«ãŒã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããŒããããã¯ããããšãªããèšç®éãå€ãæéã®ãããã¿ã¹ã¯ãå®è¡ã§ããŸãã å®éããããã䜿çšãããå Žåãèšç®ã¯äžŠè¡ããŠå®è¡ãããŸãã ç§ãã¡ã®åã«æ¬åœã®ãã«ãã¹ã¬ããããããŸãã
JavaScriptã¯ã·ã³ã°ã«ã¹ã¬ããã®ããã°ã©ãã³ã°èšèªã§ããããšãæãåºããŠãã ããã ãããããããã§ã¯ãJSã¯ãããŒã¢ãã«ãå®çŸ©ããªãèšèªã§ããããšãç解ããå¿ èŠããããŸãã Webã¯ãŒã«ãŒã¯JavaScriptã®äžéšã§ã¯ãããŸããã JavaScriptãä»ããŠã¢ã¯ã»ã¹ã§ãããã©ãŠã¶ãŒæ©èœãè¡šããŸãã ã»ãšãã©ã®ãã©ãŠã¶ã¯æŽå²çã«ã·ã³ã°ã«ã¹ã¬ããã§ããïŒãã®ç¶æ³ã¯ãã¡ããå€æŽãããŠããŸãïŒãã»ãšãã©ã®JavaScriptå®è£ ã¯ãã©ãŠã¶çšã«èšèšãããŠããŸãã
Webã¯ãŒã«ãŒã¯Node.jsã«ã¯å®è£ ãããŠããŸãã-ãã¯ã©ã¹ã¿ãŒããŸãã¯ãåããã»ã¹ãã®æŠå¿µããããããã¯å°ãç°ãªããŸãã
ä»æ§ã§ 3çš®é¡ã®Webã¯ãŒã«ãŒã«èšåããŠããããšã«æ³šæããŠãã ããã
âéžã°ããåŽåè
å°çšã®Webã¯ãŒã«ãŒã€ã³ã¹ã¿ã³ã¹ã¯ãã¡ã€ã³ããã»ã¹ã«ãã£ãŠäœæãããŸãã 圌ãšã®ã¿ããŒã¿ã亀æã§ããŸãã
ãã©ãŠã¶ãŒã®å°çšã¯ãŒã«ãŒã®ãµããŒã
âå ±æã¯ãŒã«ãŒ
å ±æã¯ãŒã«ãŒãžã®ã¢ã¯ã»ã¹ã¯ãã¯ãŒã«ãŒãšåããœãŒã¹ïŒããšãã°ãç°ãªããã©ãŠã¶ãŒã¿ãã
iframe
ãããã³ä»ã®å ±æã¯ãŒã«ãŒïŒãæã€ããã»ã¹ã«ãã£ãŠååŸã§ããŸãã
ãã©ãŠã¶ã§ã®å ±æã¯ãŒã«ãŒã®ãµããŒã
âãµãŒãã¹ã¯ãŒã«ãŒ
ãµãŒãã¹ã¯ãŒã«ãŒã¯ãã€ãã³ãé§ååã®ã¯ãŒã«ãŒã§ãããçºä¿¡å ãšãã¹ã䜿çšããŠç»é²ãããŸãã ããã²ãŒã·ã§ã³ã³ãã³ããšãªãœãŒã¹ãªã¯ãšã¹ããã€ã³ã¿ãŒã»ããããã³å€æŽããéåžžã«æ£ç¢ºã«å¶åŸ¡ã§ããããŒã¿ããã£ãã·ã¥ããããšã«ãããæ¥ç¶å ã®WebããŒãžãå¶åŸ¡ã§ããŸãã ããã«ãããç¹å®ã®ç¶æ³ïŒããšãã°ããããã¯ãŒã¯ãå©çšã§ããªãå ŽåïŒã§ã¢ããªã±ãŒã·ã§ã³ã®åäœãå¶åŸ¡ããããã®åªããããŒã«ãæäŸãããŸãã
ãã©ãŠã¶ãµãŒãã¹ã¯ãŒã«ãŒã®ãµããŒã
ãã®è³æã§ã¯ãèåãªåŽåè ãæ±ããŸããããã¯ãããŠã§ãåŽåè ããŸãã¯ãåŽåè ãã«èšåããéã«çæãããã®ã§ãã
Web Workersã®ä»çµã¿
Webã¯ãŒã«ãŒã¯ã.jsãã¡ã€ã«ã䜿çšããŠå®è£ ãããŸãããã®ãã¡ã€ã«ã¯ãéåæHTTPèŠæ±ã䜿çšããŠããŒãžã«å«ãŸããŸãã ãããã®ãªã¯ãšã¹ãã¯ã Web Worker APIã®ãããã§éçºè ããå®å šã«é ãããŠããŸã ã
ã¯ãŒã«ãŒã¯ããããŒã®çžäºäœçšãæŽçããããã«äœ¿çšããããã¯ãããžã«åºæã®ã¡ãã»ãŒãžè»¢éã¡ã«ããºã ã䜿çšããŠã䞊åå®è¡ãå¯èœã«ããŸãã ãããã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãé ãããããšãªããéãã³ã³ãã¥ãŒãã£ã³ã°æäœãå®è¡ããã®ã«æé©ã§ãã
Webã¯ãŒã«ãŒã¯ããã©ãŠã¶ãŒå ã®åé¢ãããã¹ã¬ããã§å®è¡ãããŸãã ãã®ãããå®è¡ããã³ãŒãã¯å¥ã®ãã¡ã€ã«ã«å«ããå¿ èŠããããŸãã ããã¯èŠããŠããããšãéèŠã§ãã
Webã¯ãŒã«ãŒãäœæããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
var worker = new Worker('task.js');
task.js
ãã¡ã€ã«ãååšãã
task.js
ã¢ã¯ã»ã¹ã§ããå Žåããã©ãŠã¶ãŒã¯ãã®ãã¡ã€ã«ãéåæã«ããŒãããæ°ããã¹ããªãŒã ãäœæããŸãã ããŠã³ããŒããå®äºãããšãã¯ãŒã«ãŒã®ã³ãŒãã®å®è¡ãéå§ãããŸãã ãã¡ã€ã«ãããŠã³ããŒãããããšãããšãã«ãã©ãŠã¶ããšã©ãŒ404ãåãåã£ãå Žåããã¡ã€ã«ã¯ããŠã³ããŒããããããšã©ãŒã¡ãã»ãŒãžã¯è¡šç€ºãããŸããã
æ°ããäœæãããã¯ãŒã«ãŒãéå§ããã«ã¯ããã®
postMessage
ã¡ãœãããåŒã³åºãå¿ èŠããããŸãã
worker.postMessage();
Web Workerã®ã³ãã¥ãã±ãŒã·ã§ã³
Webã¯ãŒã«ãŒãäœæããããŒãžãšå¯Ÿè©±ããã«ã¯ã
postMessage
ã¡ãœãããŸãã¯BroadcastChannelãªããžã§ã¯ãã§è¡šããããããŒããã£ã¹ãããŒã¿ãã£ãã«ã®ããããã䜿çšããå¿ èŠããããŸãã
âpostMessageã¡ãœãã
ãã®ã¡ãœãããåŒã³åºããããšãæ°ãããã©ãŠã¶ãŒã¯æåã®ãã©ã¡ãŒã¿ãŒãšããŠJSONãªããžã§ã¯ãããµããŒãããŸãããå€ããã©ãŠã¶ãŒã¯
String
åã®ãã©ã¡ãŒã¿ãŒã®ã¿ããµããŒãããŸãã
JSONãªããžã§ã¯ãã䜿çšããŠãã¯ãŒã«ãŒãäœæããããŒãžãšããŒã¿ã亀æããæ¹æ³ã®äŸãèŠãŠã¿ãŸãããã æååãæž¡ããšããã¹ãŠãã»ãŒåãã«èŠããŸãã
HTMLããŒãžã®äžéšã¯æ¬¡ã®ãšããã§ãã
<button onclick="startComputation()">Start computation</button> <script> function startComputation() { worker.postMessage({'cmd': 'average', 'data': [1, 2, 3, 4]}); } var worker = new Worker('doWork.js'); worker.addEventListener('message', function(e) { console.log(e.data); }, false); </script>
ã¯ãŒã«ãŒã³ãŒããã¡ã€ã«ã®å 容ã¯æ¬¡ã®ãšããã§ãã
self.addEventListener('message', function(e) { var data = e.data; switch (data.cmd) { case 'average': var result = calculateAverage(data); // , self.postMessage(result); break; default: self.postMessage('Unknown command'); } }, false);
ãã¿ã³ãã¯ãªãã¯ããããšãããŒãžã¯ã¯ãŒã«ãŒã®
postMessage
ã¡ãœãããåŒã³åºããŸãã ãã®åŒã³åºãã¯ã
cmd
ããŒãš
data
ããŒãããã³ãããã«å¯Ÿå¿ããå€ãšãšãã«JSONãªããžã§ã¯ããã¯ãŒã«ãŒã«æž¡ããŸãã ã¯ãŒã«ãŒã¯ãæå®ããã
message
ãã³ãã©ã䜿çšããŠãã®ã¡ââãã»ãŒãžãåŠçããŸãã
ã¯ãŒã«ãŒãã¡ãã»ãŒãžãåä¿¡ããèªåãæããã®ãç解ãããšãã€ãã³ãã®ãµã€ã¯ã«ããããã¯ããããšãªããèªåã§èšç®ãå®è¡ããŸãã ã¯ãŒã«ãŒãè¡ãããšã¯ãæšæºã®JSé¢æ°ã®ããã«èŠããŸãã èšç®ãå®äºãããšãçµæãã¡ã€ã³ããŒãžã«è»¢éãããŸãã
ã¯ãŒã«ãŒã®ã³ã³ããã¹ãã§ã¯ã
self
ãš
this
äž¡æ¹ãã¯ãŒã«ãŒã®ã°ããŒãã«åå空éãæããŸãã
ã¯ãŒã«ãŒãåæ¢ããã«ã¯ã2ã€ã®æ¹æ³ã®ããããã䜿çšã§ããŸãã æåã®æ¹æ³ã¯ãã¡ã€ã³ããŒãžãã
worker.terminate()
ã¡ãœãããåŒã³åºãããšã§ãã 2çªç®ã¯ã¯ãŒã«ãŒå ã§å®è¡ããã
self.close()
ã³ãã³ãã«ãã£ãŠå®è£ ãããŸãã
âæŸéããŒã¿ãã£ã³ãã«
BroadcastChannelãªããžã§ã¯ãã¯ãããæ±çšæ§ã®é«ãããŒã¿è»¢éAPIã§ãã åããœãŒã¹ãæã€ãã¹ãŠã®ã³ã³ããã¹ãã§åãå ¥ããããã¡ãã»ãŒãžãéä¿¡ã§ããŸãã åããœãŒã¹ã«å±ãããã¹ãŠã®ãã©ãŠã¶ã¿ããiframeããŸãã¯ã¯ãŒã«ãŒã¯ããããŒããã£ã¹ãã¡ãã»ãŒãžãéåä¿¡ã§ããŸãã
// var bc = new BroadcastChannel('test_channel'); // bc.postMessage('This is a test message.'); // , // bc.onmessage = function (e) { console.log(e.data); } // bc.close()
ãããŒããã£ã¹ãã¡ãã»ãŒãžã³ã°ãã£ãã«ã䜿çšããããŸããŸãªãšã³ãã£ãã£ã®çžäºäœçšå³ã¯æ¬¡ã®ããã«ãªããŸãã
ãããŒããã£ã¹ãã¡ãã»ãŒãžã³ã°ãã£ãã«ã䜿çšããéä¿¡
ãã ãããããŸã§ã®
BroadcastChannel
ãªããžã§ã¯ãã§ã¯ããã©ãŠã¶ãŒã§ã®ãµããŒããããªãå¶éãããŠããããšã«æ³šæããŠãã ããã
ãã©ãŠã¶ã§ã®BroadcastChannelãµããŒã
Web Workersã«ã¡ãã»ãŒãžãéä¿¡ããæ¹æ³
Web Workerã«ã¡ãã»ãŒãžãéä¿¡ããã«ã¯2ã€ã®æ¹æ³ããããŸãã 1ã€ç®ã¯ããŒã¿ãã³ããŒããããšã2ã€ç®ã¯ããŒã¿ãã³ããŒããã«ãœãŒã¹ããã¬ã·ãŒããŒã«è»¢éããããšã§ãã ã¡ãã»ãŒãžãæ±ããããã®æ¹æ³ãæ€èšããŠãã ããã
- ã¡ãã»ãŒãžãã³ããŒããŸãã ã¡ãã»ãŒãžã¯ã·ãªã¢ã«åãã³ããŒãéä¿¡ãããåä¿¡åŽã§éã·ãªã¢ã«åãããŸãã ããŒãžãšã¯ãŒã«ãŒã¯ã¡ãã»ãŒãžã®å
±éã³ããŒã䜿çšããªããããããã§ã¯åã¡ãã»ãŒãžéä¿¡ã»ãã·ã§ã³ã§ããŒã¿ã®ã³ããŒãäœæããå¿
èŠããããŸãã ã»ãšãã©ã®ãã©ãŠã¶ã¯ãéä¿¡åŽã§éä¿¡ãããæ
å ±ãJSONã«èªåçã«å€æããåä¿¡åŽã§ãã®ããŒã¿ããã³ãŒãããããšã«ããããã®æ©èœãå®è£
ããŸãã ãæ³åã®ãšãããããã«ãããã¡ãã»ãŒãžãéä¿¡ãããšãã«ã·ã¹ãã ã®ãªãŒããŒãããã倧å¹
ã«å¢å ããŸãã ã¡ãã»ãŒãžã倧ããã»ã©ãéä¿¡ã«æââéãããããŸãã
- ã¡ãã»ãŒãžã®åãæž¡ãã ãã®ã¢ãããŒãã䜿çšãããšãã¡ãã»ãŒãžã®éä¿¡è
ã¯éä¿¡åŸã«ã¡ãã»ãŒãžã䜿çšã§ããªããªããŸãã åæã«ãã¡ãã»ãŒãžã³ã°ã¯ââã»ãšãã©ç¬æã«è¡ãããŸãã ãã®ã¡ãœããã®äž»ãªæ©èœã¯ã ArrayBufferãªããžã§ã¯ãã®ã¿ã䜿çšããŠè»¢éã§ããããšã§ãã
Web Workeræ©èœ
ãã«ãã¹ã¬ããã®æ§è³ªã®ãããWebã¯ãŒã«ãŒã¯JavaScriptæ©èœã®éãããã»ããã«ã¢ã¯ã»ã¹ã§ããŸãã ãããã¯å¯èœæ§ã§ãïŒ
-
navigator
ãªããžã§ã¯ã -
location
ãªããžã§ã¯ãïŒèªã¿åãå°çšïŒ
-
XMLHttpRequest
-
setTimeout()/clearTimeout()
ããã³setInterval()/clearInterval()
- ã¢ããªã±ãŒã·ã§ã³ãã£ãã·ã¥
-
importScripts()
ã䜿çšããŠå€éšã¹ã¯ãªãããã€ã³ããŒããã - ä»ã®Web Workerãäœæãã
Web Workerã®å¶é
æ®å¿µãªãããWebã¯ãŒã«ãŒã¯ããã€ãã®éåžžã«éèŠãªJavaScriptæ©èœã«ã¢ã¯ã»ã¹ã§ããŸããã ãã®äžã«ã¯æ¬¡ã®ãã®ããããŸãã
- DOMïŒããã¯ã¹ã¬ããã»ãŒãã§ã¯ãããŸããïŒ
- ãŠã£ã³ããŠãªããžã§ã¯ã
-
document
ãªããžã§ã¯ã -
parent
ãªããžã§ã¯ã
ããã¯ãã¹ãŠãWebã¯ãŒã«ãŒãDOMãæäœã§ããªãããšãæå³ããŸãïŒãããã£ãŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«çŽæ¥åœ±é¿ãäžããããšã¯ã§ããŸããïŒã æåã¯ãããã¯Webã¯ãŒã«ãŒã®äœ¿çšãè€éã«ããŠããããã«èŠãããããããŸããããæéãçµã€ã«ã€ããŠãWebã¯ãŒã«ãŒãæ£ãã䜿çšããæ¹æ³ãåŠã¶ãšãWebã¯ãŒã«ãŒãå¥ã®ãã³ã³ãã¥ãŒã¿ãŒããšããŠèªèãå§ããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŒãžã³ãŒãã§å®è¡ãããŸãã ã¯ãŒã«ãŒã¯å€§éã®èšç®ãå®è¡ããäœæ¥ãå®äºããåŸãããããåŒã³åºãããŒãžã«çµæãéä¿¡ããŸããã³ãŒãã¯æ¢ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«å¿ èŠãªå€æŽãå ããŸãã
ãšã©ãŒåŠç
ä»ã®JSã³ãŒããšåæ§ã«ãWebã¯ãŒã«ãŒã¯ãšã©ãŒãåŠçããå¿ èŠããããŸãã ã¯ãŒã«ãŒã®å®è¡äžã«ãšã©ãŒãçºçãããšã
ErrorEvent
ã€ãã³ãã
ErrorEvent
ãŸãã ãšã©ãŒãªããžã§ã¯ãã«ã¯ããã®æ¬è³ªãç解ã§ããããã«ãã3ã€ã®æçšãªããããã£ãå«ãŸããŠããŸãã
-
filename
ãšã©ãŒã®åå ãšãªã£ãã¯ãŒã«ãŒã¹ã¯ãªãããå«ããã¡ã€ã«ã®ååã -
lineno
ãšã©ãŒãçºçããè¡çªå·ã
-
message
-ãšã©ãŒã®èª¬æã
Webã¯ãŒã«ãŒã§ãšã©ãŒãåŠçããããã®ãµã³ãã«ã³ãŒãã次ã«ç€ºããŸãã
function onError(e) { console.log('Line: ' + e.lineno); console.log('In: ' + e.filename); console.log('Message: ' + e.message); } var worker = new Worker('workerWithError.js'); worker.addEventListener('error', onError, false); worker.postMessage(); // .
ãããã¯ãŒã«ãŒã³ãŒãã§ã
self.addEventListener('message', function(e) { postMessage(x * 2); // . 'x' . };
ããã§ãã¯ãŒã«ãŒãäœæãã
error
ã€ãã³ããã³ãã©ãŒãå²ãåœãŠãæ¹æ³ã確èªã§ããŸãã
ã¯ãŒã«ãŒïŒ2çªç®ã®ã³ãŒããã©ã°ã¡ã³ãïŒå ã§ãçŸåšã®ã¹ã³ãŒãã§
x
å®çŸ©ãããŠããªã
x
x
ã«2ãæããããšã«ãããæå³çã«äŸå€ãã¹ããŒããŸãã äŸå€ã¯å ã®ã¹ã¯ãªããã«å°éãã
onError
ãã³ãã©ãŒã
onError
ããšã©ãŒã«é¢ããæ å ±ã
onError
ãŸãã
Web Workerã®ã·ããªãª
Webã¯ãŒã«ãŒã®é·æãšçæã«ã€ããŠè©±ããŸããã 次ã«ãããã€ãã®äœ¿çšã·ããªãªãæ€èšããŸãã
- ã·ãŒã³ã®3Dã¬ã³ããªã³ã°ã ç¹ã«ãå
ç·è¿œè·¡æ³ã®å®è£
ã«ã€ããŠè©±ããŠãã-å
ç·ã®æ¹åã远跡ãããã¯ã»ã«ã®è²ã決å®ããããšã§ç»åãäœæã§ããã¬ã³ããªã³ã°æè¡ã§ãã ã¬ã€ãã¬ãŒã·ã³ã°ã¯ã匷åãªæ°åŠçèšç®ã䜿çšããŠãå
äŒæ¬æ©èœãã¢ãã«åããŸãã ãã®ã¢ãããŒãã§ã¯ãåå°ãå±æãªã©ã®å¹æãå®çŸãããã¬ã€ãã¬ãŒã·ã³ã°ã¯ããŸããŸãªãããªã¢ã«ã®å€èŠ³ãã·ãã¥ã¬ãŒãã§ããŸãã ãã®ãã¹ãŠã®èšç®ããžãã¯ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãããŒããããã¯ããªãããã«ãWebã¯ãŒã«ãŒã«éä¿¡ã§ããŸãã ã€ãŸããç»åã®ã¬ã³ããªã³ã°ãè€æ°ã®ã¯ãŒã«ãŒéã§ïŒãããã£ãŠãè€æ°ã®ããã»ããµã³ã¢éã§ïŒåå²ããããšãã§ããŸãã 以äžã¯ããŠã§ãã¯ãŒã«ãŒã䜿çšããã¬ã€ãã¬ãŒã·ã³ã°ã®ç°¡åãªäŸã§ãã
- æå·å ãšã³ãããŒãšã³ãæå·åã¯ãå人ããŒã¿ããã³æ©å¯ããŒã¿ã®é
åžãèŠå¶ããããšãžã®é¢å¿ãé«ãŸã£ãŠããããããŸããŸã人æ°ãé«ãŸã£ãŠããŸãã æå·åæäœã¯ãç¹ã«å€§éã®ããŒã¿ãé »ç¹ã«æå·åããå¿
èŠãããå Žåãéåžžã«æéããããå ŽåããããŸãã ããã¯ãDOMãªããžã§ã¯ããªã©ã«ã¢ã¯ã»ã¹ããå¿
èŠããªããããWebã¯ãŒã«ãŒã䜿çšããã®ã«éåžžã«é©ããã·ããªãªã§ãã æå·åã¯ãJSã®åºæ¬æ©èœãå¿
èŠãšããæ
å ±åŠçã¢ã«ãŽãªãºã ã§ãã ã¯ãŒã«ãŒãæå·åãå®è¡ããå Žåãããã¯ãŠãŒã¶ãŒã®ãµã€ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ã®äœæ¥ã«ã¯åœ±é¿ããŸããã
- ããŒã¿ãããªããŒãããŸãã Webãµã€ããæé©åããWebãµã€ãã§ã®äœæ¥ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«ãWebã¯ãŒã«ãŒã䜿çšããŠäžéšã®ããŒã¿ãäºåã«ããŠã³ããŒãããŠä¿åããåŸã§å¿
èŠã«ãªã£ããšãã«ããã«äœ¿çšã§ããŸãã Webã¯ãŒã«ãŒã¯ãã¡ã€ã³ã¹ããªãŒã ã«ãã£ãŠå®è£
ãããããŒã¿ã®ããªããŒããšã¯ç°ãªããå®è¡ããæäœãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã«åœ±é¿ãäžããªãããããã®ãããªãŠãŒã¹ã±ãŒã¹ã«é©ããŠããŸãã
- ããã°ã¬ãã·ãWebã¢ããªã±ãŒã·ã§ã³ã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯ãä¿¡é Œæ§ã®äœããããã¯ãŒã¯æ¥ç¶ã§ãã£ãŠãããã°ããããŒãããå¿
èŠããããŸãã ã€ãŸããããŒã¿ã¯ãã©ãŠã¶ã«ããŒã«ã«ã«ä¿åããå¿
èŠããããŸãã ããã¯ã IndexedDBãŸãã¯åæ§ã®APIãäœçšããå Žæã§ãã äžè¬ã«ãã¯ã©ã€ã¢ã³ãåŽã§ç¹å®ã®ããŒã¿ãŠã§ã¢ããŠã¹ãç¶æããå¿
èŠæ§ã«ã€ããŠè©±ããŸãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ããã«ãã®ãªããžããªãæäœããã«ã¯ãWebã¯ãŒã«ãŒã§äœæ¥ãæŽçããå¿
èŠããããŸãã IndexedDBã®å ŽåãWebã¯ãŒã«ãŒãªãã§ã¡ã€ã³ã¹ã¬ãããããŒãã§ããªãéåæAPIããããŸããã以åã¯Webã¯ãŒã«ãŒå
ã§ã®ã¿äœ¿çšããå¿
èŠãããåæAPIïŒå衚瀺å¯èœïŒããã£ãããšã«æ³šæããŠãã ããã
- ã¹ãã«ãã§ãã¯ã ç°¡åãªã¹ãã«ãã§ãã¯ã·ã¹ãã ã¯æ¬¡ã®ããã«æ©èœããŸããããã°ã©ã ã¯ãæ£ããã¹ãã«ã®åèªã®ãªã¹ããå«ãèŸæžãã¡ã€ã«ãèªã¿åããŸãã æ€çŽ¢ããªãŒã¯èŸæžãã圢æãããå¹æçãªããã¹ãæ€çŽ¢ãæäŸããŸãã æ€èšŒã®ããã«åèªãã·ã¹ãã ã«æž¡ããããšãæ€çŽ¢ããªãŒã«åèªãååšãããã©ããããã§ãã¯ãããŸãã åèªãèŠã€ãããªãå Žåã¯ãå
ã®åèªã®æåã眮æããããªãŒå
ã§åä¿¡ããåèªãæ€çŽ¢ããŠãæ€èšŒã·ã¹ãã ã®èŠ³ç¹ããæ£ãããã©ããã確èªããããšã«ãã£ãŠååŸãããã®åèªã®ä»£æ¿ããªã¢ã³ãããŠãŒã¶ãŒã«æäŸã§ããŸãã ãããã¯ãã¹ãŠWebã¯ãŒã«ãŒã«ç°¡åã«æž¡ããããããŠãŒã¶ãŒã¯ãåèªã®ãã§ãã¯æã代æ¿ã¹ãã«ãªãã·ã§ã³ã®æ€çŽ¢æã«ã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ããããšã«é¢é£ããåé¡ãçµéšããããšãªããããã¹ããæäœã§ããŸãã
ãŸãšã
ãã®èšäºã§ã¯ãã»ãšãã©ã®ææ°ãã©ãŠã¶ãŒã§Webéçºè ãå©çšã§ããæ¯èŒçæ°ããæ©èœã§ããWebã¯ãŒã«ãŒã«ã€ããŠèª¬æããŸããã Webã¯ãŒã«ãŒã䜿çšãããšããªãœãŒã¹ã倧éã«æ¶è²»ããæäœãã¹ã¬ããããšã«åé¢ã§ããŸããããã«ãããã¡ã€ã³ã¹ã¬ãããããŒãããã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«é¢é£ãããã¹ãŠãç°¡åã«åŠçã§ããŸãã
äžé£ã®èšäºã®åã®éšåïŒ
ããŒã1ïŒ JSã®ä»çµã¿ïŒãšã³ãžã³ãã©ã³ã¿ã€ã ã¡ã«ããºã ãã³ãŒã«ã¹ã¿ãã¯ã®æŠèŠ
ããŒã2ïŒ JSã®ä»çµã¿ïŒV8å éšãšã³ãŒãã®æé©åã«ã€ããŠ
ããŒã3ïŒ JSã®ä»çµã¿ïŒã¡ã¢ãªç®¡çã4çš®é¡ã®ã¡ã¢ãªãªãŒã¯ãããã³ããããšã®æŠã
ããŒã4ïŒ JSã®ä»çµã¿ïŒã€ãã³ãã«ãŒããéåæãããã³async / awaitã䜿çšããŠã³ãŒããæ¹åãã5ã€ã®æ¹æ³
ããŒã5ïŒ JSã®ä»çµã¿ïŒWebSocketãšHTTP / 2 + SSEã äœãéžæããŸããïŒ
ããŒã6ïŒ JSã®ä»çµã¿ïŒWebAssemblyã®æ©èœãšç¯å²
芪æãªãèªè ïŒ ãããžã§ã¯ãã§Web Workerã䜿çšããŠããŸããïŒ