Мне нужно найти очень эффективный способ выяснить, имеет ли пользовательский элемент или какой-либо из его родительских элементов display: none;
Первый подход:
checkVisible() {
let parentNodes = [];
let el = this;
while (!!(el = el.parentNode)) {
parentNodes.push(el);
}
return [this, ...parentNodes].some(el => el.style.display === 'none')
}
Есть ли что-нибудь, что работает быстрее этого? Это даже безопасный метод?
Причина, по которой мне это нужно: у нас есть <data-table>
пользовательский элемент (собственный веб-компонент), который очень тяжело поднимается в connectedCallback()
. У нас есть приложение, содержащее около 20-30 таких пользовательских элементов на одной странице, что приводит к тому, что IE 11 занимает около 15 секунд до визуализации страницы.
Мне нужно отложить инициализацию тех <data-table>
компонентов, которые изначально даже не видны, поэтому мне нужен способ проверить внутри connectedCallback()
, видим ли элемент (чего нет, если он находится в одном из 18 вкладок изначально не показаны).