GXT性能问题

时间:2010-05-19 19:45:37

标签: performance gwt gxt

我们正在使用GXT开发一个相当复杂的系统。虽然一切都在FF上很好用,但IE(特别是IE6)却是一个不同的故事(在浏览器呈现页面之前看了10秒以上)。

据我所知,其中一个主要原因是DOM操作,这是IE6下的灾难(见http://www.quirksmode.org/dom/innerhtml.html)。

这可以被认为是前端Javascript框架(即GWT)的一般问题,但是一个简单的代码(见下文),否则执行相同的功能证明。事实上,在IE6下 - getSomeGWT()需要400ms而getSomeGXT()需要4秒。这是一个x10因素,它对用户体验产生了巨大的影响!!!

private HorizontalPanel getSomeGWT() {
        HorizontalPanel pointsLogoPanel = new HorizontalPanel();
        for (int i=0; i<350; i++) {
            HorizontalPanel innerContainer = new HorizontalPanel();
            innerContainer.add(new Label("some GWT text"));
            pointsLogoPanel.add(innerContainer);
        }
        return pointsLogoPanel;
    }

    private LayoutContainer getSomeGXT() {
        LayoutContainer pointsLogoPanel = new LayoutContainer();
        pointsLogoPanel.setLayoutOnChange(true);
        for (int i=0; i<350; i++) {
            LayoutContainer innerContainer = new LayoutContainer();
            innerContainer.add(new Text("just some text"));
            pointsLogoPanel.add(innerContainer);
        }
        return pointsLogoPanel;
    }

因此,要解决/缓解人们需要的问题 - 一个。减少DOM操作的数量;要么 湾用innerHTML替换它们。

AFAIK,(a)只是使用GXT的副作用,而(b)只能用于GXT不支持的UiBinder。

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我怀疑它与某些事情有关:

pointsLogoPanel.setLayoutOnChange(true);

这将强制调用每个附加组件的布局,并可能导致您看到的差异。

答案 1 :(得分:-1)

GXT布局容器功能更强大,但需要付出代价。它们可以非常强大,尤其是在使用RowLayout等布局时。

我的第一个问题是,您希望这些嵌套容器具有哪些功能?动态大小,高级调整大小选项/比例?或者GWT容器或普通HTML容器是否足够?

如果您决定使用GXT Layout Containers,则应首先禁用layoutOnChange选项。由于启用该选项会在每次向容器中添加子项时导致其他处理,并可能使浏览器在该时间点重新呈现。

因此,禁用layoutOnChange后,只需在for循环后调用pointsLogoPanel上的layout()。虽然您还没有将它添加到父容器中,但只需添加pointsLogoPanel就可以在父容器上调用layout()。这不会解决所有的性能问题,但它可能会有很长的路要走。