Google Closure Library相对于jQuery有什么优势?

191

考虑以下因素:

  • 商业背景
  • 社区支持
  • 可用扩展
  • 默认功能集
  • 易用性
  • 以及可靠性

你为什么更喜欢一个而不是另一个?


1
我认为在人们进行应用实验并了解闭包的限制之前,很难说哪种方法更受欢迎。 - James Black
3
这里有一些语法比较:http://derekslager.com/blog/posts/2010/06/google-closure-introduction.ashx - user194743
4
这篇文章可能对你的决定有所帮助。关键教训是:“闭包是一个生态系统。它不像 jQuery 那样只是用来让访问或操作 DOM 更容易。如果你想真正使用闭包,你必须做出承诺,真正地去使用它。” - Dan Abramov
2019年 Google Closure 是什么? :D - evilReiko
8个回答

176

我会尽力提供我的信息。

不仅仅是另一个JS库

据我了解,Google Closure 不仅仅是另一个 JS 库,它也是一组工具,可以让您优化JS代码。使用 jQuery 提供了很好的工具和轻量级库,但它不会压缩您自己的代码。而Closure 编译器则会。同时,closure 检查器有时也很有用,因为压缩后的代码与原始代码的行为可能不同,并且很难调试。它与Firebug集成,支持单元测试,这两者现在都是开发人员最好的朋友。

文档

我认为与已经成熟稳定的 jQuery 相比,Closure 可能缺乏大量扩展和教程的可用性。但是,由 Google 推动应该能够确保其支持和可靠性都相当不错。当前的文档教程也非常不错。

特点

Closure 的特点看起来还不错,而且它的模块化架构也很有前途。我想 Google 已经在内部使用它很长时间了,这意味着您可以期望实现所有基本功能(以及更多功能),并且可能是以非常优化和可扩展的方式进行的。他们试图将其呈现为 JavaScript 的 STL,因此他们应该已经完善了它。

仔细研究这些功能后,看起来与现有库(如jQuery)相比,这可能是网络应用程序开发的一步进步。它对Google内部开发有好处,但像检测在线状态(参见goog.events.OnlineHandler)、在浏览器历史中轻松集成AJAX请求和JS操作(参见goog.History),或它们提供的众多出色小组件(参见goog.ui package)可能会帮助我们所有人构建更加出色的Web应用!

它配备了模板功能,可以与Java集成(谁说GWT?),因此这也可能是Closure的另一个优点。

易用性

最后,它看起来非常容易使用。语法可能比短的$ jQuery函数要冗长一些,但通过诸如IDE和自动完成之类的工具,这并不是真正的问题。此外,我认为我们可以期待来自Google的IDE(如Eclipse)的很好集成。

编辑:根据要求,让我简单介绍一下GWT参考。 Google Web Toolkit是一个Java库,允许创建AJAX启用的Web界面,并生成(和优化)所需的JavaScript代码。由于Google Closure允许创建可在客户端和服务器端(使用JavaScript和Java)使用的模板,我的猜测是很快就可以同时使用它们(如果还没有这样做)。


5
感谢您的提问。请问您能否提供更多上下文信息,以便我更好地理解“GWT”的含义并为您提供准确的翻译? - pestaa
1
我认为在“更多”部分中,您还应该提及模板库(Soy)。同一模板文件可用于服务器(Java)端和客户端。在我看来,这是非常好的实现。这意味着我们可以仅通过 AJAX 查询发送 JSON 而不是发送 HTML - 节省带宽。 - Frank Krueger
1
我刚刚发现了一篇对Closure的批评,但也许这只是FUD:http://www.sitepoint.com/blogs/2009/11/12/google-closure-how-not-to-write-javascript/ - nalply
7
这篇评论不是FUD,感谢提供链接。评论侧重于Javascript代码并非在任何情况下都是最优的。这可能是正确的,但它忽略了更重要的点。据我所知,Closure针对的是非常复杂的JS应用程序(例如GMail),这带来一些后果 - 例如,并非每行代码都是最优的,因为不是由一个天才编写的。但相反地,它可能作为一个软件工程框架进行更大规模的扩展。 - Peter S Magnusson
3
正如评论所建议的那样,这篇文章没有提到该库有一个编译器(而不是缩小器),可以优化这些编码问题。 - Ant
显示剩余4条评论

