高性能JavaScript模板引擎原理解析

随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC 思想也开始流行起来。javascript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,近一年来在开源社区中更是百花齐放,在 Twitter、淘宝网、新浪浪微博、腾讯QQ空间、腾讯微博等大型网站中均能看到它们的身影。

本文将用最简单的示例代码描述现有的 javascript 模板引擎的原理,包括新一代 javascript 模板引擎 artTemplate 的特性实现原理,欢迎共同探讨。

artTemplate 介绍

artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了质的飞跃,并且充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现。在 chrome 下渲染效率测试中分别是知名引擎 Mustache 与 micro tmpl 的 25 、 32 倍。

高性能JavaScript模板引擎原理解析 程序员 好文分享 第1张

除了性能优势外,调试功能也值得一提。模板调试器可以精确定位到引发渲染错误的模板语句,解决了编写模板过程中无法调试的痛苦,让开发变得高效,也避免了因为单个模板出错导致整个应用崩溃的情况发生。

artTemplate 这一切都在 1.7kb(gzip) 中实现!

javascript 模板引擎基本原理

虽然每个引擎从模板语法、语法解析、变量赋值、字符串拼接的实现方式各有所不同,但关键的渲染原理仍然是动态执行 javascript 字符串。

关于动态执行 javascript 字符串,本文以一段模板代码举例:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第2张

这是一段非常朴素的模板写法,其中,”” 为 closeTag (逻辑语句闭合标签),若 openTag 后面紧跟 “=” 则会输出变量的内容。

HTML语句与变量输出语句被直接输出,解析后的字符串类似:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第3张

语法分析完毕一般还会返回渲染方法:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第4张

渲染测试:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第5张

在上面 render 方法中,模板变量赋值采用了 with 语句,字符串拼接采用数组的 push 方法以提升在 IE6、7 下的性能,jQuery 作者 john 开发的微型模板引擎 tmpl 是这种方式的典型代表,参见: http://ejohn.org/blog/javascript-micro-templating/

由原理实现可见,传统 javascript 模板引擎中留下两个待解决的问题:

1、性能:模板引擎渲染的时候依赖 Function 构造器实现,Function 与 eval、setTimeout、setInterval 一样,提供了使用文本访问 javascript 解析引擎的方法,但这样执行 javascript 的性能非常低下。

2、调试:由于是动态执行字符串,若遇到错误调试器无法捕获错误源,导致模板 BUG 调试变得异常痛苦。在没有进行容错的引擎中,局部模板若因为数据异常甚至可以导致整个应用崩溃,随着模板的数目增加,维护成本将剧增。

artTemplate 高效的秘密

1、预编译

在上述模板引擎实现原理中,因为要对模板变量进行赋值,所以每次渲染都需要动态编译 javascript 字符串完成变量赋值。而 artTemplate 的编译赋值过程却是在渲染之前完成的,这种方式称之为“预编译”。artTemplate 模板编译器会根据一些简单的规则提取好所有模板变量,声明在渲染函数头部,这个函数类似:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第6张

这个自动生成的函数就如同一个手工编写的 javascript 函数一样,同等的执行次数下无论 CPU 还是内存占用都有显著减少,性能近乎极限。

值得一提的是:artTemplate 很多特性都基于预编译实现,如沙箱规范与自定义语法等。

2、更快的字符串相加方式

很多人误以为数组 push 方法拼接字符串会比 += 快,要知道这仅仅是 IE6-8 的浏览器下。实测表明现代浏览器使用 += 会比数组 push 方法快,而在 v8 引擎中,使用 += 方式比数组拼接快 4.7 倍。所以 artTemplate 根据 javascript 引擎特性采用了两种不同的字符串拼接方式。

artTemplate 调试模式原理

前端模板引擎不像后端模板引擎,它是动态解析,所以调试器无法定位到错误行号,而 artTemplate 通过巧妙的方式让模板调试器可以精确定位到引发渲染错误的模板语句,例如:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第7张

artTemplate 支持两种类型的错误捕获,一是渲染错误(Render Error)与编译错误(Syntax Error)。

1、渲染错误

渲染错误一般是因为模板数据错误或者变量错误产生的,渲染的时候只有遇到错误才会进入调试模式重新编译模板,而不会影响正常的模板执行效率。模板编译器根据模板换行符记录行号,编译后的函数类似:

高性能JavaScript模板引擎原理解析 程序员 好文分享 第8张

当执行过程遇到错误,立马抛出异常模板对应的行号,模板调试器再根据行号反查模板对应的语句并打印到控制台。

2、编译错误

