复选框检查缓慢

checkbox slow to check

本文关键字:缓慢 检查 复选框      更新时间:2023-09-26

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

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

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

我怎样才能做到这一点?按照目前的情况,它首先执行jqGrid调用,然后只在最后检查复选框。选中复选框需要整整两秒钟的时间!

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

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

理想情况下,您应该将这些耗时的东西放在WebWorker中,以免冻结UI。

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

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

  2. 不要在循环中向DOM追加元素。

  3. 如果有许多元素要插入到DOM中,请将它们包围起来
    使用父元素表演

  4. 不要使用字符串串联,而是使用数组的join()方法一根很长的绳子。

  5. 使用setTimeout()函数进行长列表循环和串联
    功能。

  6. 最小化您的脚本

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

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

$('#selector').click(
    function(){//rendering stuff}
).click(
    function(){//computational stuff}
);