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)
而且我认为这可以帮助我......
您应该User在附加myPanel到DOM 之前添加s ,或者如果它已经附加并且需要更新,myPanel则从DOM中删除,添加所有用户并重新附加myPanel.
在附加myPanel时添加200个用户会发生什么情况,您的浏览器必须更新DOM 200次,这是非常昂贵的(重新计算和重新绘制屏幕).
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |