Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Производительность движка в некоторых случаях можно увеличить #509

Open
vill opened this issue Mar 12, 2018 · 5 comments

Comments

@vill
Copy link

vill commented Mar 12, 2018

Всем привет. На мой взгляд движок в некоторых случаях делает ненужные вычисления, что влияет на производительность работы(сборки).

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. Сейчас движок обходит всегда все режимы.

Ссылки на примеры:

bem = false
tag = false

@miripiruni miripiruni self-assigned this Mar 12, 2018
@miripiruni
Copy link
Contributor

Я про эту идею уже думал, она мне очень нравится. Вечером попробую изменить профит от такой экономии.

И, конечно, это мажорное изменение.

@miripiruni
Copy link
Contributor

miripiruni commented Mar 16, 2018

Сравниваю ревизии:

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 %.

@vill
Copy link
Author

vill commented Mar 16, 2018

Пускай 0,6% но они есть, может не часто отключают эти режимы поэтому такая цифра, все может быть, но на мой взгляд это не правильно когда работа ради работы.

@miripiruni
Copy link
Contributor

miripiruni commented Mar 16, 2018

Разумеется. Я ни в коем случае не спорю в этом вопросе. Результаты просто говорят о том, как часто в шаблонах, которые я использовал для теста, используется bem:false (18 раз) и tag:false (4 раза). Для примера всего шаблонов более 1000.

@miripiruni
Copy link
Contributor

В итоге я не очень согласен с формулировкой заголовка таска. Так как не считаю, что производительность именно страдает. Но улучшить безусловно стоит.

@vill vill changed the title Производительность движка в некоторых случаях страдает от ненужных вычислений Производительность движка в некоторых случаях можно увеличить Mar 16, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants