2017-09-05 142 views
0

我在项目中使用document.elementFromPoint,它看起来很慢。 100,000次迭代需要7051毫秒。 document.getElementsByTagName("*")的100,000次迭代只需要32ms。为什么document.elementFromPoint慢了200多倍?有没有更快的选择?document.elementFromPoint速度慢

function elementFromPointSpeed() { 
    start=performance.now(); 
    for(var i=0;i<100000;i++) 
    el=document.elementFromPoint(100,100); 
    //el=document.getElementsByTagName("*"); 
    end=performance.now() 
    console.log(end-start) 
} 
elementFromPointSpeed(); 

回答

1

给予获得topmos DOM elementFromPoint 2点的功能需要围绕同一元素的多点循环中所有DOM标签内终于发现周围的点X的元素,Y谁是topmos我们之间。这里更多的信息https://drafts.csswg.org/cssom/#documentlayout-elementfrompoint document.getElementsByTagName(“*”)只在标记html(html - head - body - div - ul - li - dt - span - input ...)上循环时比mutate快于elementFromPoint。 Regards

+0

感谢您解释它是如何工作的。还有另外一种方法可以做得更快吗? – techdog

+0

我的问题,有什么特别的原因使用这个功能?可能是另一种选择,取决于你在上下文中想要得到的结果。问候。 – 2017-09-05 18:02:20