javascript设计模式-(五)

代理模式

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。

代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都 有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演 出的细节和报酬都谈好之后,再把合同交给明星签。

代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身 对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之 后,再把请求转交给本体对象。

虚拟代理

虚拟代理把一些开销很大的对象,延迟到真正需要它的时候才去创建

虚拟代理实现图片预加载
    var myImage=(function(){
        var imgNode=document.createElement("img");
        document.getElementById("contentBox").appendChild(imgNode);
        return {
            setSrc:function(src){
                imgNode.src=src;
            }
        }
    })();

    var proxyImage=(function(){
        var img=new Image;
        img.onload=function(){
            myImage.setSrc(this.src);
        }

        return {
            setSrc:function(src){
                myImage.setSrc("file:///C:/Users/YQ/Desktop/QQ%E6%88%AA%E5%9B%BE20161124145232.png");//默认图片
                img.src=src;
            }
        };
    })();` 
        </pre>

分时函数

在短时间内往页面中大量添加 DOM节点显然也会让浏览器吃不消,我们看到的结果往往就 是浏览器的卡顿甚至假死,这个问题的解决方案之一是下面的 timeChunk 函数, timeChunk 函数让创建节点的工作分批进 行,比如把 1秒钟创建 1000个节点,改为每隔 200毫秒创建 8个节点。

    var timeChunk = function(ary, fn, count) {
        var obj,
            t;
        var len = ary.length;
        var start = function() {
            for (var i = 0; i < Math.min(count || 1, ary.length); i++) {
                var obj = ary.shift();
                fn(obj);
            }
        };
        return function() {
            t = setInterval(function() {
                if (ary.length === 0) { // 如果全部节点都已经被创建好
                    return clearInterval(t);
                }
                start();
            }, 200); // 分批执行的时间间隔,也可以用参数的形式传入
        };
    };

    var ary = [];
    for (var i = 1; i <= 1000; i++) {
        ary.push(i);
    };
    var renderFriendList = timeChunk(ary, function(n) {
        var div = document.createElement('div');
        div.innerHTML = n;
        document.getElementById("contentBox").appendChild(div);
    }, 8);
    renderFriendList();

转载于:https://www.cnblogs.com/hlere/p/6748647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值