`
CshBBrain
  • 浏览: 650266 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144940
Group-logo
HTML5移动开发
浏览量:137886
社区版块
存档分类
最新评论

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

 
阅读更多

 

转自:http://www.csdn.net/article/2012-06-18/2806682

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

发表于2012-06-18 09:005179次阅读| 来源腾讯CDC3 条评论| 作者糖饼

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

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

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

artTemplate介绍

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

 速度对比

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

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

JavaScript模板引擎基本原理

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

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

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

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

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

渲染测试:

在上面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函数一样,同等的执行次数下无论CPU还是内存占用都有显著减少,性能近乎极限。

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

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

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

artTemplate调试模式原理

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

debug

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

1、渲染错误

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

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

2、编译错误

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

开源节流

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

分享到:
评论

相关推荐

    javascript模板引擎artTemplate.zip

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

    高性能JavaScript模板引擎实现原理详解

    本文主要以artTemplate为例,深入剖析JavaScript模板引擎的实现原理及其高性能的秘密。 artTemplate是一款高性能的JavaScript模板引擎,其核心优势在于预编译技术。传统的模板引擎在渲染时,通过动态构造Function...

    基于JavaScript和html的高性能模板引擎

    综上所述,基于JavaScript和HTML的高性能模板引擎涉及到的知识点广泛,包括JavaScript基础、HTML模板语法、模板编译、数据绑定、渲染优化、插件扩展、性能测试和模块化等。理解和掌握这些概念,将有助于开发者创建出...

    art_template.rar 模板引擎

    5. **支持预编译**:`art-template`支持预编译成JavaScript函数,减少运行时的解析成本,提高应用性能。 **使用场景** 1. **服务器端渲染**:`art-template`可用于Node.js环境中,进行服务器端渲染,生成HTML响应...

    详解js模板引擎art template数组渲染的方法

    JavaScript模板引擎,如Art Template,是开发者用于将数据与HTML界面分离的重要工具,它提高了代码的可维护性和执行效率。Art Template,由腾讯开发,以其轻量级、高性能和跨平台(支持NodeJS和浏览器)的特点,备受...

    JavaScript模板引擎原理与用法详解.docx

    模板引擎的基本原理是通过查找模板字符串中的特定标记或语法结构,如 `%` 或 `{{ }}`,来识别数据占位符。然后,它会根据提供的数据对象,将这些占位符替换为实际的值。这样,开发者可以在不直接操作DOM的情况下生成...

    templatejs的fis编译插件一款javascript模板引擎

    Template.js就是这样一个JavaScript模板引擎,它被设计用来帮助开发者快速、高效地实现动态内容的展示。 **template.js介绍** template.js是一款轻量级的JavaScript模板引擎,它提供了简洁的语法和高效的执行效率...

    artTemplate的两个js文件(原生+简洁)

    **艺术模板(Art...总结,ArtTemplate是一款实用的JavaScript模板引擎,通过原生和简洁两种语法,满足不同开发风格的需求。理解和掌握ArtTemplate的使用,可以有效提升前端开发效率,实现数据和视图的高效解耦。

    templatejs的webpakc编译loader一款javascript模板引擎

    Template.js作为JavaScript模板引擎,具有以下优点: - **简洁的语法**:它的模板语法简单直观,易于学习和使用。 - **高效性能**:通过预编译模板为JavaScript函数,可以在运行时快速生成HTML,提高页面渲染速度。 ...

    C# 动态解析 javascript 脚本引擎源码

    Noesis.Javascript是一个用C#编写的高性能JavaScript引擎,它允许C#应用程序动态解析和执行JavaScript代码,从而实现了C#与JavaScript之间的互操作性。 在提供的文件列表中,我们看到了以下几个关键文件: 1. **...

    artTemplate-master

    在"artTemplate-master"这个压缩包中,包含了一个名为"artTemplate"的JavaScript模板引擎,它专注于提供简单、高效的模板处理方案。模板技术的核心思想是通过将动态数据嵌入到HTML模板中,然后在运行时根据实际数据...

    高性能JavaScript + 高清+目录 PDF

    总而言之,《高性能JavaScript》是一本全面而深入的指南,它不仅教会你如何写出高效的JavaScript代码,还让你理解背后的原理,从而在实践中做出明智的选择。无论你是初级开发者还是经验丰富的专家,这本书都能为你的...

    artTemplate小实例.zip

    其中,`artTemplate`是腾讯公司开源的一款高性能的前端模板框架,它的设计理念是为了提升前端开发效率,简化DOM操作,并优化页面的加载速度。本文将详细探讨`artTemplate`的基本概念、使用方法以及如何通过实例来...

    性能卓越的js模板引擎

    在“性能卓越的js模板引擎”这一主题下,我们将深入探讨新一代JavaScript模板引擎的特点、工作原理以及其在实际开发中的应用。 新一代JavaScript模板引擎如`aui-art-template`(文件名9c6b385可能指的是该模板引擎...

    JavaScript模板引擎 - Elapse

    模板引擎的工作原理是通过解析预先定义好的模板语法,然后结合实际的数据,生成最终的HTML输出。Elapse作为JavaScript实现的一种模板引擎,其设计和使用具有一定的灵活性和高效性。 在Elapse中,模板通常由HTML片段...

    《高性能JavaScript》(尼古拉斯·泽卡斯).pdf

    《高性能JavaScript》是由尼古拉斯·泽卡斯(Nicholas C. Zakas)撰写的一本经典著作,专注于探讨如何在JavaScript环境中实现最佳性能。这本书深入浅出地讲解了JavaScript编程中的许多关键概念和技术,旨在帮助...

    JavaScript模板引擎Mustache.zip

    基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 标签:Mustache

    利用arttemplate和轻量路由配合webpack多页打包定制运营活动项目构建方案

    **ArtTemplate** 是一个高性能的JavaScript模板引擎,它的主要优点包括简洁的语法、高效的速度和良好的兼容性。在本方案中,ArtTemplate用于渲染后台数据到前端页面,实现动态内容的展示。例如,可以创建一个模板...

    laytpl-JavaScript模板引擎 v1.1.zip

    这款引擎在v1.1版本中提供了稳定且高性能的模板编译和执行能力,使得开发者能够轻松地将动态数据与静态HTML结构结合,实现数据驱动的页面展示。 1. 模板引擎概念 模板引擎是Web开发中的一个关键工具,它允许开发者...

    artTemplate.js,前端模板js引用,jquery静态模板

    标题"artTemplate.js,前端模板js引用,jquery静态模板"中,提到了`artTemplate.js`,这是一个专用于前端开发的模板引擎,它与jQuery结合使用,实现了静态模板的功能。这意味着`artTemplate.js`可以帮助开发者快速...

Global site tag (gtag.js) - Google Analytics