js虚拟代理实现图片的预加载

2023-11-15

<h1>虚拟代理实现图片的预加载</h1>
   <p>在Web开发中,图片预加载是一种常见的技术,如果直接给某个img标签节点这只src属性,由于图片过大或者网络不佳,图片的位置往往有一片
   	空白。常见的做法是先用一张loading图片占位,然后用异步的方式加载图片,等图片加载好了再把它填充到img节点里,这种场景就很适合是用虚拟代理。</p>
   	<script>
   	   var myImage = (function(){
   	       var imgNode = document.createElement("img");
   	       document.body.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( "loading.gif" );
   	             img.src = src;
   	         }
   	      }
   	   });
   	   
   	   proxyImage.setSrc("target.gif");
   	</script>
   	<p>现在我们通过proxyImage间接的访问myImage.proxyImage控制了客户对myImage的访问,并在此过程中加入
   	了一些额外的操作,比如在真正的图片加载好之前,先把Img节点的src设置成一张本地的loading.gif图片.</p>
   	<h1>代理模式的意义</h1>
   	<p>为了说明代理模式的意义,就不得不引入面向对象设计的原则——单一职责原则</p>
   	<p>单一职责原则指的是,就一个类(通常也包括对象和函数)而言,应该仅有一个引起他变化的原因。如果一个对象承担了多项
   	职责,就意味着这个对象将变得巨大,因其他变化的原因可能会有多个。</p>
   	<p>面向对象设计鼓励奖行为分不到细粒度的对象之中,如果一个对象承担的职责过多,等于把这些指责耦合到一起,这种耦合会导致
   	脆弱和低内聚的设计。当他发生变化时,设计可能会遭到意外的破坏。</p>
   	<p>另外,在面向对象的程序设计中,大多数情况下,若违反其他任何原则,同时将违反开放——封闭原则。</p>
   	<h1>代理和本体接口的一致性</h1>
   	<p>如果有一天我们不需要预加载,那么久不需要代理对象,可以选择直接请求本体。其中的关键是代理对象和本体对象都提供了setSrc方法,用户并不清楚代理和本体的区别,
   	这样做有两个好处:1.用户可以放心请求代理,他关心是否能得到想要的结果;2.在任何使用本体的地方都可以替换成使用代理。</p>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js虚拟代理实现图片的预加载 的相关文章

  • 简历制作-技术栈和项目经历如何写?

    1 一 技术栈写法 1 把所有的技术要点全部梳理出来 然后再根据简历去复习 不熟悉或者怕问到的 再做减法 2 不要复制 可以借鉴 结合自己的情况梳理出来属于自己的技术栈 3 分文别类 4 关键字使用 熟练 熟悉 掌握 了解 怎么去写 第一阶
  • ML --Softmax Function (Multiclass Classification) --Andrew Ng ---- Optional Lab

    Optional Lab Softmax Function In this lab we will explore the softmax function This function is used in both Softmax Reg
  • mongodb时间差8小时,原因及解决方案

    只要涉及到mongo的增删改查 他都会默认将时间 8 进行操作 不需要我们在代码中再进行时区设置 或者是为时间增加8小时 具体解析如下 PS 下面时区设置不起作用 该少8小时 还是少8小时 1 传参数 2017 06 28 14 13 28
  • js基础之Promise(全面+手写实现)

    1 是什么 Promise是一种异步编程的解决方案 用于处理异步操作并返回结果 主要作用是解决回调函数嵌套 回调地狱 的问题 使异步操作更加清晰 易于理解和维护 2 怎么用 Promise有三种状态 pending 进行中 fulfille
  • 算法题目:目标移动

    算法题目 目标移动 题目描述 给定一个数组 nums 以及一个整数 target 你需要把数组中等于target的元素移动到数组的最前面 并且其余的元素相对顺序不变 你的所有移动操作都应该在原数组上面操作 示例 1 输入 nums 5 1
  • 基于Prometheus的node_exporter源码编译和二次开发

    首先从GitHub上拉取node exporter源码 go get github com prometheus node exporter 在拉取过程中一般会出错 主要是由于golang官网被墙导致golang的有些工具库拉取不下来 如果
  • 【IntelliJ IDEA】编码设置终极版

    近期 团队多个小伙伴咨询 IntelliJ IDEA 乱码问题 记录一下IDEA常用的4种编码设置 一 IDEA配置文件范围 IDEA的配置有两个范围 如下图 Settings 设置当前工程配置 New Projects Settings
  • Docker安装redis并以配置文件方式启动

    关于docker安装redis 网上有各种教程 大家可自行安装 写这篇文章的目的是关于以配置文件挂载的方式启动失败的总结 一 Docker安装Redis redis版本 Redis 6 2 6 安装过程中所使用的redis版本 请自行确认
  • 标志位寄存器与CF、OF标志位的区分

    8086CPU的flag寄存器 16位 各标志位如下 这是32位EFLAG的低十六位图 但是32位与16位是一样的 只不过32位多了16位且高16位没有使用到 标志位寄存器中保存的是当前指令运算的信息状态 比如进位信息保存在CF标志位 注意
  • 微信小程序调试过程中页面加载不出来

    实习进入公司微信小程序第一个项目在调试过程中发现页面加载不出来 问题显示 module components form box date miniprogram computed js is not defined 百度搜索了一下 看到社区
  • Mongodb数据库初识

    Mongodb数据库初识 一 什么是数据库 1 标准定义 2 数据库的概念 3 数据库的简单理解 4 使用数据库的原因 普通文件系统存储大量数据的问题 数据库的高效性 二 数据库的分类 1 关系型数据库 关系型数据库定义 关系型数据库的软件
  • 1030 完美数列 (25 分)

    题目 题目链接 题解 思维 从小到大排序后 从左开始选取一个数作为 m m m 二分选取右边的数作为 M M M 时间复杂度 O
  • 计算方法——C语言实现——全主元高斯消元法求解非线性方程

    最近在上计算方法这门课 要求是用MATLAB做练习题 但是我觉得C语言也很棒棒啊 题目 高斯消元法是线性方程组的直接解法 可能会造成很大的失真 尤其是高斯顺序消元法 对方法进行改进 使每次都选取绝对值最大的元素为主元 使其为乘数的分母 控制
  • MySQL安装配置教程-win10

    一 下载MySQL Mysql官网下载地址 https downloads mysql com archives installer 选择想要安装的版本进行下载 我这是使用的是5 6 21 二 安装MySQL 选择设置类型 双击运行mysq
  • 使用flask开启一个简单的应用

    Flask是非常流行的 Python Web框架 它能如此流行 原因主要有如下几点 有非常齐全的官方文档 上手非常方便 有非常好的扩展机制和第三方扩展环境 工作中常见的软件都会有对应的扩展 自己动手实现扩展也很容易 社区活跃度非常高 微框架
  • 数据分析 —— 数据挖掘是什么、能干嘛、怎么做

    数据分析 数据挖掘 什么是数据挖掘 数据挖掘 用于寻找数据中隐含的知识 并用于产生商业价值的一种手段 为什么要做数据挖掘 技术和商业就像一对双生子 在互相促进中不断演进发展 随之而来的就是个大公司的业务的突飞猛进 也涌现出很多的新模式 使得
  • MSYS2 如何切换镜像源(附带脚本自动修改)

    这篇文章将总结 如何切换MSYS2镜像 其实比较简单 但还是记录一下吧 下面示例中附带一个脚本 这样你就不用一个个手动修改了 1 镜像服务配置文件 MSYS2 的所有镜像服务配置 都在其安装路径下的etc pacman d目录下 可以看到
  • SpringBoot设置和读取配置文件(1)

    SpringBoot配置文件是用来保存SpringBoot项目当中所有重要的数据的 比如说数据库连接信息 数据库的启动端口 如果端口被占用了 那么就可以随时修改 1 比如说我们之前再写JDBC的代码的时候 要去写链接字符串 用户名密码 之前
  • 进化计算-遗传算法之史上最全选择策略

    获取更多资讯 赶快关注上面的公众号吧 文章目录 第十九章 遗传算法 史上最全选择策略 19 1 轮盘赌选择 Roulette wheel selection 19 2 锦标赛选择 Tournament selection 19 3 截断选择
  • 研究B站个人收藏中已失效的视频

    扩展阅读 b站收藏的已经失效视频怎么才能继续看到呢 话说B站被删的视频还有机会恢复吗 还有该网址内容存在未知风险这种操作的么 研究B站已失效的视频 目录 1 前言说明 2 获取和研究网页源代码 3 获取和研究 JSON 文件 4 其他途径的

