Как ускорить связывание Handler для jquery-ui Spinner

0

Я получил эту привязку для нокаута:

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 секунд. Замена счетчика на "значение" -binding устраняет проблему с производительностью, но не выглядит великолепно. Любые предложения, как ускорить bindHandler, чтобы сделать его более эффективным?

  • 2
    Не могли бы вы воссоздать проблему в jsFiddle?
  • 0
    Слишком большой и сложный. Я проверил это как спиннер.хэндлер, который потратил время как упомянуто выше ...
Показать ещё 1 комментарий
Теги:
performance
knockout.js

1 ответ

0

В вашей пользовательской привязке ничего нет, что значительно замедляет ее. Ваша привязка - прекрасный пример простейшей формы объединения JQuery UI-плагина с Knockout. У меня много таких привязок, с сотнями, добавленными на страницу и без проблем с производительностью.

Так в чем проблема? Мы не можем вам сказать, потому что соответствующего кода там нет. Самая медленная часть этой функции, вероятно, сама прядильщик, а не связанная вами связь. Чтобы ускорить работу, вам нужно оптимизировать плагин spinner. Я не знаю, возможно ли это, потому что в этом посте не упоминается об этом плагине.

В целом другая заметка: отображение 44 роликов на странице, вероятно, не поможет пользователям. Возможно, вам следует замедлить использование счетчика: p

  • 0
    Замена счетчика на чистую привязку «значения» устранит проблему с производительностью, так что я думаю, это как-то обработчик счетчика.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню