{"id":13,"date":"2008-04-15T19:39:42","date_gmt":"2008-04-16T02:39:42","guid":{"rendered":"http:\/\/localhost\/wordpress\/?p=14"},"modified":"2009-03-13T15:17:35","modified_gmt":"2009-03-13T19:17:35","slug":"qu-hace-a-google-web-toolkit-diferente","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/vicente\/qu-hace-a-google-web-toolkit-diferente\/","title":{"rendered":"Qu&#233; hace diferente a Google Web Toolkit?"},"content":{"rendered":"<p>Google Web Toolkit es una herramienta para desarrollar interfaces web que lanz\u00f3 Google hace un tiempo atr\u00e1s como una de sus iniciativas open source. Para entender GWT se debe tener bien en claro un simple hecho:<\/p>\n<div style=\"padding:10px;font-weight:bold\">GWT permite escribir c\u00f3digo en Java y luego usando un compilador que traduce Java a Javascript generar el c\u00f3digo Javascript que se incluir\u00e1 en la aplicaci\u00f3n final<\/div>\n<p>Una vez comprendido este hecho se mitigan muchos de los mitos que ha creado la incursi\u00f3n de esta tecnolog\u00eda. No se puede comparar a GWT con ninguna de las librer\u00edas AJAX existentes actualmente. Existen varios tipos de librer\u00edas ajax cada una permitiendo una manera de programar en particular y a un nivel de abstracci\u00f3n determinado.<\/p>\n<h4>Tipos de Librer\u00edas AJAX<\/h4>\n<h4>Nivel 1<\/h4>\n<p>Un primer tipo de librer\u00edas las llamar\u00e9 librer\u00edas de nivel 1. Este tipo por lo general implementa un f\u00e1cil acceso a las funcionalidades dom, encapsulaci\u00f3n para el objeto xmlHttpRequest, soportes para orientaci\u00f3n a objetos en javascript, abstracci\u00f3n con respecto a los distintos browsers.<br \/>\nEntre estas por ejemplo por ejemplo:<br \/>\n<a href=\"http:\/\/jquery.com\">jQuery<\/a><br \/>\n<a href=\"http:\/\/www.mootools.net\">Mootools<\/a><br \/>\n<a href=\"http:\/\/www.prototypejs.org\">Prototype<\/a><br \/>\n<a href=\"http:\/\/developer.yahoo.com\/yui\/\">YUI<\/a><\/p>\n<h4>Nivel 2<\/h4>\n<p>En un segundo nivel est\u00e1n aquellas que adem\u00e1s de implementar lo anterior, ya sea porque de verdad lo implementan o porque usan librer\u00edas de nivel 1, implementan widgets o controles listos para usarse como campos autocompletables, editores de texto in-place, editores de texto enriquecido, sliders, controles drag n drop, paneles de di\u00e1logo, entre otros. Otra caracter\u00edstica es que a\u00fan es necesario programar en javascript\/html.<br \/>\nEntre estas:<br \/>\n<a href=\"http:\/\/www.dojotoolkit.org\">Dojo<\/a><br \/>\n<a href=\"http:\/\/script.aculo.us\/\">Scriptaculous<\/a><br \/>\n<a href=\"http:\/\/ui.jquery.com\">jQueryUI<\/a><br \/>\n<a href=\"http:\/\/developer.yahoo.com\/yui\/\">YUI<\/a><br \/>\n<a href=\"http:\/\/extjs.com\">ExtJS<\/a><br \/>\nUna versi\u00f3n de <a href=\"http:\/\/echo.nextapp.com\/site\/\">Echo 2<\/a> tambi\u00e9n est\u00e1 a este nivel.<br \/>\nAqu\u00ed tambi\u00e9n por justicia con Dojo incluir\u00e9 a la librer\u00eda <a href=\"http:\/\/www.backbase.com\">Backbase<\/a> aunque debo decir que bien podr\u00eda incluirla en un nivel 2.5 porque provee un nivel de abstracci\u00f3n superior puesto que la interfaz se escribe en un tipo especial de XML que ellos han llamado BXML, sinembargo la codificaci\u00f3n del BXML, el parsing del BXML y la interpretaci\u00f3n es completamente del lado del cliente.<\/p>\n<h4>Nivel 3<\/h4>\n<p>En las librer\u00edas de nivel 3 est\u00e1n aquellas que generan javascript mediante c\u00f3digo en el servidor. Aqu\u00ed es dif\u00edcil ponerlas en un solo grupo sinembargo si las catalogo estrictamente en el criterio mencionado anteriormente aqu\u00ed estar\u00edan:<br \/>\n<a href=\"http:\/\/www.zkoss.org\/\">La librer\u00eda ZK<\/a><br \/>\nMediante un lenguaje de marcas ZUL se escribe la interfaz en el lado servidor y el ZK engine en el lado servidor interpreta el ZUL y genera el javascript necesario para construir la interfaz.<\/p>\n<p><a href=\"http:\/\/echo.nextapp.com\/site\/\">El framework Echo 2<\/a><br \/>\nSe escribe Java del lado del servidor al estilo Swing y lo transforma en Javascript que se env\u00eda al navegador.  Requiere el uso de la plataforma Java en el servidor.<\/p>\n<p>Seguro habr\u00e1n otras librer\u00edas m\u00e1s por mencionar en este post, no he pretendido ser extensivo pero si existen otras que no he mencionado o creen que alguna deber\u00eda ponerla en otro nivel pueden postear un comentario.<\/p>\n<h4>GWT<\/h4>\n<p>GWT no cae en ninguna de las categor\u00edas anteriores porque como dije anteriormente:<\/p>\n<div style=\"padding:10px;font-weight:bold\">GWT permite escribir c\u00f3digo en Java y luego usando un compilador que traduce Java a Javascript generar el c\u00f3digo Javascript que se incluir\u00e1 en la aplicaci\u00f3n final<\/div>\n<p>Por tanto:<br \/>\nGWT puede usarse conjuntamente con cualquier tecnolog\u00eda del lado servidor (PHP, JavaEE, Python, etc).<br \/>\nGWT nos provee un compilador.<\/p>\n<h4>Cu\u00e1les son las ventajas de GWT?<\/h4>\n<p>Escribir el c\u00f3digo cliente en Java que de otra forma hubiera tenido que escribirlo en Javascript me permite llevar un mejor control de los cambios que hago en mi interfaz puesto que adem\u00e1s del compilador, el toolkit provee un browser especial que ejecuta el c\u00f3digo cliente en modo Java y permite observar los errores a manera de excepciones Java. Solo cuando el c\u00f3digo est\u00e1 totalmente listo y probado entonces es compilado (compilar = generar el javascript a partir del c\u00f3digo java).<\/p>\n<p>Es una ventaja en rendimiento porque el c\u00f3digo javascript generado por el compilador adem\u00e1s de usar las t\u00e9cnicas habituales de compresi\u00f3n y ofuscaci\u00f3n de c\u00f3digo javascript, adem\u00e1s permite hacer inlining. Inlining quiere decir que donde antes hab\u00eda la llamada a un m\u00e9todo javascript, el compilador puede decidir en colocar el cuerpo del m\u00e9todo en la porci\u00f3n generada para evitar la llamada a funci\u00f3n. En este sentido GWT incorpora muchas mejoras al rendimiento.<\/p>\n<p>En s\u00ed a\u00fan me falta mucho por comentar acerca de las ventajas y las funcionalidades que provee GWT sinembargo considero que en este post he descrito la base para trabajar con \u00e9l, puesto que considero que esta herramienta a\u00fan no es bien comprendida por la mayor\u00eda de desarrolladores que no se han atrevido a probarla, una de las principales confusiones surge del hecho de que las aplicaciones se escriben en el lenguaje de programaci\u00f3n Java.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google Web Toolkit es una herramienta para desarrollar interfaces web que lanz\u00f3 Google hace un tiempo atr\u00e1s como una de sus iniciativas open source. Para entender GWT se debe tener bien en claro un simple hecho: GWT permite escribir c\u00f3digo en Java y luego usando un compilador que traduce Java a Javascript generar el c\u00f3digo [&hellip;]<\/p>\n","protected":false},"author":75,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[96],"tags":[945,354,296],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-software","tag-desarrollo","tag-google","tag-tecnologia"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/users\/75"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":1,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":150,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/posts\/13\/revisions\/150"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/vicente\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}