2017-09-05 4 views
0

J'utilise document.elementFromPoint dans un projet et il semble très lent. 100 000 itérations prend 7051 ms. 100 000 itérations de document.getElementsByTagName("*") ne prend que 32ms. Pourquoi document.elementFromPoint est plus de 200 fois plus lent? Y a-t-il une alternative plus rapide?document.elementFromPoint la vitesse est lente

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(); 

Répondre

1

La fonction des DOM elementFromPoint 2 points donnés pour obtenir les topmos besoin de boucle autour du point multiple d'un même élément à l'intérieur de toutes les balises DOM et enfin trouver les éléments autour des points x, y qui sont les topmos entre nous. Plus d 'infos ici https://drafts.csswg.org/cssom/#documentlayout-elementfrompoint Le document.getElementsByTagName ("*") ne boucle que sur le tag html (html - head - body - div - ul - li - dt - span - input ...) mutch plus vite que elementFromPoint. Cordialement

+0

Merci d'avoir expliqué le fonctionnement. Y a-t-il un autre moyen de faire cela plus rapidement? – techdog

+0

Ma question, il y a une raison particulière d'utiliser cette fonction? peut être l'alternative dépend de ce que vous devriez obtenir comme résultat dans votre contexte. Cordialement. –