jqGrid 多选对于大量本地数据非常慢,jQueryUI 1.8、jQueryUI 1.7 都很好

2023-11-30

我在 ASP.NET 页面中使用 jqGrid 并将数据注入到页面上的脚本块中,然后从那里加载。对于这一用例,我们需要立即在屏幕上显示大量数据。其中涉及 300~500 条记录,每行 30 列。对于这种情况,分页不太合适。用户需要能够扫描大量数据,选择 40~60 行,然后移至另一个屏幕。

我不确定这是否适合 jqGrid 的需求,但在原型设计中,一切都运行得足够快。然而,在多选模式下,转向生产却非常缓慢。

我已将痛点范围缩小到 jQueryUI 1.8。如果我将其恢复到 jQueryUI 1.7,它已经足够快了。

jQueryUI 1.7 示例 ~17.htm

jQueryUI 1.8 的例子~18.htm

注意:示例显示 FireFox 和 IE 中的差异最大,Chrome 似乎还可以

两个页面都使用最新的 jqGrid 3.8,并选择了所有选项。

从 google CDN 加载 jQuery 和 jQueryUI

<base href="http://ajax.googleapis.com/" />
<link href="/ajax/libs/jqueryui/1.8/themes/start/jquery-ui.css" type="text/css"  />
<script src="/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>
<script src="/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script>

从我的服务器加载 jqGrid JS / CSS

<link type="text/css" href="http://mymx.biz/jqGrid/ui.jqgrid.css" />
<script src="http://mymx.biz/jqGrid/grid.locale-en.js" type="text/javascript"></script>
<script src="http://mymx.biz/jqGrid/jquery.jqGrid.min.js" type="text/javascript"></script>

和我的大型本地数据集

<script src="http://mymx.biz/jqGrid/getGridData.js?v=1" type="text/javascript"></script>

数据集中的示例行

var gridData = [
{id:"1",aa:"aa1",bb:"bb1",cc:"cc1",dd:"dd1",ee:"ee1", ff:"ff1",
  gg:"gg1", hh:"hh1", ii:"ii1", jj:"jj1", kk:"kk1", ll:"ll1", mm:"mm1", nn:"nn1"},
{...}
];

我的基本 jqGrid 设置调用

    $(function () {
      var gridData = getGridData(); // pulls from getGridData.js
      setupGrid(gridData);
    });

    function SelectRow(rowid) {
      // I will be firing AJAX calls here in the future
      console.log("rowid: " + rowid);
    }

    function setupGrid(gridData) {
      $("#testGrid").jqGrid({
        data: gridData,
        height: 'auto',
        rowNum: gridData.length,
        multiselect: true,
        datatype: 'local',
        multiboxonly: false,
        gridview: true, // not sure if this is needed since jqGrid 3.6
        onSelectRow: function (rowid) { SelectRow(rowid); },
        colNames: ['id', 'aa', 'bb', 'cc', 'dd', 'ee', 'ff',
            'gg', 'hh', 'ii', 'jj', 'kk', 'll', 'mm', 'nn'],
        colModel: [
           { name: 'id', width: 40 },
           { name: 'aa', width: 40 },
           { name: 'bb', width: 40 },
           { name: 'cc', width: 40 },
           { name: 'dd', width: 40 },
           { name: 'ee', width: 40 },
           { name: 'ff', width: 40 },
           { name: 'gg', width: 40 },
           { name: 'hh', width: 40 },
           { name: 'ii', width: 40 },
           { name: 'jj', width: 40 },
           { name: 'kk', width: 40 },
           { name: 'll', width: 40 },
           { name: 'mm', width: 40 },
           { name: 'nn', width: 40 }
        ],
       caption: "Test Grid"
      });
    }

如果有人知道为什么 jQueryUI 1.8 与 jQueryUI 1.7 的网格速度如此之慢,我们将不胜感激。


“很高兴”看到有人有同样的问题。

我打开了您的示例,单击行或复选框在 UI 1.8 中表现不佳。

我们(php项目,数据本地存储在JSON变量中,本地处理(排序,过滤),无分页,一次最多1000条记录)面临着同样的问题,但尚未找到解决方案。 UI 1.7 在任何浏览器中都表现良好,但随着 1.8 的更改,我们注意到仅 Firefox 出现了一些严重的性能问题(3.6,没有测试较低版本)。 IE6,我们的其他支持的浏览器工作正常(至少这一次:-)

我试图找出这个问题的根源,并使用 firebug 来分析单击后调用的不同函数的运行时。我知道 jquery 对于不同的浏览器有不同的事件处理(标准化),但我不知道这是否有任何影响。

结果可以在这里找到:个人资料.png

也许您会在此列表中看到任何值得注意的内容。

由于我们也没有找到任何解决方案,因此我们降级到 UI 1.7.3(它会带来其他但很小的问题)。

Kai

编辑:您是否在 jqGrid 论坛中报告了此问题?大多数问题至少会得到解决。

