首页 > web前端 > js教程 > 正文

JavaScript代理模式_虚拟代理与缓存代理实践

紅蓮之龍
发布: 2025-11-20 17:46:57
原创
557人浏览过
代理模式通过代理对象控制对原对象的访问,可实现虚拟代理和缓存代理;虚拟代理用于图片预加载,先显示占位图再替换真实图片;缓存代理用于函数结果缓存,避免重复计算提升性能;两者均能在不修改原逻辑的前提下增强功能与性能。

javascript代理模式_虚拟代理与缓存代理实践

代理模式在JavaScript中是一种常见且实用的设计模式,它通过一个代理对象来控制对原对象的访问。这种模式能帮助我们延迟真实操作的执行(虚拟代理),或避免重复计算提升性能(缓存代理)。下面结合具体场景,说明如何用JavaScript实现虚拟代理和缓存代理。

虚拟代理:图片预加载

在网页开发中,直接加载大图可能导致页面卡顿或白屏。虚拟代理可以在真实图片加载完成前,先展示占位图,等图片下载完毕再替换,从而优化用户体验。

实现思路是创建一个代理对象,代替真实的图片对象进行加载管理。

  • 创建一个Image实例用于加载真实图片
  • 先设置img标签的src为loading图
  • 等待真实图片加载完成后再替换

代码示例:

立即学习Java免费学习笔记(深入)”;

function createImageProxy() {
  const img = new Image();
  const proxyImg = new Image();
<p>proxyImg.src = 'loading.gif'; // 占位图</p><p>img.onload = function () {
proxyImg.src = img.src;
};</p><p>return {
setSrc(targetImg) {
proxyImg.src = 'loading.gif';
img.src = targetImg;
},
getElement() {
return proxyImg;
}
};
}</p><p>// 使用
const imageProxy = createImageProxy();
document.body.appendChild(imageProxy.getElement());
imageProxy.setSrc('real-image.jpg');
登录后复制

缓存代理:函数结果缓存

某些计算密集型函数可能被频繁调用,传入相同参数时反复计算浪费资源。缓存代理可以记录已计算的结果,下次请求相同参数时直接返回缓存值。

适用于递归计算、复杂数据处理等场景。

 v10.35西部数码域名虚拟主机分销管理系统
v10.35西部数码域名虚拟主机分销管理系统

西部数码域名虚拟主机分销管理系统简单易用通过API接口与上级服务商通信。让使用者能在操作简单快捷的情况下轻松完成业务的实时申请、开通和管理以及续费升级。 系统的主要特色有:开源免费、模板分离使用方便、可以不依赖于上级代理独立运行、客服托管系统,降低售后服务压力、在线升级、无限级别代理平台、免费集成新网万网等五大域名注册接口、功能强大界面美观等 系统包含如下模块: 1、域名实时注册

 v10.35西部数码域名虚拟主机分销管理系统 73
查看详情  v10.35西部数码域名虚拟主机分销管理系统
  • 代理函数接收参数并生成唯一键(如JSON字符串)
  • 检查缓存中是否存在该键对应的结果
  • 有则返回缓存值,无则调用原函数并存入缓存

代码示例:

立即学习Java免费学习笔记(深入)”;

function createCacheProxy(fn) {
  const cache = new Map();
  return function (...args) {
    const key = JSON.stringify(args);
    if (cache.has(key)) {
      console.log('命中缓存:', key);
      return cache.get(key);
    }
    const result = fn.apply(this, args);
    cache.set(key, result);
    return result;
  };
}
<p>// 被代理的函数:斐波那契数列
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}</p><p>const cachedFibonacci = createCacheProxy(fibonacci);</p><p>console.log(cachedFibonacci(10)); // 计算一次,后续调用直接取缓存
console.log(cachedFibonacci(10)); // 命中缓存
登录后复制

代理的优势与适用场景

使用代理模式可以让原对象更专注自身职责,而将预加载、缓存、权限控制等横切逻辑交给代理处理。

虚拟代理适合资源加载类操作,比如图片、脚本、组件的懒加载;缓存代理适合开销大的纯函数调用。

现代JavaScript中的Proxy对象也能实现类似功能,但上述手动实现代理更直观,兼容性更好,适合理解原理和实际项目集成。

基本上就这些。掌握虚拟代理和缓存代理,能在不修改原逻辑的前提下增强功能和性能,是前端开发中值得掌握的技巧。

以上就是JavaScript代理模式_虚拟代理与缓存代理实践的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号