编译错误一般是模板语法错误,如不合格的套嵌、未知语法等。由于 artTemplate 没有进行完整的词法分析,故无法确定错误源所在的位置,只能对错误信息与源码进行原文输出,供开发者判断。

开源节流

artTemplate 基于开源协议发布,无论是商业公司还是个人都可以免费在项目中使用,欢迎共同完善。

下载地址:

https://github.com/aui/artTemplate

在线预览:

http://aui.github.com/artTemplate/

文章来源:腾讯CDC

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:卢松松,转转请注明出处:https://www.chuangxiangniao.com/p/1068473.html

(0)
上一篇 2025年1月13日 15:13:10
下一篇 2025年1月13日 15:13:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 公众号开篇之语:创业中的原理思维思考

    我一直这么想着,我们看待一个事物,要深挖其中的原理思维 那这个公众号的主要内容走向呢,也主要是一些关于创业中的原理思维思考。 底层思维原理是一个万能公式,它可以套用于你任何项目 当然,在这期间,我们也会去拆解各个平台的原理,以及我们在这些平…

    2025年1月14日
    100
  • 价格锚点的底层原理+转换锚点策略

    这篇文章会比较烧脑,为了你能够更好的理解我下面讲的内容,建议在安静的环境中观看。 PS:这篇文章我会把“价格锚点”的底层原理和升级玩法分享出来,希望对你有所帮助! 记得好多年前就接触过“价格锚点”这个概念,那时候觉得非常神奇。当时我还在做电…

    2025年1月14日
    200
  • 相似图片搜索的原理(二)

    二年前,我写了《相似图片搜索的原理》,介绍了一种最简单的实现方法。 昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。 一、颜色分布法 每张图片都可以生成颜色分布的直方图(color histogram)。如果两…

    2025年1月13日 好文分享
    200
  • Google图片搜索的原理

    针对这个问题,请教了算法组的同事,他分享了基本的思路: 对于这种图像搜索的算法,一般是三个步骤: 1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,has…

    2025年1月13日 好文分享
    200
  • 网站自动宣传机器原理

    我的博客提供的有这个网站自动化宣传机器,主要用于提高网站外链,是利用一些站长工具网站的查询功能。 工作原理,当用户查询某个网站的Alexa 排名、Google PR值、搜索引擎收录等信息之后,这些工具网站都会把查询情况记录到数据库,并留下所…

    站长动态 2025年1月13日
    300
  • 用网站快排系统好不好?,网站快排是什么原理

    [var] 在当今数字化时代,互联网已成为企业营销和品牌推广的重要渠道,而搜索引擎优化(SEO)作为提升网站在搜索引擎中排名的一种有效手段,受到了越来越多企业和个人的关注,网站快排系统作为一种辅助工具,被广泛应用于提升网站排名,关于其效果的…

    好文分享 2025年1月12日
    200
  • 用网站快排系统好不好?,网站快排是什么原理

    [var] 在当今数字化时代,互联网已成为企业营销和品牌推广的重要渠道,而搜索引擎优化(SEO)作为提升网站在搜索引擎中排名的一种有效手段,受到了越来越多企业和个人的关注,网站快排系统作为一种辅助工具,被广泛应用于提升网站排名,关于其效果的…

    好文分享 2025年1月12日
    200
  • 网站快排费用在火星推荐,探索星际时代的数字营销新纪元,网站快排是什么原理

    [var] 在浩瀚无垠的宇宙中,人类对未知的探索从未停歇,随着科技的飞速发展,我们不仅在地球上实现了信息的快速传递与共享,更将目光投向了遥远的星辰大海,在这个背景下,“火星推荐”这一概念应运而生,它象征着在星际时代,如何有效地利用数字营销手…

    好文分享 2025年1月12日
    200
  • 网站快排费用在火星推荐,探索星际时代的数字营销新纪元,网站快排是什么原理

    [var] 在浩瀚无垠的宇宙中,人类对未知的探索从未停歇,随着科技的飞速发展,我们不仅在地球上实现了信息的快速传递与共享,更将目光投向了遥远的星辰大海,在这个背景下,“火星推荐”这一概念应运而生,它象征着在星际时代,如何有效地利用数字营销手…

    好文分享 2025年1月12日
    200
  • 网站快排费用在火星,探索星际互联网营销的新纪元,网站快排是什么原理

    [var] 在浩瀚无垠的宇宙中,人类的探索脚步从未停歇,而互联网作为连接地球村的重要纽带,其边界也在不断向未知领域拓展,设想这样一个场景:在遥远的未来,当人类成功在火星建立殖民地,并构建起火星互联网——一个独立于地球网络、专为火星居民服务的…

    好文分享 2025年1月12日
    200

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信