Настройка производительности нокаут-приложения - рекомендации по улучшению времени отклика - PullRequest
42 голосов
/ 29 марта 2012

У меня есть большая, сложная страница, которая сильно зависит от knockout.js.Производительность начинает становиться проблемой, но исследование стека вызовов и попытка найти узкие места является реальной проблемой.

Я заметил в другом вопросе ( Knockout.js - понимание foreach и с ), что принятый ответ имеет комментарий:

... и япредлагаю не использовать with там, где необходима высокая производительность из-за накладных расходов ...

Предполагая, что утверждение верно, это действительно полезный материал, и я не нашел источника для такой производительностиСоветы.

Поэтому мой вопрос:

Существуют ли общие рекомендации / основные советы, которые можно применить, чтобы повысить производительность моего приложения, прежде чем я углублюсь в классическую настройку производительности.

Ответы [ 3 ]

37 голосов
/ 30 марта 2012

Я думаю, что было бы слишком сложно изложить советы, которые я имею в виду, в одном ответе.

Я начал серию сообщений в блоге на эту тему. Первый пост здесь .

В этом посте немного описывается, как работает if/with (копирует дочерние элементы в качестве шаблона и выполняет повторную визуализацию с использованием шаблона при каждом запуске привязки), а также объясняется, как эти привязки могут быть причиной повторных визуализаций гораздо чаще, чем ожидалось.

Я буду обновлять этот ответ с будущими сообщениями.

6 голосов
/ 07 ноября 2012

Одна из самых больших ошибок, которые я обнаружил (и о которых мы не говорили в другом месте), заключается в том, что Knockout переоценивает каждую привязку для элемента всякий раз, когда любая привязка дляизменения элемента .

Обычно это не имеет большого значения, но для привязок, которые обычно дороги (например, template), это может создать значительные проблемы с производительностью.

Присоединять привязки, которые визуализируют контент / дочерние элементы (template, foreach и т. Д.) К виртуальному элементу (с использованием синтаксиса потока управления без контейнера ), если они не являются единственной привязкой к элементу.

0 голосов
/ 13 августа 2013

Я думаю, что сопоставление также может помочь, вы можете пройти этот тест и увидеть разницу между использованием jquert map, knockout map knockout-map-vs-jquery-map

Когда вы начинаете интенсивно использовать отображение ObservableArrays,

...