edit2:好的,经过一些进一步的调查和研究,我找到了解决方法。如此处所述(http://www.trirand.com/blog/?page_id=393/bugs/compatibility-bug-with-jquery-ui-1-8-4/),可以通过从 UI 的 css 中删除以下行来(暂时)解决该问题:

.ui-widget :active { outline: none; }

我可以确认删除此行后不再存在性能问题。由于这条规则对我们的风格没有影响,因此解决方法成为我们的解决方案......:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jqGrid 多选对于大量本地数据非常慢,jQueryUI 1.8、jQueryUI 1.7 都很好 的相关文章

  • jQuery:如何引用类名带有句点的 HTML 元素?

    我这样有几个元素 td class sede co uk 我想这样使用 jquery 引用它们 td sede co uk 但 jquery 没有 找到 它们 因为 我猜 co 和 uk 之间的点 任何想法 Regards Javi You
  • 使用 JavaScript 选择用户控件中的元素

    我有一个包含用户控件的 Web 表单 我希望能够使用 JavaScript 从表单页面访问用户控件中的 html 元素 我尝试了以下方法 document getElementById 但这返回了null 我用 firebug 环视了一下
  • jQuery能否获取未绘制的动态元素的大小

    我的意思是如果我用 jQuery 和 DOM 创建一个 Element var MainHolder document createElement div addClass box 如果我打电话MainHolder width 如果不在窗口
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • jqgrid,调用URL带参数为Json返回

    我的 aspx 页面上有以下代码 jQuery listFondos jqGrid url PorMyController LoadGridData datatype json mtype GET colNames col1 col2 et
  • 如何选择两个元素之间的所有元素

    我想选择两个给定元素之间的所有元素 我有这样的html h2 This is firsty h2 p Some para p ul li list items li li list items li li list items li li
  • 有没有办法让 ValidationSummary 与客户端验证器一起使用?

    NET ValidationSummary 控件聚合来自回发时触发的验证器的错误消息 有没有某种方法可以让它也显示来自客户端验证器的错误消息 我正在解决的问题是 在长页面上 可能会单击提交按钮 导致某些客户端验证器失败 但永远不会看到错误消
  • 具有固定位置的平滑滚动标题

    当我将位置更改为固定时如何创建平滑滚动 我尝试添加动画但不起作用 最好使用jquery动画 window scroll function var sticky mobile menu scroll window scrollTop if s
  • 标点符号加载“动画”,javascript?

    我正在寻找一种好方法来显示一些标点符号加载 动画 我想要的是这样的 This will display at second 1 Waiting for your input This will display at second 2 Wai
  • 如何将 Telerik RadGrid 默认设置为编辑模式? (ASP.NET)

    我在 RadGrid 中有一个复选框列 我希望用户能够选中 取消选中它并设置附加属性 但是 当网格呈现时 复选框将被禁用 因为网格不处于 编辑模式 我找到的所有示例都希望我经历一个漫长的过程 选择记录 将其置于编辑模式 更改值 保存值 ya
  • 使用 jQuery 拖放

    我想使用 jQuery 进行简单的拖放操作 到目前为止我还没有做任何事情 但之前的尝试都没有成功 你有没有尝试过jQuery UI 可拖动 http jqueryui com demos draggable 简单用例 div class u
  • jquery:如何检查div中的所有单选按钮是否被选中

    我的 html 看起来像这样 div div
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 如何使用javascript隐藏div

    我想使用 Javascript 隐藏一个 div 下面是我的div div class ui dialog titlebar ui widget header ui corner all ui helper clearfix span cl
  • Signalr - 发送消息的重写方法

    我有一个实施PersistentConnectionSignalr 中的类 对于我们的网站 我需要能够广播消息 然后让每个连接确定该特定消息是否与该特定用户相关 然后再将其通过管道发送到浏览器 像这样的事情 public class MyC
  • jQuery 1.6:backgroundPosition 与 backgroundPositionX 和 FF4 兼容性

    在尝试升级 jQuery 插件 iCheckbox http stackoverflow com questions 6032538 以在 jQuery 1 4 4 之上工作时 我发现使用 animate backgroundPositio
  • 使用jquery和coldfusion cffile上传多个文件

    不是一个真正的问题 只是想将其发布在某个地方 因为我在其他地方找不到它 现在我已经拼凑了一个工作演示 我想我会分享 这在 Coldfusion 和 Railo CFML 服务器上同样有 效 问题是 对于 CFML 开发人员来说 CFFILE
  • 附加元素在 IE11 中不起作用

    在构造函数中我创建一个元素 var this legendElement this compileLegend 后来我想在事件监听器中使用它 var takeControl function this element empty this
  • 右列固定的 Div 表

    我最近接手了一个非营利网站作为一个项目 我正在使用一个现有的网站 所以我必须使用很多已经编程的东西 所以我所要做的就是创建设计 I made a diagram of basically what I can t figure out ho
  • 本地权威声明和外部提供商声明的混淆

    我正在创建一个简单的 WebApi 它允许用户与 Facebook 连接 当我从 facebook 获取 accessToken 时 我调用 RegisterExternal 创建 Asp Net Identity 记录并存储令牌中的声明

随机推荐