Производительность движка в некоторых случаях можно увеличить
vill opened this issue · 5 comments
Всем привет. На мой взгляд движок в некоторых случаях делает ненужные вычисления, что влияет на производительность работы(сборки).
Possible Solution
Необходимо изменить порядок обработки режимов, например у себя(не на jS) я реализовал так:
ATTRS_MODE = :attrs
BEM_MODE = :bem
CLS_MODE = :cls
CONTENT_MODE = :content
JS_MODE = :js
MIX_MODE = :mix
MODS_MODE = :mods
REPLACE_MODE = :replace
TAG_MODE = :tag
BEM_RELATED_MODES = [JS_MODE, MIX_MODE, MODS_MODE].freeze
TAG_RELATED_MODES = [BEM_MODE, *BEM_RELATED_MODES, CLS_MODE, ATTRS_MODE].freeze
MODES = [REPLACE_MODE, TAG_MODE, *TAG_RELATED_MODES, CONTENT_MODE].freeze
Если после режима tag
получается что html tag не нужен, тогда все режимы которые зависят от режима tag
а их 6 штук не будут обрабатываться, зачем для них перебирать шаблоны делать в них вычисления(возможно даже apply
и applyNext
), если результат их работы некуда будет вывести? Это касается и режима bem
и обработка связанных с ним режимов их 3 штуки, хотя возможно его выключают реже чем tag
. Сейчас движок обходит всегда все режимы.
Ссылки на примеры:
Я про эту идею уже думал, она мне очень нравится. Вечером попробую изменить профит от такой экономии.
И, конечно, это мажорное изменение.
Сравниваю ревизии:
rev1: 'd830717eed5b9c4527c317ec4d71ed8be3eb017b', // после оптимизации
rev2: '8083faba3dd01657d88b3def5a796c2099f369c2', // до оптимизации
На 2000 разных BEMJSON-ах. Довольно больших, взятых с реальных проектов.
Результат не очень разный до и после:
Percentile: 0.5
{ rev1: 4.094029,
rev2: 4.126047,
'diff abs': 0.03201799999999988,
'diff percent': 0.7759969772520692 }
Percentile: 0.9
{ rev1: 6.168265,
rev2: 6.238977,
'diff abs': 0.07071200000000033,
'diff percent': 1.133390938931178 }
Percentile: 0.95
{ rev1: 7.119671,
rev2: 7.164754,
'diff abs': 0.045082999999999984,
'diff percent': 0.6292330483363417 }
На 95 процентиле разница с 0,6 %.
Пускай 0,6% но они есть, может не часто отключают эти режимы поэтому такая цифра, все может быть, но на мой взгляд это не правильно когда работа ради работы.
Разумеется. Я ни в коем случае не спорю в этом вопросе. Результаты просто говорят о том, как часто в шаблонах, которые я использовал для теста, используется bem:false
(18 раз) и tag:false
(4 раза). Для примера всего шаблонов более 1000.
В итоге я не очень согласен с формулировкой заголовка таска. Так как не считаю, что производительность именно страдает. Но улучшить безусловно стоит.