Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Когда вы начинаете сильно использовать сопоставление ObservableArrays, становится решающим