【问题标题】:How Can i optimize qTip?如何优化 qTip?
【发布时间】:2011-04-09 21:13:16
【问题描述】:

我一直在对我正在开发的应用程序进行一些分析,而 qTip 确实减慢了它的速度!我喜欢这个插件,但是在准备好文档时添加提示需要将近 2 秒(页面上大约有 300 个提示)。我知道有很多技巧,但有没有明显或不那么明显的方法可以加快速度?

我在这里使用的是 2.0 的每日版本:

http://github.com/craga89/qtip

我用来添加提示的主要功能是:

var thingsToTip = $('.TipMe');
for (var currentItem, i = -1; currentItem = thingsToTip[++i]; ) {
    currentItem = $(currentItem);
    currentItem.qtip({
        style: {
            widget: false,
            classes: 'ui-tooltip-light' 
        },
        content: currentItem.attr('tooltip'),
        position: {

            at: 'bottomRight',
            my: 'topleft',
            adjust: {
                screen: 'flip',
                x: 0,
                y: 0
            }
        }
    });
}

现在我知道按班级选择并不是最有效的。但我尝试将其切换为 span.TipMe,它仅在 2069 年中节省了大约 10 毫秒,因此为了便于阅读,我将其取回。 我已经将它从使用 .each 转换为传统的 for 循环。这为我节省了大约 100 毫秒。与总运行时间相比,这又是杯水车薪。

我一直在使用 dynaTrace 来追踪缓慢的部分。

整个函数需要 2069 年才能运行。 其中 1931 年是 qtip 功能。所以我对加速循环和选择器并不太感兴趣。他们很好。我需要减少花在实际 qtiping 上的时间。

希望很清楚我想要做什么。

我愿意尝试几乎任何东西,如果有更高效的工具提示插件,我愿意放弃 qTip!

【问题讨论】:

    标签: javascript jquery performance optimization qtip


    【解决方案1】:

    就像其他人说的那样,只有在它们悬停或完成任何要求后才尝试附加它们。

    $(".TipMe").live("mouseover", function () {
        var $this = $(this)
        if (!$this.data("toolTipAttached")) {
            $this.qtip({
                style: {
                    widget: false,
                    classes: 'ui-tooltip-light'
                },
                content: $this.attr('tooltip'),
                position: {
    
                    at: 'bottomRight',
                    my: 'topleft',
                    adjust: {
                        screen: 'flip',
                        x: 0,
                        y: 0
                    }
                }
            });
    
            $this.data("toolTipAttached", true);
    
            // the qtip handler for the event may not be called since we just added it, so you   
            // may have to trigger it manually the first time.
            $this.trigger("mouseover.qtip");
        }
    });
    

    【讨论】:

    • 这真是太棒了!我不得不将 mouseover.qtip 更改为鼠标悬停。但它就像一个魅力!非常感谢!
    【解决方案2】:

    我会说你只是一次添加太多。

    您可以尝试使用window.setTimeout(); 一次加载一个,这样他们就不会挂断用户界面?虽然我不确定这是否可行。

    或者,仅当用户专注于该字段而不是预先加载它们时才应用 qTip...这显然会扼杀您的页面。

    用户真正想要显示所有 300 条提示的可能性有多大?然而你正在加载它们......

    实际上,您为什么要循环播放?这不会做同样的事情吗?

        $('.TipMe').qtip({
            style: {
                widget: false,
                classes: 'ui-tooltip-light' 
            },
            content: this.attr('tooltip'),
            position: {
    
                at: 'bottomRight',
                my: 'topleft',
                adjust: {
                    screen: 'flip',
                    x: 0,
                    y: 0
                }
            }
        });
    

    【讨论】:

    • 我把它放在一个循环中,因为我正在用它们做一些其他的东西,我在尝试优化时取出了这些东西。我现在就这样试试
    • @Patricia,不确定它是否会有所作为,jQuery 可能在内部循环。我猜如果你在 FF 中尝试页面,它在 FF 中会快得多。这可能是因为 IE 根本无法很好地处理大型 DOM(或其操作)。这就是你想要做的。这就是为什么我建议只以更“按需”的方式添加提示,而不是全部预先添加
    • 是的,它需要 1/3 的时间,或者在 FF 中更少。
    • 这使它降到了 1326。
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2021-02-02
    • 2010-12-20
    相关资源
    最近更新 更多