zoukankan      html  css  js  c++  java
  • 高性能 内存 事件优化

    为什么要优化:

    1、每一个函数都是一个对象,会占用内容
    2、需要添加事件的Dom节点越多,就要花更多的时间去给那些节点添加处理函数,延迟整个页面的交互,因为先得把事件都加上去 : (
     
    优化1:使用事件代理
    <ul id=”myLinks”>
        <li id=”goSomewhere”>Go somewhere</li>
        <li id=”doSomething”>Do something</li>
        <li id=”sayHi”>Say hi</li>
    </ul>
     
    var item1 = document.getElementById(“goSomewhere”);            //单独为每一个列表添加事件处理
    var item2 = document.getElementById(“doSomething”);
    var item3 = document.getElementById(“sayHi”);
    EventUtil.addHandler(item1, “click”, function(event){
         location.href = “http://www.wrox.com”;
    });
    EventUtil.addHandler(item2, “click”, function(event){
         document.title = “I changed the document’s title”;
    });
    EventUtil.addHandler(item3, “click”, function(event){
         alert(“hi”);
    });
     
     
    var list = document.getElementById(“myLinks”);                       //使用事件代理,只需要给<ul>添加事件处理,再去判断事件源
    EventUtil.addHandler(list, “click”, function(event){
         event = EventUtil.getEvent(event);
         var target = EventUtil.getTarget(event);
         switch(target.id){
              case “doSomething”:
                   document.title = “I changed the document’s title”;
                   break;
              case “goSomewhere”:
                   location.href = “http://www.wrox.com”;
                   break;
              case “sayHi”:
                   alert(“hi”);
                   break;
         }
    });
    把事件处理函数放在document上,可以立即生效(不需要等待DOMContentLoaded和load事件)
     
    优化2:移除不在需要的事件处理函数
    当使用removeChild()   replaceChild()  或者 innerHTML() 方法操作Dom的时候,被移除替代的Dom上事件处理函数很可能没有被垃圾回收
    可以使用事件代理去避免这样的问题,当你知道某个Dom结构很可能有变化,那么就把事件处理函数放到上一级不会被操作的元素上去。
    当页面unload的时候,事件处理没有被remove,它们很可能还占据着内存,可以添加unload事件在页面卸载时remove事件处理函数(注意:添加了unload事件的页面不会保留在bfcache,可以只针对ie添加)
     
  • 相关阅读:
    剑指 Offer 47. 礼物的最大价值
    剑指 Offer 46. 把数字翻译成字符串
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 42. 连续子数组的最大和
    剑指 Offer 45. 把数组排成最小的数
    剑指 Offer 44. 数字序列中某一位的数字
    Express全系列教程之(七):cookie的加密
    Express全系列教程之(六):cookie的使用
    Express全系列教程之(八):session的基本使用
    在express项目中使用redis
  • 原文地址:https://www.cnblogs.com/chuangweili/p/5166287.html
Copyright © 2011-2022 走看看