Ember 2, производительность с использованием плагина, такого как ember-truth-helpers, вместо стандартного способа Ember

Если я использую этот плагин: https://github.com/jmurphyau/ember-truth-helpers

со многими, скажем,

{{#if (eq model.beautiful true) }}

or

{{#if (or (eq model.beautiful true) (eq model.crazy true) ) }}

Что Эмбер создает в фоновом режиме? Тот же javascript работает с вычисленными свойствами, например:

isBeautiful: Ember.computed.equal('model.beautiful', true); и так далее?

Если у меня есть 30 ComputedProperty (макросы Ember и пользовательские), лучше использовать этот плагин или способ Ember по умолчанию?

Мне интересно, потому что в некоторых шаблонах у меня может быть что-то подобное много раз!:

{{#if (or (eq model.beautiful true) (eq model.crazy true) ) }}

вместо только этого:

{{#if isBeautifulOrCrazy }}

Какое решение лучше с точки зрения производительности?


person Community    schedule 17.07.2017    source источник


Ответы (2)


Я не думаю, что пользователи заметят разницу. Мой выбор - меньше кода и лучшая ремонтопригодность, когда это возможно. В вашем случае, если у вас более 3 одинаковых строк {{#if (or (eq model.beautiful true) (eq model.crazy true) ) }}, я бы предложил вычисляемое свойство. Это значительно упростит шаблоны и незначительно увеличит размер контроллера. Если у вас есть одна и та же точная строка в нескольких шаблонах, вы можете создать вычисляемое свойство для модели, поэтому оно будет {{#if model.isBeautifulOrCrazy }}. Или помощник шаблона.

Что Эмбер создает в фоновом режиме?

Любой хелпер — это просто функция, которая возвращает какое-то значение. eq помощник будет выглядеть так:

function eq([l, r]) {
  return l === r;
}

Когда ember рендерит шаблон, он оценивает эту функцию и затем использует ее значение. И ререндер происходит, если один из аргументов был изменен. Я думаю, что под капотом у него что-то похожее на CP.

person Gennady Dogaev    schedule 17.07.2017

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

ember-truth-helpers предоставляет несколько простых помощников, поэтому вам не нужно писать их самостоятельно. Если вы предпочитаете, вы можете просто создать свои собственные помощники, особенно если вам не нравится, как ember-truth-helpers сравнивает значения. Для большинства людей ember-truth-helpers делает именно то, что они хотят.

Что Эмбер создает в фоновом режиме?

Давайте рассмотрим один пример: eq

Вот что делает ember-truth-helpers:

export function isEqual([a, b]) {
  return emberIsEqual(a, b);
}

А вот метод emberIsEqual(), который он вызывает из Ember.

export default function isEqual(a, b) {
  if (a && typeof a.isEqual === 'function') {
    return a.isEqual(b);
  }

  if (a instanceof Date && b instanceof Date) {
    return a.getTime() === b.getTime();
  }

  return a === b;
}
person ctcpip    schedule 17.07.2017