30

在我对这个API的简短了解中,我发现jQuery和Closure之间的差异非常明显。

jQuery基本上只是以跨浏览器的方式简化了许多常见操作的方法。

Closure是一个很新的框架,它提供了一种跨浏览器使用<canvas>标签的方式,并添加了新的事件。

因此,它扩展了我们通常使用javascript所做的事情,将许多人们想要执行的操作放入API中。

例如,他们有一个用于检查在线状态是否改变的事件。以此可以判断系统是否在线。

他们还有使用Google Gears等工具的javascript函数,这延续了他们已经拓展了javascript能做的事情的事实。

需要我几天来消化所有的更改,但我可以看出这可能会对可以开发的Web应用程序产生重大影响。


25
Closure Library最大的优势在于它是为Closure Compiler设计的。这为JavaScript开发开启了全新的可能性...
编译器具有几个很棒的功能:
  • 它将可读的JavaScript编译成压缩后的机器可读JavaScript——在"高级"模式下,它具有最佳的压缩比率
  • 使用JSDoc标签对代码进行文档化很重要:编译器会读取它,并在编译期间为文档中的拼写错误、@constructor的错误使用、变量的类型错误、注释为@private和@protected的字段的误用等问题提供警告。
  • 如果编写了可重用的JavaScript库,例如OpenLayers或Google Maps,则需要正式导出公共API——编译器会优化您的内部代码。
  • 结束应用程序可以与库一起编译——然后未使用的库部分将从生成的代码中删除。依赖关系由编译器自动解决。
  • 编译器接受常量以去除不需要的功能——这允许仅为特定浏览器(如移动WebKit),仅为Quirks模式或Strict模式之一,没有IE6支持的编译等进行编译。
  • 即使针对源代码进行了编译,也可以使用FireBug进行调试。
  • 编译器支持生成动态可加载模块,这可以显着加快结束应用程序的加载速度,因为只有在需要时才会加载高级功能的代码。
详情请参见: http://blog.klokantech.com/2010/12/closure-compiler-for-openlayers-3x.html

20

编辑:请观看这个YouTube视频,它可能更好地回答了一些有关Google Closure的问题。

关于google closure 最好的信息来源可能是项目 discussion group、 wiki、doc页面、演示以及一本尚未完成的Michael Bolin所写的书,该书现在可以从safari books网站上获得。

有一件事我能立刻告诉你 - 相对于jQuery,closure的学习曲线更加陡峭,但由于库的广泛性、清晰的组织以及与编译器和模板工具一起使用的好处,这可能是值得的。

在这方面,closure库更像是dojo而不是jQuery,根据Michael Bolin所说的,一些概念是从dojo中借鉴来的。

谷歌闭包编译器使用JSDoc文档系统,如果由程序员正确创建,则同时提供文档和编译时检测错误的功能。

虽然函数名称比jQuery更冗长,但编译器会缩小代码(使用各种优化策略),类型检查将节省大量调试代码的时间,因此键入较长的名称可能不是问题。同时,较长的名称增加了可读性。

库支持在怪异模式下运行的浏览器,以便通过“quirky” HTML嵌入其他站点的脚本。

库与一个称为soy的JavaScript模板系统一起工作(但不依赖于它),该系统简化了文档中的内容填充。

jQuery一样,Google closure允许使用专用组件通过基于字符串的查询遍历DOM结构。

闭包库更像Java,依赖于点分隔的命名空间 - 这是一个非常强大的组织特性。

在未编译的代码中使用这样的命名空间会产生开销,但在编译后的代码中,这些东西将被替换为短变量名。


1
我本来在找别的东西,结果来到了这里,但很高兴知道像jQuery一样,Google Closure也允许使用专门的库组件通过基于字符串的查询遍历DOM结构。你能否给我提供相关文档的链接? - IsmailS
@iSid:我相信他谈论的是“goog.dom.DomHelper”,但我个人没有看到与jQuery等效的查询函数。@Evgeny:你能给我们更多细节吗? - exhuma
@iSid:该功能由goog.dom.query提供,但它的文档并不像goog.dom命名空间的其他部分那样详细。 - bkirkbri

