GWT –利弊

我喜欢JavaScript。 随着jQuery和Mootools的出现,我对JavaScript的热爱仅增加了很多倍。 只要有选择,我就可以将上述框架中的任何一个用于我开发的任何Web应用程序。 但是进入服务行业后,我不得不一次次屈服于客户的压力,并在他们选择技术的过程中努力-这是否是正确的选择( 向吹笛者付款的人叫the。不是吗? )。 一位这样的客户使我了解了GWT的世界。

在发布GWT的那几年,我给了他们几枪。 那时我不那么喜欢它,所以我将其关闭,再也没有回来。 但是,在过去六个月的时间里,我对该项目框架有一个稍微不同的印象。 我仍然不能说GWT是切成薄片后的下一件大事,但至少它没有我想的那么糟糕。 我刚刚记录了我在项目过程中的好与坏的观察结果,并认为一些其他开发人员可能会在评估GWT时发现它有用。

优点:

  1. 如果您是Java的资深人士,并且具有Swing或AWT的经验,那么选择GWT应该是明智的选择。 在这种背景下,学习曲线最少。
  2. 即使您没有Java GUI开发方面的经验,多年开发GWT应用程序的经验也会对您有所帮助
  3. 您可以创建高响应性的Web应用程序,以减轻客户端的负担,并减少与服务器端的闲聊
  4. 尽管有很多JavaScript库供人们参考,并且其中大多数都值得一试,但许多传统开发人员并不了解它的真正功能。 请记住,像JavaScript这样的强大语言是一把双刃剑。 如果您不知道如何使用它,即使您将无法清理自己创建的混乱
  5. 您可以迭代地从典型的Web应用程序迁移到GWT应用程序。 这不是一个全有或全无的主张。 您可以使用一个名为JSNI的巧妙技巧与已经拥有JavaScript函数进行交互。 但是总是最好尽快将它们移至GWT
  6. IDE对GWT的支持再好不过了。 Java IDE在过去十年中已经成熟,已成为世界上最好的IDE之一,GWT可以直接利用它
  7. 您可以杀死集成的调试美女。 成熟的Java IDE提供的出色的调试支持是一项功能,该功能可能会影响任何人的支持GWT的决定。
  8. 可以直接很好地利用内置的IDE重构Java代码来始终保持简单的设计。 用JavaScript进行此操作并非出于内心的虚弱
  9. 至少可以说,IDE语法突出显示,错误检查,代码完成快捷方式等不胜枚举。
  10. Google正在积极开发GWT。 我们知道该项目不会很快消失。 到目前为止,他们对项目的承诺充分说明了该行业的未来。
  11. 该项目背后的社区也是一个巨大的优势。 每天在Stack Overflow,讨论论坛,Wiki和个人博客中进行讨论。 使用正确的关键字进行简单搜索可以为您指明正确的方向
  12. GWT是一个经过深思熟虑的API; 而不是赶时间的东西。 这可以帮助您作为开发人员快速理解抽象并使其真正直观地使用
  13. 您可以使用GWT的内置协议在客户端和服务器之间传输数据,而无需任何其他有关如何打包和发送数据的知识。 如果您希望获得更多控制权,则可以始终使用XML,JSON或您选择的其他专有格式。 即使在那种情况下,在使用JSON时,您也不必使用非直观的Java JSON库。 您可以使用JSNI通过简单的javascript“评估” JSON。 太酷了!
  14. 您具有可以使用标准Java静态代码分析器(例如FindBugs,CheckStyle,Detangler,PMD等)来监视代码和设计质量的优点。 当您在经验丰富的大团队中工作时,这非常重要。
  15. 您可以使用JUnit或Test NG进行单元测试,可以使用JMock或另一个模拟库来模拟依赖项。 如果您已经练习过,那么遵循TDD是很简单的。 尽管有基于JavaScript的单元测试框架,例如jsunit和qunit,但还是告诉我有多少人已经知道或渴望使用它。
  16. GWT编译器生成跨浏览器JavaScript代码。 今天,任何说这话的营销人员都可能被击败。 现在,它已成为一种基本必需品,而不是奢侈品
  17. GWT编译器可以一口气为您优化生成的代码,删除无效代码,甚至为您混淆JavaScript
  18. 尽管编译过程需要花费很多时间,但您在开发过程中不必经历所有过程。 有一种特殊的托管模式,该模式使用浏览器插件并直接使用Java字节码生成输出。 这是您能够使用Java调试器调试客户端代码的主要原因之一。
  19. 可以通过许多项目(例如Smart GWT,Ext GWT等)获得丰富的第三方控件。它们设计精良,易于使用且具有主题性。 因此,如果您有一个需要不仅仅削减现有控件的要求,那么您应该研究这些项目之一。 这些组件之一很有可能实现。 即使无法解决问题,您也可以随时推出自己的解决方案。
  20. GWT强调有状态客户端和无状态服务器的概念。 这将导致许多用户必须共存的服务器上的负载极少,而只有一个用户在工作的客户端上的负载却很高
  21. I18N和L10N在GWT中非常简单。 实际上,基于语言环境的编译由GWT编译器本身负责。 关于常规的仅客户端框架不能说相同的话
  22. GWT内置了浏览器后退按钮支持,即使在使用AJAX时也是如此。 如果您是AJAX开发人员,那么您几乎可以放心。 这是无价的。

