zoukankan      html  css  js  c++  java
  • js性能优化-事件委托

    js性能优化-事件委托

    考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少遇到这么多li的情况),为每个li添加事件侦听就会对页面性能产生很大的影响。

    就像下面这段代码:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>js性能优化</title>
    </head>
    <body> 
    <ul id='list'>
    <li>精通css</li>
    <li>精通js</li>
    <li>精通html</li>
    ......
    </ul>
    </body>
    </html> 
    <script type="text/javascript">
    (function(){
    var a=document.getElementById('list');
    var b=a.getElementsByTagName('li');
    for(var i=0;i<b.length;i++){
    b[i].addEventListener('click',function(e){
    var c = e.target; 
    alert(c.innerHTML);
    },false);
    }

    })();
    </script>

    首先,我们来想下,产生性能问题的根本原因是什么呢?li元素(目标对象)所要进行的事件处理了。怎么可以解决这种囧况呢?

    答案就是采用事件委托,将在li对象上面要处理的事件委托给父元素或者祖先元素,即为父元素绑定事件侦听,

    看看下面的改进代码:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>js性能优化</title>
    </head>
    <body> 
    <ul id='list'>
    <li>精通css</li>
    <li>精通js</li>
    <li>精通html</li>
    ......
    </ul>
    </body>
    </html> 
    <script type="text/javascript">
    (function(){
    var a=document.getElementById('list');
    a.addEventListener('click',function(e){
    var b = e.target; 
    alert(b.innerHTML);
    },false);
    })();
    </script>

     虽然现在很多框架都已经实现了事件委托,但是作为一个开发人员,用框架的同时我们也应该知道他实现的原理是如何的,知其然,更要知其所以然,下面是我最近在图灵社区看到的(jquery解决方案):http://www.ituring.com.cn/article/467,希望对大家开发有帮助!

  • 相关阅读:
    使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名
    部署 LAMP
    PHP与MYSQL事务处理
    centos6 yum 安装nginx 不成功解决办法
    5.5版本以上”No input file specified“问题解决
    php访问url的四种方式
    mysql索引总结----mysql 索引类型以及创建
    承诺,项目管理中的大杀器
    什么叫工作到位?
    Java中注解Annotation的定义、使用、解析
  • 原文地址:https://www.cnblogs.com/raoyunxiao/p/4769091.html
Copyright © 2011-2022 走看看