6

2 年前我读过关于 UiBinder 性能的答案https://stackoverflow.com/a/3755675/1067931 并决定对其进行测试。

我构建了一个非常复杂的布局,其中包含许多按钮和一个内嵌的面板。 版本 1的布局完全用 UiBinder xml 构建,而版本 2纯粹以编程方式构建。

我将这两个版本都部署到 App Engine 并运行了这两个版本,同时在每次运行前清除浏览器缓存。第 1 版(UiBinder)在~12 秒后加载,而第 2 版~3 秒后加载,所以它真的不鼓励我使用 UiBinder。你有不同的印象吗?

4

2 回答 2

2

UiBinder 就像任何 GWT 生成器一样,生成 Java 代码。因此,首先,阅读生成的内容并将其与您手动编写的内容进行比较(将-gen选项传递给 GWT 编译器或 DevMode 以使其将生成的代码写入磁盘)。

UiBinder 的亮点在于HTMLPanelI18N,因为它使代码比用 Java 编写的代码更具可读性。

GWT 2.5 还引入IsRenderableRenderablePanel一项实验性功能,但它可以在某些条件下提高您的性能(他们将其用于提高 Orkut 的性能)。同样,UiBinder 使其易于使用(IsRenderable否则需要以适当的顺序并在适当的时间调用其方法以获得最大性能;UiBinder 使其透明)。不幸的是,没有其他IsRenderable小部件RenderablePanel,因此只有创建自己的小部件来实现它才会有所帮助IsRenderable;并IsRenderable在非常低的水平上运行。

一般来说,UiBinder 的执行速度不应该比手写代码慢(当然对于小部件的等效排列)。当人们说 UiBinder 表现更好(外部IsRenderable)时,它鼓励您使用HTMLPanel而不是面板进行布局。例如,HTMLPanel包含 HTML<table>或 set 的 a比 a或一堆<div>s 执行得更快(假设您不需要动态修改布局)。FlexTableFlowPanel

于 2012-10-17T16:15:55.473 回答
1

在我看来直觉上是正确的,UiBinder-Code 可以导致更长的启动时间。这就是为什么:

想象一下,您正试图在视图中定义 20 个按钮。在您的声明式布局中,您将显式声明每个按钮,而在您的命令式布局中,您很可能会使用 for 循环。这似乎可能会导致命令式布局的 JS 尺寸更小。

还要考虑到在现实世界的应用程序中,这种差异可能可以忽略不计,因为视图通常是项目的最小部分。

UiBinder的文档似乎暗示,它更多的是关于运行时性能,所以如果你对减少加载时间感兴趣,我建议你看看
Code Splitting
HTML5 Appcache
和一般性能提示(虽然有点过时,但仍然非常有用!)

感谢您提出问题,我搜索了 GWT 功能(如 UiBinder)的广泛性能测试套件,但结果为空。

于 2012-10-17T12:06:15.287 回答