没有响应的javascript通知

mad*_*ead 1 javascript firefox gwt

我有一种情况,我在FireFox 3.6+上的GWT网格中从服务器渲染项目.我有大约200个项目,我将它们加载到循环中:

users = myService.getUsers();
for(User user : users){
    myPanel.addUser(user); // Pseudocode. Actually i add some labels and text fields...
}
Run Code Online (Sandbox Code Playgroud)

DOM这个循环需要很长时间才能改变,所以我得到了"无响应脚本"通知.但我不能重构代码或分页,我需要一次加载1页上的所有200个项目.

有没有办法压制此通知?要通知浏览器我的脚本没有挂起,但做了一些有用的事情?

UPD好的,这是我的代码更接近.它是来自大项目的代码,我们有许多自定义组件,所以,我认为它没有实际价值.

    myService.getUsersDetails(searchCriteria, new MyCallback<List<User>>)
    {

        @Override
        protected void response(List<User> result)
        {
            gridExpanderPresenter.clear();
            int i = 0;
            for (User user: result)
            {
                UserDetailsView detailsView = detailsViewProvider.get();
                gridExpanderPresenter.setPresenter(UsersPresenter.this);
                gridExpanderPresenter.add(detailsView.asWidget()); //Here is DOM manipulation i mentioned
                if (i++ % 2 == 1)
                {
                    detailsView.setOdd(); //Setting style here
                }
                detailsView.setData(user);
            }
        }

    });
Run Code Online (Sandbox Code Playgroud)

而且我认为可以帮助我......

mil*_*lan 6

您应该User在附加myPanel到DOM 之前添加s ,或者如果它已经附加并且需要更新,myPanel则从DOM中删除,添加所有用户并重新附加myPanel.

在附加myPanel时添加200个用户会发生什么情况,您的浏览器必须更新DOM 200次,这是非常昂贵的(重新计算和重新绘制屏幕).

  • 这是"离线"DOM操作的[例子](http://stackoverflow.com/questions/6942829/custom-jquery-filter-needs-optimization/6942905#6942905) (2认同)