{"id":11634,"date":"2021-06-09T14:13:09","date_gmt":"2021-06-09T14:13:09","guid":{"rendered":"http:\/\/www.max-sperling.bplaced.net\/?p=11634"},"modified":"2024-02-16T10:48:44","modified_gmt":"2024-02-16T10:48:44","slug":"multithreading-web-apps","status":"publish","type":"post","link":"http:\/\/www.max-sperling.bplaced.net\/?p=11634","title":{"rendered":"Multithreading (Web apps)"},"content":{"rendered":"<p><strong>Types of Worker<\/strong><\/p>\n<table style=\"text-align: center\">\n<tr>\n<th rowspan=\"3\">Type<\/th>\n<th colspan = \"3\">Worker<\/th>\n<\/tr>\n<tr>\n<th colspan = \"2\">Web Worker<\/th>\n<th rowspan=\"2\">Service Worker<\/th>\n<\/tr>\n<tr>\n<th>Dedicated Worker<\/th>\n<th>Shared Worker<\/th>\n<\/tr>\n<tr>\n<th>Amount<\/th>\n<td colspan = \"2\">Multiple per tab<\/td>\n<td>One per origin<\/td>\n<\/tr>\n<tr>\n<th>Scope<\/th>\n<td>One tab<\/td>\n<td>One origin<\/td>\n<td>One origin<\/td>\n<\/tr>\n<tr>\n<th>Lifetime<\/th>\n<td>Depends on tab<\/td>\n<td>Depends on tabs<\/td>\n<td>Depends on browser<\/td>\n<\/tr>\n<tr>\n<th>Usage<\/th>\n<td colspan = \"2\">Parallelism<\/td>\n<td>Offline experience,<br \/>Background sync,<br \/>Push notifications<\/td>\n<\/tr>\n<\/table>\n<p>They can&#8217;t access the DOM.<\/p>\n<hr>\n<p><strong>Example<\/strong> (Dedicated Worker)<\/p>\n<pre class=\"brush: xml; gutter: false; title: index.html; notranslate\" title=\"index.html\">\r\n&lt;html&gt;\r\n  &lt;head&gt;\r\n    &lt;script src=&quot;script.js&quot;&gt;&lt;\/script&gt;\r\n  &lt;\/head&gt;\r\n  &lt;body&gt;\r\n    &lt;img src=&quot;https:\/\/media.giphy.com\/media\/lKKXOCVviOAXS\/giphy.gif&quot;\/&gt;\r\n    &lt;p&gt;Take a nap:\r\n      &lt;button onclick=&quot;takeNapSync()&quot;&gt;Sync&lt;\/button&gt;\r\n      &lt;button onclick=&quot;takeNapAsync()&quot;&gt;Async&lt;\/button&gt;\r\n    &lt;\/p&gt;\r\n  &lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; gutter: false; title: script.js; notranslate\" title=\"script.js\">\r\nconst napTimeInMs = 3000;\r\n\r\nvar worker = new Worker(&#039;worker.js&#039;);\r\nworker.onmessage = function(event) {\r\n  alert(event.data);\r\n}\r\n\r\nfunction sleep(timeInMs) {\r\n  var start = new Date().getTime();\r\n  var expire = start + timeInMs;\r\n  while (new Date().getTime() &lt; expire) {}\r\n}\r\n\r\nfunction takeNapSync() { \/\/ Is blocking the UI-Thread\r\n  sleep(napTimeInMs);\r\n  alert(&quot;Nap done.&quot;);\r\n}\r\n\r\nfunction takeNapAsync() { \/\/ Isn&#039;t blocking the UI-Thread\r\n  worker.postMessage(napTimeInMs);\r\n}\r\n<\/pre>\n<pre class=\"brush: jscript; gutter: false; title: worker.js; notranslate\" title=\"worker.js\">\r\nfunction sleep(timeInMs) {\r\n  var start = new Date().getTime();\r\n  var expire = start + timeInMs;\r\n  while (new Date().getTime() &lt; expire) {}\r\n}\r\n\r\nonmessage = function(event) {\r\n  sleep(event.data);\r\n  postMessage(&quot;Nap done.&quot;);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Types of Worker Type Worker Web Worker Service Worker Dedicated Worker Shared Worker Amount Multiple per tab One per origin<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false},"categories":[55],"tags":[],"_links":{"self":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/11634"}],"collection":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11634"}],"version-history":[{"count":1,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/11634\/revisions"}],"predecessor-version":[{"id":16838,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=\/wp\/v2\/posts\/11634\/revisions\/16838"}],"wp:attachment":[{"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11634"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-sperling.bplaced.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}