惰性模式:减少代码每次执行时的重复性判断,通过重新定义对象来避免原对象中的分支判断,提高网站性能。

例如针对不同浏览器的事件注册方法:
var AddEvent = function(dom, type, fn){
if(dom.addEventListener){
dom.addEventListener(type, fn, false);
}else if(dom.attachEvent){
dom.attachEvent('on'+type, fn);
}else{
dom['on'+type] = fn;
}
}
从上面的方法可以发现,每次为元素绑定事件时,都会进行检测判断,这是多余的,因为在同一浏览器中分支判断结果是唯一的,不可能走不同的分支。
我们可以用惰性模式来解决这个问题,既然第一次调用该方法时已经判断过了,那么就可以在第一次执行时根据判断结果重新定义该方法。
惰性模式主要有两种实现方法:
加载即执行:JavaScript文件加载时通过闭包执行对方法进行重新定义,在页面加载时会消耗一定的资源。
var AddEvent = function(dom, type, fn){
if(dom.addEventListener){
return function(dom, type, fn){
dom.addEventListener(type, fn, false);
}
}else if(dom.attachEvent){
return function(dom, type, fn){
dom.attachEvent('on'+type, fn);
}
}else{
return function(dom, type, fn){
dom['on'+type] = fn;
}
}
}();
惰性执行:第一次执行函数时在函数内部对其进行显示重写,最后调用重写后的方法完成第一次方法调用。
var AddEvent = function(dom, type, fn){
if(dom.addEventListener){
AddEvent = function(dom, type, fn){
dom.addEventListener(type, fn, false);
}
}else if(dom.attachEvent){
AddEvent = function(dom, type, fn){
dom.attachEvent('on'+type, fn);
}
}else{
AddEvent = function(dom, type, fn){
dom['on'+type] = fn;
}
}
AddEvent(dom, type, fn);
};
与加载即执行不同的是,JS文件加载完成后,惰性执行的函数还没有被重新定义,当函数被首次调用时才会被重定义。这两种惰性方式都避免了冗余的分支判断。
惰性模式的应用场景非常广泛,特别是当今浏览器种类繁多的现象,很多功能在不同浏览器中实现不一,为了兼容不同的浏览器,代码中往往会有许多对不同浏览器的分支判断,比如事件处理、XMLHttpRequest对象创建等,造成代码臃肿冗余,惰性模式正好可以解决这种问题,提高代码执行效率。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# JS
# 设计模式
# 惰性模式
# 浅析AngularJS中的生命周期和延迟处理
# 如何用JavaScript实现一个数组惰性求值库
# JavaScript中的惰性载入函数及优势
# JavaScript惰性载入函数实例分析
# JavaScript惰性求值的一种实现方法示例
# 从延迟处理解析JavaScript惰性编程
# 加载
# 重写
# 的是
# 这是
# 器中
# 还没有
# 过了
# 首次
# 可以用
# 有许多
# 对其
# 有两种
# 这两种
# 往往会
# 时才
# 绑定
# 解决这个问题
# 大家多多
# 就可以
# 能走
相关文章:
制作营销网站公司,淘特是干什么用的?
平台云上自助建站如何快速打造专业网站?
如何基于云服务器快速搭建个人网站?
如何自定义建站之星网站的导航菜单样式?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何破解联通资金短缺导致的基站建设难题?
智能起名网站制作软件有哪些,制作logo的软件?
公众号网站制作网页,微信公众号怎么制作?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
C++时间戳转换成日期时间的步骤和示例代码
建站之星图片链接生成指南:自助建站与智能设计教程
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何快速搭建高效服务器建站系统?
建站主机是否等同于虚拟主机?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在万网ECS上快速搭建专属网站?
,交易猫的商品怎么发布到网站上去?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
c# 在高并发场景下,委托和接口调用的性能对比
seo网站制作优化,网站SEO优化步骤有哪些?
如何在橙子建站上传落地页?操作指南详解
如何快速搭建虚拟主机网站?新手必看指南
教程网站设计制作软件,怎么创建自己的一个网站?
如何在IIS中新建站点并解决端口绑定冲突?
定制建站价位费用解析与套餐推荐全攻略
如何高效完成自助建站业务培训?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
安徽网站建设与外贸建站服务专业定制方案
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
建站之星导航配置指南:自助建站与SEO优化全解析
魔毅自助建站系统:模板定制与SEO优化一键生成指南
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
三星网站视频制作教程下载,三星w23网页如何全屏?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
网站制作软件免费下载安装,有哪些免费下载的软件网站?
海南网站制作公司有哪些,海口网是哪家的?
香港服务器WordPress建站指南:SEO优化与高效部署策略
官网建站费用明细查询_企业建站套餐价格及收费标准指南
广东企业建站网站优化与SEO营销核心策略指南
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
专业公司网站制作公司,用什么语言做企业网站比较好?
高端云建站费用究竟需要多少预算?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
音响网站制作视频教程,隆霸音响官方网站?
,怎么在广州志愿者网站注册?
如何快速登录WAP自助建站平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。