- 浏览: 313811 次
- 性别:
- 来自: 河南郑州
文章分类
最新评论
-
sillydong:
https://github.com/sillydong/CZ ...
PHP 框架 Yaf 学习笔记----默认行为 -
achun:
jocce 写道var data1={};里面放的是json数 ...
jCT 嵌入模板简化方案 -
jocce:
var data1={};里面放的是json数据吗?为什么我用 ...
jCT 嵌入模板简化方案 -
achun:
randomnany 写道hi:你说的那个所谓的bug不是bu ...
PHP 框架 Yaf 学习笔记----默认行为 -
randomnany:
hi:你说的那个所谓的bug不是bug~yaf默认的就是读取 ...
PHP 框架 Yaf 学习笔记----默认行为
我在jCT的说明中提到,jCT为了保障速度,没有用正则。今天我特意改写了以正则解析模板代码,仅仅支持注释文法jCT3版本,测试一下Build过程(也就是主要的解析过程了)的速度差异。结果如下(数值为同样循环条件下所用时间,越小越好)
(AMD双核)
FireFox 3.0.1:
非正则版本: 75
正则版本: 300
IE 8:
非正则版本:140
正则版本: 470
Chrome :
非正则版本:140
正则版本: 470
下面是在另一台机器上(AMD单核),看相对值就行了
FireFox 3.0.1:
非正则版本:150
正则版本: 350
IE6 :
速度不稳定,比IE7慢,就不贴了
IE7 :
非正则版本:200
正则版本: 578
Chrome :
非正则版本:160
正则版本: 520
Safari 3.1:
非正则版本:110
正则版本: 422
Opera 9.52:
非正则版本:109
正则版本: 650
结果很明显呀,正则版本就是慢呀,同时贴出正则的版本,(此版本中增加了一个成员属性定义,非正则版本稍后更新)
并且我没有发现Chrome在字符串处理上的优势呀
jCT 第3版 正则注释风格版源码
/** * JavaScript Common Templates(jCT) 3(第3版) 正则注释风格版 * http://code.google.com/p/jsct/ * * licensed under the MIT license. * http://www.opensource.org/licenses/mit-license.php * * Author achun (achun.shx at gmail.com) * Create Date: 2008-9-9 * Last Date: 2008-9-9 * Revision:rc3.8.9.9 */ function jCT(txt,path){//构建jCT对象,仅仅准备基础数据 this.Fn = new arguments.callee.Instance({txt:txt,path:path}); for (var i in this) this.Fn.Reserve+=','+i+','; } jCT.prototype={ Extend:function(jct){//扩展自己 for (var i in jct){ if(this[i] && this[i].Fn && this[i].Fn.JavaScriptCommonTemplates && this[i].Extend ) this[i].Extend(jct[i]); else if(this.Fn.Reserve.indexOf(','+i+',')==-1)//防止保留成员被覆盖 this[i]=jct[i]; } if(typeof jct.RunNow=='function') jct.RunNow.call(this); return this; }, ExecChilds:function(childs,exec){//执行childs对象所列成员里的某个方法,默认是Exec方法 exec=exec||'Exec'; for(var c in childs) if(this[c] && (typeof this[c][exec]=='function')) this[c][exec](childs[c]); return this; }, BuildChilds:function(childs){//构建子jCT对象,并执行RunNow if(undefined==childs) childs=[]; var cs={}; for(var i=0;i<childs.length;i++) cs[childs[i]]=true; for (var i in this) if(this[i].Fn && this[i].Fn.JavaScriptCommonTemplates && (childs.length==0 || cs[i])){ this[i].Build(); if(typeof this[i].RunNow=='function') this[i].RunNow(); } return this; }, GetView:function(){return 'Invalid templates';},//得到装配数据后的视图,此方法会在Build的过程中重建 Build:function(){//构建实例 this.Fn.Build(this); return this; } }; jCT.Instance=function(Options){ this.Src=Options.txt||''; this.Src=this.Src.replace(this.RegClear,''); this.Path=Options.path||''; this.A=[];//由src转换的模板数组 this.V=[];//GetView执行的文本结果,以数组形式存放 this.EXEC=[];//生成的js代码的临时数组 }; jCT.Instance.prototype={ JavaScriptCommonTemplates:3.0, Reserve:'',//保留成员 RegClear:/<!--clear([\w\W]*?)\/clear-->/g, RegTrim:/^\s+|\s+$/g, RegFun:/\/\*((?:(?!\*\/).)+)\*\//, Reg:/(<!---|\+-)([\w\W]*?)(-->|-\+)/g,//comment风格的定义 Build:function(self){ this.Pos=0; this.EXEC=['this.Fn.V=[];']; var ins=this; try{ this.Src.replace(this.Reg,function(all,begin,code,end,pos){ return ins.Parse(all,begin,code,end,pos,self); }); this.Push(this.Src.length,'return this.Fn.V.join("");');//最后一段 self.GetView=new Function(this.EXEC.join('\n')); }catch (ex){ this.V=['jCT Parse Error']; self.ERROR={message:ex.message + '\n'+ (ex.lineNumber || ex.number)}; } if(self.RunNow) self.RunNow(); }, Push:function(pos,code,exp){ if(pos<this.Pos) return; var htm=this.Src.slice(this.Pos,pos).replace(this.RegTrim,''); code=code.replace(this.RegTrim,''); if(htm){ this.EXEC.push('this.Fn.V.push(this.Fn.A['+this.A.length+']);'); this.A.push(htm); } if(code) if(exp) this.EXEC.push('this.Fn.V.push('+code+');'); else this.EXEC.push(code); }, Parse:function(all,begin,code,end,pos,self){ if(pos<this.Pos || this.Pos<0) return all; var ins=this; if(begin=='+-')//取值表达式+-???-+ this.Push(pos,code,true); else{//语法块<!---???--> var copy=code; copy.replace(this.RegFun,function(text,fun,at){//成员语法/*???*/ ins.Push(pos,''); ins.Pos=pos+all.length; if(fun.slice(0,1)!='+'){//jCT成员语法开始+??? code=''; return ''; } switch(fun.slice(1,2)){ case '@'://子模板开始 var name='<!---/*-'+fun.slice(1)+'*/-->'; ins.Pos=ins.Src.indexOf(name,pos+code.length); if(ins.Pos>0){ self[fun.slice(2)]=new jCT(ins.Src.slice(pos+all.length,ins.Pos),ins.Path); ins.Pos+=name.length; } break; case '$'://成员对象 var val=code.slice(at+text.length).replace(ins.RegTrim,''); var obj=new Function('return '+val+';'); self[fun.slice(2)]=obj.call(self); break; default://成员函数 self[fun.slice(1)]=new Function(code.slice(at+text.length)); break; } code=''; return ''; }); if(code) this.Push(pos,code);//普通javascript语句 } if(this.Pos>=0 && code) this.Pos=pos+all.length; return all; } };
发表评论
-
前台模板 Element 属性渲染的思考
2010-03-27 11:03 0jCT 一直是在前台解 ... -
jCT的纠结,前台模板下Grid基础版
2009-12-20 03:04 1862SVN已经更新.最新下载:jCT最新版本 ... -
jCT的纠结,前台模板下的设计模式VS组件,通用组件已gone
2009-12-19 14:55 1868一直以来都想用jCT写 ... -
jCT 3.9.12.10 放出,大改变,文档重新发布
2009-12-10 23:35 3297SVN已经更新.最新下载:jCT最新版本 ... -
基于jCT前台模板设计要点备注
2009-04-19 16:54 0第一个通讯是获得用户角色,获取用户是否登录及相关信息,因 ... -
jCT3改如何改进,边想边发
2009-03-26 11:28 1620ps:新版已经发布,请看 新版文档 ============ ... -
2008中国开源软件竞赛揭晓jCT榜上有名
2008-12-30 21:07 1633今天查收的邮件发现的,获得了优秀技术创新奖 的最后一名--- ... -
jCT 3更新--为发展调整代码结构
2008-12-04 15:01 1637SVN已经更新.最新下载:jCT最新版本 更多信息请看 ... -
jCT 嵌入模板简化方案
2008-11-13 09:38 2761本文代码在线演示 http://jsct.googlecod ... -
无独有偶,另一个采用原生js语法的js template工具EJS
2008-11-10 10:14 4657EJS开源主页: http://code.google.c ... -
jCT 使用教程之[UI组件]Tree
2008-10-29 15:42 1784SVN已经更新.最新下载: ... -
jCT与AJAX七宗罪
2008-09-08 20:33 2615jCT的更多信息请看我博 ... -
jCT 第三版简要文档
2008-09-07 14:26 5891SVN已经更新.最新下载:jCT最新版本 更多信息请看 ... -
jCT 在实战中洗礼,jCT要成为终极的javascript前台模板
2008-09-06 10:44 1603说在前面 : 由于目前正在用jCT的第三版实作项目,在项目中 ... -
jCT 使用教程之[嵌入模板]
2008-09-02 11:20 2496更多信息请看我博客里的jCT专题 ,或者jCT开源主页示例 ... -
js模板编译器jCT,推荐/问题贴
2008-08-27 09:58 1821jCT的更多信息请看我博客里的jCT专题 ,或者jCT开源主 ... -
javascript 模板编译器jCT----的梦想
2008-08-23 10:31 2600模板是什么 ? 模板是把数据和表现组装到一起的工具,是WEB开 ... -
jCT 第三版简要文档,此文档已经废弃,留作历史
2008-07-11 11:47 1385JavaScript Common Templates 第 ... -
都变了样!我这样用jCT模板.
2008-07-02 14:58 1660在写这篇文章的时候我相信很多朋友都不明白我在说什么,会奇怪我这 ... -
jCT 第三版预览,已废弃,留作历史
2008-06-26 17:31 1401重新进行了设计,抛弃了所有重新定义javascript固有语法 ...
相关推荐
Report of Subjective Test Results of Responses to the Joint Call for Proposals (CfP) on Video Coding Technology for High Efficiency Video Coding (HEVC)所应用的测试序列
A URQ model-based rate control algorithm for HEVC, described in JCTVC-H0213, was adopted in the HM reference software at the 8th San Jose meeting in February 2012.
JCT 2557-2020 规范
JCT 2558-2020 规范
"JCT:果酱城市测试"是一个看似与软件测试相关的项目,其中可能包含了对特定软件或系统的测试过程。由于提到的标签是"C#",我们可以推测这个项目可能使用C#编程语言进行开发,而C#是Microsoft公司推出的一种面向对象...
标准 JCT174-2005无碱玻璃纤维带
JCT 2177-2021 硅藻泥装饰壁材
JCT 621-2021 硅酸盐建筑制品用生石灰
这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关知识点以及可能在JCT中涉及的技术。 1. **对称加密**:这是最常见的加密方式,...
【JCT3V-B1005 Test Model 2 深度图】是一篇关于视频编码技术,特别是深度图编码的英文文献翻译。深度图在多视点视频编码(如HEVC,高效率视频编码)中扮演着关键角色,用于合成虚拟视点。本文档的2.3章节详细阐述了...
JCT 1017-2020 建筑防水材料用聚合物乳液
Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11 This document provides an overview of the coding tools defined in HEVC Version 1 and the Range Extension...
JCT 60006-2020 瓷砖薄贴法施工技术规程
JCT 2560-2020 结构密封胶
JCT 620-2021 石灰取样方法
JCT 618-2019化学解析方法
JCT 2041-2020 聚氨酯灌浆材料
JCT 2561-2020 金属复合板
JCT 1057-2021 玻璃纤维增强水泥(GRC)外墙板
JCT 2604-2021 仿石型混凝土面板和面砖