js模板引擎内部实现原理

模板引擎的实质其实是利用正则表达式,替换模板当中事先定义好的标签

这里正则表达式不做介绍,网上有很多,可以查

1.不引用模板引擎

<span style="white-space:pre">	</span><div id="content"></div>

	<<span style="color:#33ff33;">!-- 模板 --></span>
	<script type="text/html" id="tpl">
		<h4>my name is <%= name %></h4>
		<h5>i am <%= age %> years old</h5>
	</script>

<script>
		
		<span style="color:#33ff33;">//将函数进行封装</span>
		function template(id,data){

			var tpl = document.getElementById(id);

			<span style="color:#33ff33;">//字符串</span>
			tpl = tpl.innerHTML;

			<span style="color:#33ff33;">//通过正则表达式查换特殊标记的内容</span>
			var reg = /<%=\s*([^%>]+\S)\s*%>/;
			var match;

			<span style="color:#33ff33;">//匹配不到则为null,循环则停止</span>
			while(match = reg.exec(tpl)){
				<span style="color:#33ff33;">//替换</span>
				tpl = tpl.replace(match[0],data[match[1]]);
			}
			return tpl;
		}
	<span style="color:#33ff33;">// 渲染模板</span>
		var data = {
			name:'cici',
			age:10
		}
		var html = template('tpl',data);
		
		document.getElementById('content').innerHTML = html;
	</script>

2.引入模板引擎

<span style="white-space:pre">	</span><div id="content"></div>
	<span style="color:#33ff33;"><!-- 引入模板 原生语法版--></span>
	<script src="js/template-native.js"></script>
<pre name="code" class="html"><span style="white-space:pre">	</span><span style="color:#33ff33;"><!-- 模板 --></span>
	<script type="text/html" id = "tpl">
		<h3>my name is <%=name%></h3>
		<h4>i am <%=age%> years old</h4>
		<h5>sex <%=sex%></h5>
	</script>


 

template(id, data)根据 id 渲染模板。内部会根据document.getElementById(id)查找模板。如果没有 data 参数,那么将返回一渲染函数。

<script>
	var data = {
			name: 'itcast',
			age: 10,
			sex:'女'
		}
<span style="white-space:pre">	</span>var html = template('tpl',data);

	document.getElementById('content').innerHTML = html;
</script>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3的底层原理是基于JavaScript和WebAssembly的,它拥有高效的渲染性能,采用了更新的ES2015+ JavaScript 语法,并且支持 TypeScript 。它还支持新的响应式系统、虚拟 DOM、组件化、CSS 过渡动画和 SSR。 ### 回答2: Vue3的底层原理主要围绕着以下几个方面展开: 1. 响应式系统:Vue3采用了Proxy代理对象来实现响应式系统。当数据发生变化时,Proxy能够捕获到变化并触发更新。 2. 虚拟DOM:Vue3使用了虚拟DOM来表示视图层的状态。在组件渲染之前,Vue3会先根据模板生成虚拟DOM树,然后通过对比新旧虚拟DOM树的差异,最后只对需要更新的部分进行具体的更新操作。 3. 编译优化:Vue3引入了编译器的增强,新增了静态模板提升和源码级的优化。静态模板提升能够将静态节点在编译阶段就提升为常量,避免每次渲染都重新创建节点,从而提升性能。源码级的优化则能够更好地利用新的语法特性和JavaScript引擎的优化能力,进一步提高性能。 4. 组件实现:Vue3引入了Composition API,使得组件的逻辑复用更加灵活。该API通过setup函数来组织组件的逻辑,并支持使用reactive、ref等函数来定义组件内部的响应式数据和状态。同时,Vue3还对组件实例的创建和销毁进行了优化,提升了组件的性能。 总而言之,Vue3的底层原理通过采用Proxy代理对象实现响应式系统,使用虚拟DOM进行高效的更新,并借助编译优化和Composition API等特性进一步提升性能和开发体验。这些改进使得Vue3在性能和功能上都有了显著的提升,为开发者提供了更好的开发体验和更高效的应用性能。 ### 回答3: Vue是一种流行的前端框架,Vue 3是其最新的版本。Vue 3的底层原理是通过使用JavaScript对象和原型链实现的。 首先,Vue 3使用了一个名为Proxy的新特性来实现数据劫持。当我们创建一个Vue实例时,Vue会将我们传入的数据对象转换为一个代理对象。这个代理对象会监听我们对数据的访问和修改,并在需要的时候触发相应的更新。 其次,Vue 3使用了一种名为Reactivity的技术来实现数据响应式。它通过递归遍历数据对象的所有属性,并为每个属性创建一个getter和setter,来实现对数据的监听和更新。当我们访问一个数据属性时,Vue会将当前组件和该属性建立依赖关系。当该属性发生变化时,Vue会知道哪些组件需要更新,并触发相应的更新操作。 另外,Vue 3还引入了一种新的编译器,名为Vue Template Compiler。它将模板代码转换为JavaScript代码,并生成一个渲染函数。这个渲染函数会在数据发生变化时被调用,生成最新的虚拟DOM树。然后,Vue 3使用一种名为Diff算法的技术,将新生成的虚拟DOM树与旧的虚拟DOM树进行比较,找出差异部分,并将差异部分应用到实际的DOM上,以实现页面的更新。 总的来说,Vue 3的底层原理是通过数据劫持、数据响应式和虚拟DOM技术来实现的。它通过监听数据的变化,自动更新组件的视图,大大提高了开发效率和页面性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值