定义

为一个对象提供一种代理以控制对这个对象的访问

分类

虚拟代理:虚拟代理是把一些开销很大的对象,延迟到真正需要它的时候才去创建执行
安全代理:控制真实对象的访问权限
远程代理(一个对象将不同空间的对象进行局部代理)
智能代理(调用对象代理处理另外一些事情如垃圾回收机制增加额外的服务)

注:在真实的开发中往往对于代理模式划分不那么清晰,也就是不会只用某一种代理模式,而是多种代理模式的结合。

应用

虚拟代理-图片加载,文件上传
保护代理-登录操作后才能看全功能,前端校验
远程代理-监控多个对象的状态,总机监控分店
智能代理-提供额外的其他服务 火车站代售处

分析

虚拟代理:以图片预加载、懒加载为例

问什么要使用预加载+懒加载?以淘宝举例,商城物品图片多之又多,一次全部请求过来这么多图片无论是对js引擎还是浏览器本身都是一个巨大的工作量,会拖慢浏览器响应速度,用户体验极差,而预加载+懒加载的方式会大大节省浏览器请求速度,通过预加载率先加载占位图片(第二次及以后都是缓存中读取),再通过懒加载直到要加载的真实图片加载完成,瞬间替换。这种模式很好的解决了图片一点点展现在页面上用户体验差的弊端。
须知:图片第一次设置src,浏览器发送网络请求;如果设置一个请求过的src那么浏览器则会从缓存中读取from disk cache

<div class="demo"></div>function MyImg(_class) {var _img = document.createElement('img');this.setSrc = function (_src) {_img.src = _src;}document.getElementsByClassName(_class)[0].appendChild(_img);
}var ProxyMyImg = (function () {//代理MyImgvar _img = new Image();var _myImg = new MyImg('demo');_img.onload = function () {//_img的src加载完成后,_myImg的src被_img的src替换setTimeout(function () {_myImg.setSrc(_img.src)//这里设置请求过的src直接从缓存读取,速度飞快不会出现一点点加载图片的情况}, 1000)}return function (occupySrc, src) {_myImg.setSrc(occupySrc);//预加载占位图片_img.src = src;}
})()ProxyMyImg('占位图片src','最终加载图片src')

JS设计模式之代理模式-虚拟代理相关推荐

  1. 代理模式——虚拟代理(二)

    代理模式定义 为另一个对象提供一个替身或占位符以控制对这个对象的访问.使用代理模式创建代表对象,让代表对象控制对某对象的访问,被代理的对象可是远程的对象.创建开销大的对象或需要安全控制的对象. 代理分 ...

  2. 代理模式 虚拟代理实现图片预加载

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. 在Web开发中,图片预加载是一种常用的技术,如果直接给某个img标签节点设置src属性,由于图片过大或者网络不佳,图片的位置往往有段时 ...

  3. 代理模式——虚拟代理(结构型)

    上一章已经了解了远程代理,这一章将会介绍虚拟代理 代理分三种: 1.远程代理,帮助我们控制访问远程对象: 远程代理可以作为另一个JVM上对象的本地代表.调用代理的方法,会被代理利用网络转发到远程执行, ...

  4. 代理模式 -虚拟代理 ProxyPattern

    interface IVirtualProxy { void Request(); } 虚拟代理接口 using System; using System.Threading; class Virtu ...

  5. 代理模式——远程代理(一)

    代理模式定义 为另一个对象提供一个替身或占位符以控制对这个对象的访问.使用代理模式创建代表对象,让代表对象控制对某对象的访问,被代理的对象可是远程的对象.创建开销大的对象或需要安全控制的对象. 代理分 ...

  6. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

  7. 代理模式(三):远程代理,虚拟代理,缓冲代理

    15.4 远程代理 远程代理(Remote Proxy)是一种常用的代理模式,它使得客户端程序可以访问在远程主机上的对象,远程主机可能具有更好的计算性能与处理速度,可以快速响应并处理客户端的请求.远程 ...

  8. 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )

    文章目录 前言 一.静态代理的弊端 二.动态代理的优势 三.动态代理使用流程 1.目标对象接口 2.被代理对象 3.调用处理程序 4.客户端 四.动态生成 代理对象 类 的 字节码 文件数据 前言 代 ...

  9. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

最新文章

  1. 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
  2. 【数据可视化应用】华夫饼型柱状图(附R语言代码)
  3. 机器知道哪吒是部电影吗?解读阿里巴巴概念图谱AliCG
  4. Power BI与Power Query、Power Pivot 是什么关系?
  5. go mod 几个常用命令
  6. 《Head First Servlets JSP》-11-Web应用部署
  7. Davids实操笔记:Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索
  8. 超启发式算法(hyper heuristic)
  9. Derby 数据库内涵
  10. JavaC++题解与拓展——leetcode398.随机数索引【水塘抽样学习】
  11. 国外java_Java开发必知道的国外10大网站
  12. 数据库连接池的管理思想
  13. 如何将notepad++中的xml文件格式化(层级关系展示)
  14. 有激励果效的座右铭大全
  15. 杰理之音量控制【篇】
  16. Ubuntu18.04屏幕分辨率问题
  17. MLDN —— Java学习圣经
  18. vue 传base64到后台后台传到oss的java实现
  19. 怎么用python挣钱-利用业余时间怎么用python挣钱?
  20. 电信版系统可随时升级支持4G网络

热门文章

  1. 大一生活怎么过,一个爱学习的孩子是这么想的
  2. java 日期 第几周-java 获取给定日期属于当年第几周
  3. ZOJ3864:Quiz for EXO-L(BFS)
  4. 数字数据转换为字符数据_为什么替代数据对数字转换至关重要
  5. ESD9X5VU-2/TR瞬态电压抑制器WILLSEM ESD9X5VU 1线单向超低电容
  6. 教师资格证报名-ie浏览器-不兼容
  7. 哈希表+哈希桶简介及实现
  8. 聊聊Linux中的线程本地存储(1)——什么是TLS
  9. 2022年全国大学生数学建模竞赛E题目-小批量物料生产安排详解+思路+Python代码时序预测模型(三)
  10. CVE-2020-0787复现