【问题标题】:JQuery UI Dialog slowJQuery UI 对话框慢
【发布时间】:2011-03-15 11:13:17
【问题描述】:

我最近有点痛苦。我一直在使用 JQuery 对话框在 Web 应用程序中显示一些配置屏幕。没什么特别的。但是,我有几个边缘情况,其中此配置表单将显示一些... 11000 个选项的下拉列表。 [道奇烂番茄]

不用说,它很慢。显示 JQuery 对话框最多可能需要 9 秒(并且初始化也很慢)。

第一个问题是:有没有办法加快对话框的速度?从表面上看,它每次打开时都会复制所有内容。如果有办法避免这种情况,那会有所帮助。

第二个问题:当被要求显示大量数据时,还有其他 jQuery 对话框表现更好吗?

一如既往,欢迎使用其他解决方案。一些自动完成 ajax 也不错,但可能仍然很慢,除非它至少需要几个初始字符。

【问题讨论】:

  • 伙计,这是一个很长的下拉列表。即使您能够解决您的技术问题,我也建议您使用不同的控件,例如过滤列表或某种数据浏览器。取决于数据内容。

标签: jquery jquery-ui-dialog


【解决方案1】:

我遇到了这个问题并在这里找到了解决方案:http://forum.jquery.com/topic/select-in-dialog-causes-slowness-in-ie8

只需将对话框draggableresizable 选项设置为false

【讨论】:

  • 我在与完全相同的问题搏斗时偶然发现了您的答案。像魅力一样工作!
  • 哇,多么奇怪的巧合。一年多后,我在运行 IE 10 的机器上再次遇到同样的问题,发现可调整大小和可拖动似乎对缓慢没有明显影响。
【解决方案2】:

如何选择所有可能的第一个字母通过 AJAX 仅以该字母开头的选项进入第二个选择?

【讨论】:

    【解决方案3】:

    设法稍微提高了性能。我偏离了 JQuery UI 并创建了一个更轻量级的版本。我没有将目标的内容复制到对话中,而是围绕内容构建对话。

    在性能方面,对话从大约 10 秒缩短到 2 秒。

    【讨论】:

      【解决方案4】:

      2 秒听起来好多了,但您可能会发现它在很大程度上取决于用户的浏览器和系统配置 - 在 IE 中较慢的系统上可能会更糟...

      我会认真考虑使用其他东西来代替庞大的下拉菜单(这肯定不会对用户非常友好)——这听起来像是自动完成搜索框或多级级联下拉菜单的好选择——下降。

      您也可以在页面加载时创建对话框,并仅在需要时打开它(在选项中设置 autoOpen: false)

      【讨论】:

        【解决方案5】:

        如果您必须在这样的对话框中进行下拉,那么我建议在页面加载后将信息加载到隐藏的 div ajax 样式中,然后在需要时在您使用的任何灯箱/对话框中显示该隐藏的 div。这样,当用户在做其他事情时,这些东西就会被加载,并有望在他们准备好的时候准备好。

        【讨论】:

        • 这对于初始加载来说是一个很好的解决方案。虽然负载没有受到影响太可怕。当 IE 需要渲染下拉菜单时,问题就出现了。最初 div 是不可见的,一切正常。最大的问题是 JQuery UI 对话框必须复制 DOM 中的所有信息才能将其移动到其自定义容器中。每次加载对话框时它也会这样做。新对话框现在包装现有数据而不是复制它。这似乎加快了一些速度。在半透明冲洗方面确实遇到了困难,但现在效果很好。
        【解决方案6】:

        将可拖动和可调整大小设置为 false 有效。

        【讨论】:

        • 我有一个类似的问题(但没有巨大的下拉菜单)并且将可拖动和可调整大小设置为 false 对我不起作用。
        【解决方案7】:

        我刚刚使用带有数百个复选框的选项卡式对话框遇到了这个问题。我发现this link 很有帮助。之前打开对话框需要 17 秒,但现在缩短到 1.3 秒左右。 (我正在使用可拖动的不可调整大小的对话框

        诀窍是在打开对话框之前分离 html,然后使用对话框的 open 函数重新附加内容。

        $('#triggerDialogFast').click(function () {
            var $dialogContainer = $('#dialogContentFast');
            var $detachedChildren = $dialogContainer.children().detach();
            $dialogContainer.dialog({
                width: 425,
                height: 400,
                draggable: false,
                resizable: false,
                open: function () {
                    $detachedChildren.appendTo($dialogContainer);
                },
            });
        });
        

        我不确定,但如果在你的场景中可能的话,它应该可以通过在 open 函数中附加 html 来工作。

        【讨论】:

          【解决方案8】:

          取决于您使用什么 html 来显示数据,即与 chrome 或 firefox 相比可能会超级慢。

          尤其是当您展示大桌子时。这些链接可能有用 - 您甚至可以多花一点时间。

          http://jquery-howto.blogspot.com/2009/02/5-easy-tips-on-how-to-improve-code.html

          http://www.artzstudio.com/2009/04/jquery-performance-rules/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-25
            • 1970-01-01
            • 1970-01-01
            • 2012-12-04
            相关资源
            最近更新 更多