{"id":3730,"date":"2017-10-11T22:39:36","date_gmt":"2017-10-11T22:39:36","guid":{"rendered":"http:\/\/disenodepagina.com\/disenoweb\/?p=3730"},"modified":"2017-10-11T22:39:36","modified_gmt":"2017-10-11T22:39:36","slug":"utilizacion-de-web-workers","status":"publish","type":"post","link":"https:\/\/disenodepagina.com\/disenoweb\/utilizacion-de-web-workers\/","title":{"rendered":"Utilizaci\u00f3n de web workers"},"content":{"rendered":"<h1>Utilizaci\u00f3n de web workers<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-3661\" src=\"http:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o-300x200.jpg\" alt=\"Utilizaci\u00f3n de web workers\" width=\"300\" height=\"200\" srcset=\"https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o-300x200.jpg 300w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o-600x400.jpg 600w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o-768x512.jpg 768w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o-1024x683.jpg 1024w, https:\/\/disenodepagina.com\/disenoweb\/wp-content\/uploads\/2017\/07\/288600_450698738298077_1436103080_o.jpg 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>UTILIZACI\u00d3N DE WEB WORKERS<\/p>\n<p>Un Worker es una manera\u00a0<a href=\"http:\/\/disenodepagina.com\">ejecutar c\u00f3digo<\/a>\u00a0JavaScript de manera<em>\u00a0sitio web<\/em>\u00a0paralela al proceso principal, sin interferir con el navegador. El navegador sigue siendo responsable de solicitar y analizar ficheros, renderizar la vista, ejecutar JavaScript y cualquier otro proceso que consuma tiempo de procesado y que haga que el resto de tareas tengan que esperar. Y es aqu\u00ed donde los\u00a0<strong><em>Utilizaci\u00f3n de web workers<\/em><\/strong>\u00a0toman importancia.<\/p>\n<p>Al igual\u00a0<em>dise\u00f1o web<\/em>\u00a0que con el resto de funcionalidades de HTML5, debemos comprobar su disponibilidad en el navegador en el que ejecutamos la aplicaci\u00f3n:<\/p>\n<p>if(Modernizr.webworkers)<\/p>\n<p>{<\/p>\n<p>alert(&#8216;El explorador soporta Web workers&#8217;);<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>{<\/p>\n<p>alert(&#8216;El explorador NO soporta Web workers&#8217;);<\/p>\n<p>}<\/p>\n<p>Crear nuevo<em>\u00a0dise\u00f1o<\/em>\u00a0Worker es muy sencillo. Tan s\u00f3lo tenemos que crear una nueva instancia del objeto Worker, indicando como par\u00e1metro del constructor el fichero JavaScript que contiene el c\u00f3digo que debe ejecutar el Worker<strong><em>Utilizaci\u00f3n de web workers<\/em><\/strong>.<\/p>\n<p>var worker = new Worker(&#8216;my_worker.js&#8217;);<\/p>\n<p>De esta manera tenemos disponible y listo para utilizar un nuevo Worker. En este momento, podr\u00edamos pensar que podemos llamar a m\u00e9todos o utilizar objetos definidos dentro del nuevo Worker, pero no nada m\u00e1s lejos de la realidad. La \u00fanica manera de comunicarnos con el nuevo Worker es a trav\u00e9s del paso de mensajes, como hemos visto anteriormente.<\/p>\n<p>worker.postMessage(&#8216;Hello World&#8217;);<\/p>\n<p>\u00c9ste m\u00e9todo \u00fanicamente acepta un par\u00e1metro, la cadena de texto a enviar al Worker. Por otra parte, la manera de recibir mensajes originados en el Worker es definiendo un escuchador para el evento message. Los datos incluidos por el Worker se encuentran disponibles en la propiedad data del evento\u00a0<strong><em>Utilizaci\u00f3n de web workers<\/em><\/strong>.<\/p>\n<p>worker.addEventListener(&#8216;message&#8217;, function(e) {\u00a0\u00a0\u00a0 alert(e.data); }, false);<\/p>\n<p>Evidentemente, dentro de un Worker necesitamos comunicarnos con el thread principal, tanto para recibir los datos de los mensajes como para nuevos datos de vuelta. Para ello, a\u00f1adimos un escuchador para el evento message, y enviamos los datos de vuelta utilizando el mismo m\u00e9todo postMessage.<\/p>\n<p>reservada this no hace referencia al objeto window, sino al Worker en s\u00ed mismo. Debido al comportamiento de ejecuci\u00f3n en paralelo de los Web workers, \u00e9stos solo pueden<\/p>\n<p>Los Workers tienen la capacidad de generar Workers secundarios. Esto significa, que podemos dividir la tarea principal en subtareas, y crear nuevos Workers dentro del Worker principal. Sin embargo, a la hora de utilizar los Subworkers, y antes de poder devolver el resultado final al hilo principal, es necesario asegurarse que todos los procesos han terminado.<\/p>\n<h2><strong><em>Utilizaci\u00f3n de web workers<\/em><\/strong><\/h2>\n<p><a href=\"https:\/\/www.facebook.com\/disenopaginaweb\" target=\"_blank\" rel=\"noopener\">#Utilizaciondewebworkers<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Utilizaci\u00f3n de web workers &nbsp; UTILIZACI\u00d3N DE WEB WORKERS Un Worker es una manera\u00a0ejecutar c\u00f3digo\u00a0JavaScript de manera\u00a0sitio web\u00a0paralela al proceso principal, sin interferir con el navegador. El navegador sigue siendo responsable de solicitar y analizar ficheros, renderizar la vista, ejecutar JavaScript y cualquier otro proceso que consuma tiempo de procesado y que haga que el [&#8230;]\n","protected":false},"author":2,"featured_media":3522,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[478,477,8],"tags":[82,12,24,13,530,550],"class_list":["post-3730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo-web","category-diseno-de-pagina","category-diseno-web","tag-diseno","tag-diseno-web","tag-diseno-web-df","tag-diseno-web-guadalajara","tag-sitio-web","tag-utilizacion-de-web-workers"],"_links":{"self":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/comments?post=3730"}],"version-history":[{"count":1,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3730\/revisions"}],"predecessor-version":[{"id":3731,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/posts\/3730\/revisions\/3731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media\/3522"}],"wp:attachment":[{"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/media?parent=3730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/categories?post=3730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/disenodepagina.com\/disenoweb\/wp-json\/wp\/v2\/tags?post=3730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}