Vue底层判断标签的性能优化方法
25-04-07 05:17
1122
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");
这里可以看出,实现出一个柯里化函数,并且也是一个闭包状态。此时,在第一次调用时,会循环一次,后续不论在去判断什么标签,都不会再去循环,因为第一次的循环结果利用闭包已经存在了内存里,这就是闭包能带来的性能优化
-
CSS3带小图标下拉菜单
628 0 21-06-01 -
私语小程序-语音日记本 录音及播放(含PHP后端)
私语 - 语音日记本描述一个简易的语音日记本小程序(服务器语言选的PHP)。以语音的方式记录生活点滴。替代文字日记的理由是我觉得语音可... 1133 0 24-06-02 -
将浏览器窗口变成简单的文本编辑器
将浏览器窗口变成简单的文本编辑器如果你想调出一个简易的文本编辑器,那么你可以在浏览器的地址栏输入下面的代码:data:text/html, <html... 391 0 21-10-27 -
微信快速把图片变成表格
微信搜一搜本身也有很多技巧,譬如当对方给你发了一个表格的图片,哪怕这个表格非常的糊,你只需要长按这个图片,然后点击搜一... 942 0 25-06-22 -
网易云音乐 app 去广告会员破解版
网易云音乐安卓版:音乐与灵魂的完美邂逅 在数字音乐的时代浪潮中,网易云音乐安卓版以其卓越的资源和贴心的设计,成为亿万用户心中... 971 0 25-06-09 -
猫眼电影小程序
实现的功能 页面滚动到底部加载更多 电影详情页面、影院详情页面 电影购票功能、小吃购买功能 显示历史订单,可删除、可添加 电影显示所有... 1146 0 24-11-05 -
华为花瓣测速 - 专业网络测试工具
花瓣测速app是由华为出品的一款集成移动网络及Wi-Fi网络上传、下载以及诊断功能的专业测试工具,软件使用起来十分方便,一键点击就可以快速... 1096 0 25-05-27 -
不一样的六级 大学英语六级救命资料
【2021年6月】六级救命班电子讲义.pdf不一样的【六级课】 阅读讲义(7).docx不一样的【六级课】 阅读讲义(9-10).docx不一样的六级-写... 1099 0 24-08-19
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~