2013-02-16 73 views
0

我正在使用复选框来显示或隐藏jqGrid中的列,并且由于我有许多行,每个行的单元格中包含许多值,因此复选框在检查时需要很长时间才能完成检查它。复选框检查速度慢

我想要复选框立即检查,然后做耗时的jqGrid操作。例如,

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

我该如何做到这一点?就目前而言,它首先执行jqGrid调用,并且只在最后检查checkox。完成两秒钟才能检查复选框!

+0

你能解释一下你的意思是哪个复选框吗?它是[columnChooser](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jquery_ui_methods#column_chooser)的复选框,或者您使用其他自定义界面,您只需调用'showCol'或'hideCol' ? – Oleg 2013-02-16 22:43:22

+0

嗨奥列格。我使用一个自定义接口,我称之为showCol和hideCol。即使在单个colName上使用showCol时,也会出现问题。我使用jqGrid 4.4.1,所以它有你的单元格[我] css优化。 – ktm5124 2013-02-16 22:47:45

回答

3

尝试把耗时代码超时内:

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

理想情况下,你会希望把他们费时的东西,在网络工作者,以免冻结的UI。

1

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

  1. <body>标签结束前把你的脚本。
  2. 使用TOLS提高性能:我可以推荐这个最好的工具就是dynaTrace AJAX Edition,它是IE分析器(通常是最慢的JS性能,因此实际上是开始优化良好的实验环境)。 它会给你一个完整的分解,显示你重复的方法调用,调用树和你的CPU周期去。 Check out their tutorials on usage/features即可开始。
  3. Improving jQuery Performance with Large Data Sets主题包括:
  1. 使用JavaScript原生的()循环,而不是jQuery的$。每()辅助
    功能。
  2. 请勿在循环中将元素附加到DOM中。
  3. 如果您有很多要插入DOM的元素,请使用父元素将它们包围
    以获得更好的 性能。
  4. 不要使用字符串连接,而应该使用数组的join()方法来处理 很长的字符串。
  5. 使用setTimeout()函数为您的长列表循环和级联
    函数。

  6. 缩减大小脚本

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

0

我相信你可以渲染/未呈现一个.click()功能对号,然后做你的在另一个.click()中的jqGrid操作。即

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

但是如何?我花了整整一天的时间来弄清楚这一点。 – ktm5124 2013-02-16 22:43:36

+0

我相信这是正确的,尽管第二个'.click'可能需要是'.done' – gilbertbw 2013-02-16 23:01:56