8

我刚刚在 insideRIA 上发布了一篇关于Google Closure的详细文章,回答了这个问题。

......Closure非常棒!^_^


4
与jQuery的简洁比较:“[...] jQuery能够很好地发挥作用,使得无需付出太多努力和时间即可实现伟大的事情,因此Closure的承诺不是提供更好的算法,而是提供一种真正更好、有组织和可维护的部署JavaScript应用程序的方式[...] 使用Closure进行编码意味着以面向对象原则为思考基础,创建多个JS文件,每个文件都代表一个单独的类,将应用程序架构组织成包,并最终使用提供的工具部署它,从而获得单个、压缩且安全的JavaScript文件[...]” - Alex

7
也许我没有理解 jQuery,但我没有看到一个真正的UI小部件集合(有插件,是的,但你永远不知道它们经过多少测试,而且通常没有明确的获胜者和/或插件缺乏文档)。
Closure 有,除其他外,一个小部件集合(请参见演示选项卡),包括例如在 Gmail 中使用的无图像按钮
更普遍地说,它作为发布的一部分实现了更多功能。这可能不是什么大事,但当我正在寻找像ajax历史记录模块或自动完成这样简单的东西时,我会对jQuery插件的泛滥感到恼火。
总体来说,这是一个庞大的库+工具集,我将熟悉它,只是为了知道有什么可用的。

2
jqueryui.com 是官方的 UI 小部件集合。 - Jourkey
1
嗯,根据网站显示,它有6个小部件: 手风琴 日期选择器 对话框 进度条 滑块 选项卡 - Nickolay
3
我曾使用过jQueryUI,但感觉它相当弱。似乎它已经很久没有更新开发了,最后一次添加新的小部件是什么时候呢?虽然它是官方小部件集合,但任何寻找与jQuery一起使用的小部件的人最好还是在Google上搜索第三方jQuery小部件。 - Nosredna
2
jQueryUI不仅是一组JavaScript小部件,还具有出色的CSS框架。在样式化CRUD /管理页面方面,它对我来说是一个很好的工具。此外,Closure中的许多“小部件”在jQuery中只需1-2行代码即可实现,甚至不值得编写插件。 - Jace Rhea
2
JQuery的吸引力不在于预制小部件,而在于能够以最快的速度创建自定义小部件。我很少使用插件,包括UI。 - Erik Reppen

1

我很欣赏谷歌对开源社区做出的大部分贡献,我相信它有一些很酷的东西,但总体而言,我觉得Closure过于臃肿、过度设计和不优雅。如果你必须把所有东西都转化为Java,那么Closure当然是非常棒的。

编辑:

说得对。我没有真正进行比较。Closure就像一个巨大的仓库,里面有你可能需要的每种工具...某个地方。有点像.NET或者一个庞大的Java库。一旦你找到了需要的东西,你就可以找到高度特定的东西来完成高度特定的工作。然后在生产中,你可以删除所有的垃圾。

另一方面,JQuery更像是一个易于修改的声波螺旋手枪。


1
我想了解更多关于Java版本的Closure。你有相关链接吗?谢谢。 - yazzapps.com
查找“讽刺标签”。你会在那里找到答案。 - Erik Reppen

0
Google Closure Library 允许您编译和优化 JavaScript。它不像 jQuery 那样是一个库。jQuery 是提供函数的东西,使您能够更快地编写自己的 JavaScript。
Google Closure 可以帮助您将自己的 JavaScript 代码最小化,以便在互联网上更快地传递。
简而言之,Google Closure 是一种工具,而 jQuery 则类似于 Prototype 库。

6
不完全正确。Google Closures 还附带了自己的库,类似于 jQuery 并提供函数和实用工具来编写您自己的代码:http://code.google.com/closure/library/docs/tutorial.html - Wookai
2
+1 鼓励你尝试帮助 :) - Andomar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接