Vue底层判断标签的性能优化方法
25-04-07 05:17
1027
0
在vue中,如果写div、span等正常的html标签,vue会解析成传统的html标签,但当写不是这些标签的时候,vue会认为他是一个组件,例如:<Custom></Custom>。是如何做到这种判断的呢,首先自己来实现一个这样的判断
const tags = "div,span,img,a".split(","); function checkTag(tag) { return tags.some((item) => item === tag); } console.log(checkTag("Custom")); // false console.log(checkTag("div")); // true console.log(checkTag("a")); // true
这里的实现方案有很多,可以用for、some、forEach等,但是都是离不开循环,思考这样的一个问题,传入一个a,a在字符串最后一个位置,所以会循环4次来判断是否包含a,如果页面上的标签极多,甚至会有上万次的循环
再来查看Vue实现这个的方式,大致源码如下
const tags = "div,span,img,a"; function makeMap(str) { var map = Object.create(null); var list = str.split(","); for (var i = 0; i < list.length; i++) { map[list[i]] = true; } return function (val) { return map[val]; }; } const isHtmlTag = makeMap(tags); isHtmlTag("div"); isHtmlTag("Custom"); isHtmlTag("a");
这里可以看出,实现出一个柯里化函数,并且也是一个闭包状态。此时,在第一次调用时,会循环一次,后续不论在去判断什么标签,都不会再去循环,因为第一次的循环结果利用闭包已经存在了内存里,这就是闭包能带来的性能优化
-
PureCodec播放器电脑版-PureCodec(完美解码)
完美解码是一款能实现流行音视频、高清及4K等多媒文件软硬解播放的影音解码包,集成多媒体播放器PotPlayer、MPC-BE,分离器解M器套件LAV F... 1026 0 24-06-01 -
选择并使用Redi的核心数据类型
首先,来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型,分别是 :string 字符串类型;list 列表类型;set 集合类型;... 1151 0 24-05-24 -
wordpress资源下载类主题Modown4.3
Modown Metro 是一款有模板兔开发的WordPress 付费下载资源/付费查看内容主题 Modown的子主题,该子主题除继承Modown原皮的简单大气风... 575 0 21-07-12 -
奈特药理学彩色图谱
概述药理学(pharmacology)是在分子和整体水平上研究药物作用的一门学科,在分子水平上对药物作用的研究内容主要集中在药物对其它分子产生的... 1147 0 24-06-18 -
新浪读书小程序
新浪读书小程序提供了一个在线阅读平台,无需下载安装即可在微信、支付宝等平台使用,节省存储空间并提供即时阅读。该应用集成了丰富的电子... 859 0 24-09-16 -
移动端分类html
430 0 21-06-02 -
3D图片旋转相册鼠标可悬停
332 0 21-05-17 -
全屏切换查看图片
359 0 21-06-02
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~