随机推荐

  • java的示例题3

    前言 整理一部分java的示例题型 在线编译 入口 java的System out println与System out print 浩星 CSDN博客前言 java基础知识之System out println System out pr
  • Python爬虫进阶——Scrapy框架原理及分布式爬虫构建

    1 Scrapy简介 1 1 概念 Scrapy是由Python语言开发的一个快速 高层次的屏幕抓取和web信息抓取框架 用于抓取web站点并从页面中提取结构化的数据 Scrapy用途广泛 可以用于数据挖掘 监测和自动化测试 Scrapy还
  • Ubuntu yolov5 环境配置

    查看Ubuntu版本 cat proc version Linux version 5 4 0 150 generic buildd bos03 amd64 012 gcc version 7 5 0 Ubuntu 7 5 0 3ubunt
  • git submodule的使用

    Git 工具的 submodule 功能就是建立了当前项目与子模块之间的依赖关系 子模块路径 子模块的远程仓库 子模块的版本号 添加submodule git submodule add
  • RESTful接口规范(带案例)

    一 主要特征 以资源为基础 Rest是web服务的一种设计思想和风格 只要符合REST原则 即为RESTful URL只指定资源 以HTTP方法动词进行不同的操作 统一接口 对资源的操作包括获取 创建 修改和删除 这些操作正好对应HTTP协
  • 摸鱼的小贤在瞎搞R - R语言内置数据集的使用

    系列文章目录 1 R语言的安装及使用 还没写这个 太简单了不太想写 2 R语言内置数据集的使用 文章都会尽量详细 话多请见谅 我是话痨 文章目录 系列文章目录 1 查看包中有哪些数据集 2 查看某一特定数据集的基本信息 3 调用内置数据集
  • BIEE Demo(RPD创建 + 分析 +仪表盘 )

    一 环境准备 日期维度 CREATE TABLE SCOTT DIM DATE DAY KEY NUMBER NULL YEAR NUMBER NULL MONTH NUMBER NULL YEAR MONTH VARCHAR2 7 CHA
  • 北斗船载终端定位导航系统解决方案

    一 方案背景 近年来 随着江河运输行业的发展和转型 船舶逐渐向大型化 智能化以及高速化的方向发展 对于整个航运业而言 愈加复杂的环境 包括自然环境以及各类突发人为事件 使得人们意识到与船舶建立良好的通信以及对船舶动态监控的重要性 北斗导航定
  • vba:消息框基础,msgbox

    常量 常量值 说明 vbOKOnly 0 只显示 确定 按钮 缺省值 VbOKCancel 1 显示 确定 和 取消 按钮 VbAbortRetryIgnore 2 显示 终止 重试 和 忽略 按钮 VbYesNoCancel 3 显示 是
  • 基于径向基(RBF)神经网络的非线性系统识别及 MATLAB 代码实现

    基于径向基 RBF 神经网络的非线性系统识别及 MATLAB 代码实现 简介 在实际工程应用中 很多系统都是非线性的 这时需要对其进行建模和预测 本文讨论了一种基于 RBF 神经网络的非线性系统识别方法 并提供相应的 MATLAB 代码实现
  • 入门图像处理与图像识别的知识框架

    小白一枚 和大家共同学习 编程基础 C 曾经我想用python来做图像处理 后来发现无论是二维图像处理 opencv 还是三维点云处理 PCL 都得学C 数据结构与算法 设计程序的基础课程 编译原理 操作系统 并行计算算法 linux等知识
  • Authz和AuthzMatrix 逻辑越权工具

    目录 一 Authz 1 下载 2 使用 1 截获数据包 2 测试 三 Authzmatrix的安装和使用 1 配置jython环境 1 官网下载 2 点击下载 3 在burpsuite里导入 2 在bapp store下载Authzmar
  • Protobuf使用手册

    Protobuf使用手册 第1章 定义 proto 文件 首先我们需要编写一个 proto 文件 定义我们程序中需要处理的结构化数据 在 protobuf 的术语中 结构化数据被称为 Message proto 文件非常类似 java 或者
  • 简单排序 冒泡排序详解 C语言入门

    欢迎关注笔者 你的支持是持续更博的最大动力 目录 问题描述 思路 代码 相关内容 其他 问题描述 给n个数按从小到大排序 冒泡排序 思路 冒泡排序 把无序部分最大元素移动到有序部分第一个元素的左边 1 一开始数列中所有元素都是无序的 2 从
  • 压缩解压缩工具(gzip/gunzip、bzip2/bunzip2、zip/unzip、xz)和打包命令(tar)

    压缩 解压 打包命令 gzip gunzip命令 1 用途 注意 2 命令的使用格式 3 gzip和gunzip实例 bzip2 bunzip2命令 1 用途 注意 2 命令使用 3 bzip2和bunzip2实例 zip unzip命令
  • Linux系统Bash shell里解决中文输入和显示乱码的问题

    在VMWARE虚拟机里安装了CentOS6 5 由于工作性质 需要在shell里输入汉字 以及显示汉字 在网上搜索了很多设置方法 但都不管用 比如 vi etc sysconfig i18n 修改 LANG zh CN UTF 8 或者无论
  • [GKCTF 2021]easynode

    GKCTF 2021 easynode 知识点 js 弱类型 ejs 原型链污染 解题 源码 const express require express const format require string format const se
  • PyCharm中按住Alt键,可以选择一个指定列表,然后对这个数列进行操作,比如删除,增加等等...

  • jenkins学习笔记第七篇HTML Publish Report

    上一篇讲解了下载HTML Publisher Plugin 插件后 在项目构建发布HTML Report 项目执行后可以在构建里看到HTML Report 但是打开jenkins的报告是不会展示出原本的样式格式 因为jenkins将这些cs
  • js虚拟代理实现图片的预加载

    h1 虚拟代理实现图片的预加载 h1 p 在Web开发中 图片预加载是一种常见的技术 如果直接给某个img标签节点这只src属性 由于图片过大或者网络不佳 图片的位置往往有一片 空白 常见的做法是先用一张loading图片占位 然后用异步的