我是GWT的新手,并且很难理解Module和ClientBundle之间的根本区别。在GWT文档的某些领域中,两者似乎是同一件事,而在其他领域,很显然它们并不相同。

我的理解是,模块是被部署到用户浏览器的客户端代码。这是一个包含HTML,CSS和JS的ZIP文件。

我的理解是,ClientBundle与Module相似,但是它仅包含静态资源,例如图像。

如果这些理解是正确的,那么为什么需要区分两者? HTML / CSS / JS也是静态资源吗?!?而且,如果我与其他公司背道而驰,请帮助我了解它们之间的区别,并可能提供每个示例的具体示例以及何时使用它们。提前致谢!

最佳答案

您对模块有正确的想法-它在开发方面描述了要使用的Java源路径,从其开始进行编译的入口点以及在编译时要使用的各种属性(浏览器,语言环境)。编译后,该模块也表示输出-javascript和任何其他相关的已编译文件,包括日志,图像,样式表等。

相反,ClientBundle是开发人员告诉编译器在编译后将使用java源路径中某些资源的一种方式。 CssResource附带进行了其他检查,以检查是否使用了css样式名称(如果没有,则应将其删除以最小化已编译的输出),ImageResource确保在编译时文件存在,并且都针对每个浏览器以最佳的优化方式输出这些文件。大多数浏览器的图像实际上都包含在海量JS文件中,以最大程度地减少对服务器的调用次数,对于不支持此功能的图像,它们会自动一起拼写。

通过声明ClientBundle接口并调用GWT.create(MyClientBundle.class),您要求编译器处理ClientBundle的特定要求,以使那些引用的文件和类在您的应用程序中可用。它与GWT生成器的关系如何,这比SO答案中解决的主题要高级得多。

是的,ClientBundle描述了正在运行的应用程序所需的静态资源,是的,编译后的模块由各种静态资源组成,但是我想重新表达一下您的理解:ClientBundle是可以包含静态内容的方法之一在GWT模块中以使其尽可能高效地加载的方式。

07-24 09:31