如何为jquery-ui Spinner加速bindingHandler

时间:2014-05-07 18:04:08

标签: javascript jquery performance jquery-ui knockout.js

我为一个淘汰的微调器获得了这个绑定:

ko.bindingHandlers.spinner = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        //initialize datepicker with some optional options
        var options = allBindingsAccessor().spinnerOptions || {};


        $(element).spinner(options);

        //handle the field changing
        ko.utils.registerEventHandler(element, "spinchange", function () {
            var observable = valueAccessor();
            observable($(element).spinner("value"));
        });

        //handle disposal (if KO removes by the template binding)
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $(element).spinner("destroy");
        });

    },
    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor()),
            current = $(element).spinner("value");

        if (value !== current) {
            $(element).spinner("value", value);
        }
    }
};

它没有问题,但当我向页面添加大量这些时,我会遇到性能问题。 在我的页面上,我有44个微调器,导致视图加载2秒。用带有“值”绑定的旋转器替换微调器可以解决性能问题,但看起来不太好。 有关如何加快bindingHandler以提高效率的建议吗?

1 个答案:

答案 0 :(得分:0)

您的自定义绑定中没有任何内容显着减慢它的速度。您的绑定是将jQuery UI插件与Knockout相结合的最简单形式的完美示例。我有很多像这样的绑定,有数百个添加到页面,没有性能问题。

那么问题是什么?我们不能告诉你,因为相关代码不存在。此功能中最慢的部分可能是微调器本身,而不是您创建的绑定。要加快速度,您需要优化微调器插件。我不知道这是否完全可能,因为你的帖子中没有提到这个插件。

完全不同的说明:在页面上显示44个微调器可能不会有助于用户体验。也许你应该减慢微调器的使用:p