Исследование производительности, связанной с событиями и вычислением сценариев на веб-страницах (интерактивные элементы SVG) - PullRequest
0 голосов
/ 15 сентября 2018

Как вы узнаете, как повысить производительность веб-приложения, созданного как расширенное взаимодействие с пользователем по требованию (элементы SVG)?

Пользователь может расширить макет из вложенных элементов SVG.

// example
<svg id="parentSVG">
  <g data-structure="tree>
   <g data-child="child-node-1">...</g> 
   <g data-child="child-node-2">...</g>
   ...
   <g data-child="child-node-n">...</g>
  </g>
</svg>

Для каждого элемента (data-child) событие связывается.Здесь используется Hammer.js.

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

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

Мой код в настоящее время похож на:

// ui is each SVG element - in the example, a data-child element
Hammer(ui).on('tap', function (event) {
         event.preventDefault();
         if(event.stopPropagation) event.stopPropagation();
         else event.cancelBubble=true;

....// do something

}

// a second event 
Hammer(ui).on('panstart', function (event) {
         event.preventDefault();
         if(event.stopPropagation) event.stopPropagation();
         else event.cancelBubble=true;

....// do something

}


// a third event 
Hammer(ui).on('panend', function (event) {
         event.preventDefault();
         if(event.stopPropagation) event.stopPropagation();
         else event.cancelBubble=true;

....// do something

}

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

...