Vue底层判断标签的性能优化方法
25-04-07 05:17
997
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");
这里可以看出,实现出一个柯里化函数,并且也是一个闭包状态。此时,在第一次调用时,会循环一次,后续不论在去判断什么标签,都不会再去循环,因为第一次的循环结果利用闭包已经存在了内存里,这就是闭包能带来的性能优化
-
奈特药理学彩色图谱
概述药理学(pharmacology)是在分子和整体水平上研究药物作用的一门学科,在分子水平上对药物作用的研究内容主要集中在药物对其它分子产生的... 1134 0 24-06-18 -
Linux Shell脚本攻略
GNU/Linux可谓是一款不同凡响的操作系统,它拥有一个稳定、可靠且极其强大的完备的开发环境。作为与操作系统进行沟通的原生界面(native i... 1220 0 24-05-28 -
2025年海绵,启航,新文道管综全程班考研资料
0714写作课件.pdf2025考研管理类经济类逻辑写作讲义pdf.pdf2025考研管理类联考基础阶段测试卷-初数pdf.pdf2025考研管综数学集训讲义(第1-2... 1243 0 24-08-19 -
EmojiAll 中文官方网站
EmojiAll致力于推广和普及emoji,帮助大家了解emoji的意思、更准确的表达自己、更方便的使用emoji,希望emoji能为大家的日常生活带来更多欢... 1885 0 24-07-14 -
完整学习MC协议及优化client访问
异常错误响应接下来,我们来完整学习 Mc 协议。在学习 Mc 协议之前,首先来看看 Mc 处理协议指令,如果发现异常,如何进行异常错误响... 857 0 24-05-24 -
微商城+项目搭建指南
软件架构:后端采用Springboot搭配前端React进行开发,完成用户管理、轮播图管理、一级分类管理、商品管理、日志管理。 支持多图上传功能... 1052 0 24-09-18 -
jquery书本翻页特效
327 0 21-05-17 -
2012生物专业教师招聘试题
【豆丁★教育百科】2009年广东广州市天河区教育局教师招聘考试生物真题.doc【豆丁★教育百科】2009年教师招聘考试范围及内容(生物).doc【豆... 752 0 24-08-20
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~