0

我正在使用复选框来显示或隐藏 jqGrid 中的列,并且由于我有很多很多行,每个行在其单元格中都有很多值,所以当我检查它时,复选框需要很长时间才能完成检查。

我希望复选框立即检查,然后执行耗时的 jqGrid 操作。例如,

$('input[type="checkbox"]').click(function(e) {
    // First render/unrender the checkmark    
    // Next do some very time-consuming jqGrid operations
}

我怎样才能做到这一点?就目前情况而言,它首先执行 jqGrid 调用,最后只检查 checkox。选中复选框需要整整两秒钟!

4

3 回答 3

3

尝试将耗时的代码放入超时:

// immediate stuff here
setTimeout(function() {
   // time-consuming stuff here
},1);

理想情况下,您希望将这些耗时的东西放在 Web Worker 中,以免冻结 UI。

于 2013-02-16T22:35:43.433 回答
2

您可以在页面和脚本中进行优化。

  1. 将您的脚本放在<body>标签末尾之前。
  2. 使用工具来提高性能:我可以推荐的最好的工具是dynaTrace AJAX 版,它是 IE 的分析器(通常是 JS 性能最慢的,所以实际上是一个很好的开始优化的测试环境)。它会给你一个完整的细分,向你展示重复的方法调用、调用树以及你的 CPU 周期的去向。 查看他们关于使用/功能的教程以开始使用。
  3. 使用大数据集提高 jQuery 性能主题包括:
  1. 使用 JavaScript 原生 for() 循环而不是 jQuery 的 $.each() 辅助
    函数。

  2. 不要在循环中将元素附加到 DOM。

  3. 如果您有很多元素要插入到 DOM 中,请
    用父元素将它们包围以获得更好的性能。

  4. 不要使用字符串连接,而是使用数组的 join() 方法处理很长的字符串。

  5. 对长列表循环和连接函数使用 setTimeout()
    函数。

  6. 缩小你的脚本

希望这些足以获得更好的性能

于 2013-02-16T22:37:01.357 回答
0

我相信您可以在一个函数中渲染/取消渲染复选标记,然后在另一个.click()函数中执行 jqGrid 操作.click()。IE

$('#selector').click(
    function(){//rendering stuff}
).click(
    function(){//computational stuff}
);
于 2013-02-16T22:41:09.720 回答