缺点:

  1. GWT是一个快速发展的项目。 因此,周围有很多版本。 不赞成使用许多功能,界面和事件,而当您要做其他工作时,跟上它们的步伐并不会太有趣
  2. 一开始有很多关于GWT的书。 这些天没那么多。 例如,我没有找到关于GWT 2.0版的很多书。 这只剩下Google的文档。 我同意所有文档都是不错的,但是没有什么能比写得好的书更好
  3. 使用GWT并不有趣。 毕竟是Java,而Java不是一种有趣的语言。 如果您添加了整个布局和自定义控件都应使用Java创建的事实,则可以轻松地使成熟的程序员哭泣。 通过从2.0版开始的UI绑定器的引入,该问题已得到解决,但是现在您需要学习一种新的语法。
  4. Java到JavaScript的编译速度相当慢,如果选择GWT,这是一个很大的缺点。
  5. 我个人更喜欢在HTML中定义结构并使用CSS对其进行样式设置。 HTML中使用的概念简洁明了,而我对此有多年的经验。 但是在GWT中,我被迫使用专有方法来执行相同的操作。 再加上GWT不能解决我不兼容的样式和对齐问题,这使问题更加复杂。 因此,我很想在GWT中编写布局代码。 但是从2.0版开始,有了UI Binder和HTMLLayout,我感到自己回到了自己的领域
  6. 进入GWT需要花费一些认真的承诺,在此之后,更改客户端技术可能需要完全重写您的应用程序,因为这与其他客户端框架完全不同
  7. 没有使用GWT进行应用程序开发的明确方法。 我们应该每个应用仅使用一个模块,还是每个页面一个模块或介于两者之间的某个模块。 这些设计模式直到现在才在缓慢发展。 因此,通常人们倾向于在一个模块中全部开发,直到模块大小超出可接受范围,然后将其重构为多个模块。 但是,如果为时已晚,那么重构也不会那么容易
  8. 尽管典型的桌面GUI应用程序仅能做到这一点,但是听起来和代码的混合听起来并不正确。 但是如今,即使像Flex和Silverlight这样的桌面应用程序框架也采用了基于XML的声明性方法来将表示与逻辑分离。 我认为GWT 1.x版本具有此缺点。 从2.0版开始引入UI Binder,我认为可以克服这一缺点,尽管它是另一种痛苦的XML语言,
  9. 与其他客户端库(例如jQuery)相比,您通常需要花3倍至5倍的代码才能完成简单的工作
  10. 您还应该记住,使用GWT时,从HTML的抽象并不完整。 您仍然需要了解您的应用程序正在生成的DOM结构以便对其进行样式设置,而GWT会使在代码中更难看到此结构。
  11. GWT仅对Java开发人员是一个优势。 具有.NET或PHP背景的开发人员在这里一无所获
  12. 如果您已经体验过JavaScript的强大功能,并且知道如何正确利用JavaScript来发挥自己的优势,那么您将对Java这样的缺乏表达能力的语言感到沮丧

我相信你们中的许多人会有不同意见。 差异很好。 因此,如果您有其他想法,请随时发表评论。 我们将讨论...

参考: GWT –我们的JCG合作伙伴 Ganeshji Marwaha在Ganesh博客上的优缺点。


翻译自: https://www.javacodegeeks.com/2012/01/gwt-pros-and-cons.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秦九韶算法matlab实验报告,数值分析上机实验报告.doc

实验报告一题目: (绪论) 非线性方程求解及误差估计摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法、Newton法和改进的Newton法。可以节省计算机的计算时间,还能减小…

Flex 布局教程:语法篇

网页布局(layout)是CSS的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3…

练习错误

form:阻止表单提交的方法一:在form标签中给出以下代码: 1 onsubmit "return False" 方法二:设置事件阻止 1 e.preventDefault() js中判断:只要非数字都应该表示为字符串 1 if(Email.indexOf("") -1){ 2 …

JavaFX 2中的PopupMenu

创建弹出菜单 要在JavaFX中创建Popupmenu,可以使用ContextMenu类。 您向其中添加MenuItems,也可以使用SeparatorMenuItem创建可视分隔符。 在下面的示例中,我选择子类ContextMenu并将MenuItems添加到其构造函数中。 public class Animatio…

matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)

MATLAB聚类有效性评价指标(外部)作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/更多内容,请看标签:MATLAB、聚类前提:数据的真实标签已知!1. 归一化互信息(Normalized Mutual information)定义程序functio…

学习进度表

周数 专业学习目标 专业学习时/每分钟 新增代码量 知识技能总结 第六周 ps的图像处理 80 30 看书加以实践 第七周 数据结构的链式结构 100 50 多做习题加以巩固知识 第八周 网页设计 80 30 多多练习,学会用代码设计 第九周 图片美工 70 30 慢慢学会运用软…

Axis通过wsdd部署Web Service

axis网上的教程很多,不过搜来搜去,总是只有那么几篇。仔细看了一下那几篇文章,都感觉到不是自己想要的,所以自己整理了一篇分享一下。 本文介绍axis应用的一个小例子,没有麻烦的命令行操作,只需照下面的步骤…

弹簧特性

1.概述 本教程将展示如何通过XML或Java配置在Spring中设置和使用属性 。 在Spring 3.1之前 ,将新的属性文件添加到Spring并使用属性值并不像它那样灵活和健壮。 从Spring 3.1开始 ,新的Environment和PropertySource抽象大大简化了此过程。 2.通过XML名…

php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法

转的网上的,不过对PHP-CGI菜鸟的人,还是有点帮助的。1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比&#x…

《做中学》读后有感

《做中学》读后有感 最近读了娄老师的“做中学”系列文章,有很大感触,今天想着重谈一谈我在学习方面收到的启发。 如何成功get一项技能 如果问到“如何开始get一项技能”,我想我们应该是最有发言权的一代。从小就被爸爸妈妈引导着参加各种课外…

多表之间关联查询

内连接 jion on 自连接 本表进行内连接的查询形式 外链接: 左链接 写法:select 字段 from 表1 t left join 表2 s on t.字段1 s.字段1 where 条件 或者 作用:保证左边的表的数据全部显示,包括空的 右链接 写法 :sele…

php文件夹0777,PHP代码mkdir(‘images’,’0777′)创建一个具有411权限的文件夹!为什么?...

我发誓这是昨天的工作.然而,现在下面的代码破坏文件夹没有问题,但创建一个具有411权限的新文件夹应该是777.我的代码昨天这样做.这样做的目的是压缩文件夹,传递文件夹,删除图像,然后为图像创建新目录.有人能告诉我我做错了什么或我应该做什么?谢谢function delete_d…

调查HashDoS问题

近一个月前,我就如何在不与供应商互动的情况下临时解决 28C3上出现的HashDoS问题或其他代码缺陷发表了一些想法。 现在是时候更深入地研究复杂性攻击并查看来源了。 我完全假设java.util.HashMap和java.util.Hashtable是受此攻击影响的最常用的Java数据结构&#xf…

Linq 和 EF Contains示例

List<int> unitIDListnew List<int>(); //此处添加int元素 var query DB.ElecConsumers.Where(c > unitIDList.Contains(c.ParentUnitID)); //EF方式 var query1 (from c in DB.ElecConsumers where unitIDList.Contains(c.ParentUnitID ) select c); //Linq方…

date 显示或设置系统时间和日期

显示或设置系统时间和日期 date [options] [format] date [options] [new date] date用来显示系统的时间和日期&#xff0c;超级用户可以使用date来更改系统时钟 选项 %H 小时&#xff0c;24小时制&#xff08;00~23&#xff09; %I 小时&#xff0c;12小时制&#xff…

Java 7:WatchService

在Java 7的所有新功能中&#xff0c;更有趣的是WatchService&#xff0c;它增加了监视目录更改的功能。 WatchService直接映射到本机文件事件通知机制&#xff08;如果有&#xff09;。 如果本机事件通知机制不可用&#xff0c;则默认实现将使用轮询。 结果&#xff0c;响应性&…

做一件事情的3个关键指标:兴趣、能力和回报

最近突然有了一点新的感悟&#xff0c;在原有的认识基础之上。关于找工作&#xff0c;大家说的最多的&#xff0c;根据自己的“兴趣”和“能力”。我觉得这是不够的&#xff0c;还应该加上一个“回报”。兴趣&#xff1a;对一件事有没有愿望去尝试&#xff0c;侧重“好奇心”。…

iOS应用内支付(IAP)详解

在iOS开发中如果涉及到虚拟物品的购买&#xff0c;就需要使用IAP服务&#xff0c;我们今天来看看如何实现。 在实现代码之前我们先做一些准备工作&#xff0c;一步步来看。 1、IAP流程 IAP流程分为两种&#xff0c;一种是直接使用Apple的服务器进行购买和验证&#xff0c;另一种…

vagrant box php,vagrant box php开发环境配置 -- nginx

centos7.3 直接用yum安装nginx的版本是1.10.2&#xff0c;当前的最新稳定版是1.10.3&#xff0c;暂时不更新&#xff0c;直接安装yum安装nginxsudo yum install -y nginx测试nginx -t启动sudo service nginx startps -ef|grep nginxcurl -i localhost在virtualbox设置网络的端口…

使用ASM 4处理Java类文件–第二部分:Tree API

什么是ASM树API&#xff1a; ASM树API是ASM的一部分&#xff0c;可让您创建/修改内存中的类。 该类被视为信息树。 像整个类一样&#xff0c;它是ClassNode的实例&#xff0c;其中包含FieldNode对象列表&#xff0c;MethodNode对象列表等。本文假设读者已经在这里阅读了第一部分…