对于一个程序语言来说,访问变量是一个基本的操作,也是最频繁使用的操作。提高Beetl访问变量的效率,将整体上提高Beetl的性能,本文介绍了Beetl是如何访问变量的。
首先看一个简单的例子:var a = "hi";
print(a);
第一行定义a变量,第二行引用a变量打印输出,通常设计下,可以在变量定义的时候将变量保存到map里,需要用的时候根据变量名取出。因此上诉代码可以翻译为java的类似如下代码:context.put("a","hi");
print(context.get("a");
尽管我们都知道Map存取都是非常快的,但还有没有更快的方式呢,答案就是有,那就是数组,数组的存取更快,通过如下代码可以看出,数组的存放元素的速度是Map的10倍,读取那就更快了,是100倍String value1 = "a";
String value2 = "b";
String value3 = "c";
String key1 = "key1";
String key2 = "key2";
String key3 = "key3";
String[] objects = new String[3];
int loop = 10000 * 5000;
//计算数组存消耗的时间
Log.key1Start();
for (int i = 0; i < loop; i++) {
objects[0] = value1;
objects[1] = value2;
objects[2] = value3;
}
Log.key1End();
Map<String, String> map = new HashMap<String, String>(3);
//计算Map存消耗的时间
Log.key2Start();
for (int i = 0; i < loop; i++) {
map.put(key1, value1);
map.put(key2, value2);
map.put(key3, value3);
}
Log.key2End();
// 计算数组取消耗的时间
Log.key3Start();
for (int i = 0; i < loop; i++) {
value1 = objects[0];
value2 = objects[1];
value3 = objects[2];
}
Log.key3End();
// 计算map取消耗的时间
Log.key4Start();
for (int i = 0; i < loop; i++) {
value1 = map.get(key1);
value2 = map.get(key2);
value3 = map.get(key3);
}
Log.key4End();
//打印性能统计数据
Log.display("使用数组设置", "使用Map设置", "使用数组读取", "使用map读取");
控制台输出:
======================
使用数组设置=139 百分比,Infinity
使用Map设置=1020 百分比,Infinity
使用数组读取=3 百分比,Infinity
使用map读取=767 百分比,Infinity
(代码参考https://github.com/javamonkey/ ... .java
Beetl在修改2.0引擎的时候,对变量存取进行了优化,使用一个一维数组来保存变量,如本文开头的例子
,在2.0引擎里,翻译成如下代码:context.vars[varNode.index] = "hi"
print(context.vars[varNode.index]);
那么,Beetl又是怎么做给模板变量分配索引呢?如下代码是如何分配索引的?var a = 0;
{
var b = 2;
}
{
var c = 2;
}
var d =1 ;
虽然有4个变量,但维护这些变量的只需要一个一维数组就可以,数组长度是3
节点a,d,c,b的index是0,1,2,2,就是子context(进入block后) 会在上一级context后面排着:先分配顶级变量a和d,赋上索引是0和1,然后二级变量b赋值索引是2,对于同样是二级的变量c,也可以赋上索引为2,因为变量b的已经出了作用域。
经过性能测试证明2.0的性能关于变量赋值和引用,综合提高了50倍
- 浏览: 169343 次
- 性别:
- 来自: 北京
最新评论
-
javamonkey:
https://my.oschina.net/xiandafu ...
beetl功能与Freemarker功能比较 -
laj76333:
支持标签嵌套吗?<%{}%><%{}%> ...
beetl功能与Freemarker功能比较 -
javamonkey:
支持,去ibeetl.com 上了解吧
beetl功能与Freemarker功能比较 -
laj76333:
支持标签吗?<%{}%><%{}%>& ...
beetl功能与Freemarker功能比较 -
酷沃哦:
beetl支持集群吗?
beetl功能与Freemarker功能比较
相关推荐
2. **强大的变量处理**:Beetl支持多种类型的变量操作,包括取值、计算、条件判断、循环等。它提供了丰富的内置函数,如字符串处理、日期时间操作、集合操作等,使得模板中的变量处理变得灵活多样。 3. **模板继承...
2. **高性能**:Beetl采用了高效的编译技术,将模板编译为Java字节码,执行时无需额外的解释过程,从而提高了运行速度。此外,其内部优化机制也使得模板解析和执行效率较高。 3. **强大的标签库**:Beetl提供了丰富...
- 高性能:Beetl的性能远远超过主流Java模板引擎,引擎性能是Freemaker的5-6倍,是JSP的2倍。 - 易于整合:Beetl可以很方便地与多种Web框架整合,如SpringMVC、JFinal、Struts、Nutz、Jodd、Servlet等。 - 支持模板...
2. **模板语法**:Beetl提供了丰富的控制结构,如循环(foreach)、条件判断(if/else)、包含(include)和导入(import)等,方便构建复杂的页面布局。 3. **标签库**:Beetl支持自定义标签,可以创建自己的模板...
2. 变量命名规则:KUKA 的变量命名遵循特定的规则,通常包含前缀、类型标识和变量名,如 "KRLVAR" 开头表示 KUKA Robot Language 变量。 3. 变量读写:在 KUKA 的编程语言 KRL(KUKA Robot Language)中,你可以...
总的来说,这些文件涵盖了时间序列分析的基础到高级主题,包括基本概念、“2基本概念.pdf”,季节性模型,谱估计,模型选择,以及处理非平稳性和多变量关系的方法。通过深入学习这些材料,你可以掌握从数据中提取有...
3. 性能优异:Beetl的性能远远超过了传统的Java模板引擎,比如它是Freemarker性能的5-6倍,JSP性能的2倍。这得益于Beetl从宏观到微观的多层面优化,包括但不限于优化渲染引擎、IO二进制输出、字节码属性访问、使用一...
3. 高性能:Beetl的性能远超主流Java模板引擎。根据性能比较,Beetl的引擎性能是Freemarker的5-6倍,JSP的2倍。 4. 易于整合:Beetl可以轻松整合到多种web框架中。 5. 支持模板单独开发和测试:即使在没有M和C部分...
其中,语句①的循环变量的步长为2, 语句②的循环变量的步长为-2。 (3)增加运算:++ 和 --。 选做内容: (1)增加类型:① 字符类型; ② 实数类型。 (2)扩充函数:① 有返回值和返回语句;② 有参数函数...
编程选择题40道:Java语言基础:数据类型与变量.Tex.docx
BeetSql的SQL模板采用了Beetl引擎,提供了丰富的模板语法,如变量、算术表达式、控制语句等。 #### 十三、Beetl入门 BeetSql采用了Beetl模板引擎,以下是一些基本的Beetl概念: - **定界符号**: 定义模板的特殊...
Oracle 数据库的绑定变量特性是其优化性能的关键技术之一,主要应用于提高数据库应用程序的可伸缩性和效率。绑定变量允许开发者创建动态SQL语句,其中的变量在执行时才提供具体的值,而不是硬编码到查询中。这种做法...
T-SQL语言局部变量 T-SQL语言局部变量是指在T-SQL语言中,由用户定义的变量。这些变量只能在声明它们的批处理范围内使用,即局部变量的作用域仅限于一个批处理范围内。局部变量必须以符号“@”开头。 局部变量声明...
对于变量和数组,会生成相应的存取指令,如加载、存储、数组索引等操作。 在易语言中,由于使用了中文作为编程语言,这些过程都更加符合中国程序员的思维习惯,降低了学习和使用的难度。同时,易语言的编译器还支持...
Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是学习Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 1. 成员变量...
1. **简洁的语法**:Beetl的语法设计接近自然语言,使得模板代码易于理解和编写,如`#{}`用于变量替换,`%{}`用于控制结构。 2. **强大的内置函数**:Beetl提供了一套丰富的内置函数,如字符串处理、日期时间操作、...
Beetl是一款模板语言工具,其特点包括易用性、功能丰富性、性能卓越、提供一些其他模板语言不具备的功能以及可以与多种Web框架进行结合。Beetl目前的版本是1.26,大小为450K。它的语法是JavaScript的一个子集,类似...
变量和方法是Java语言中非常重要的概念,它们的使用可以直接影响程序的性能和可读性。只有正确地使用变量和方法,才能开发出高效、简洁的程序。 本文通过详细分类说明了变量和方法的概念,并分析了变量和方法在Java...
在汽车电子领域,标定(Calibration)是调整和优化车载电子系统参数的过程,以确保其性能达到设计标准。CCP(CAN Calibration Protocol)是一种常用的数据传输协议,它允许工程师通过CAN(Controller Area Network)...
- **简洁语法**:Beetl的语法设计接近于自然语言,使得代码可读性极强,减少学习成本。 - **强大的表达能力**:支持丰富的表达式计算,包括逻辑运算、三元运算、方法调用等。 - **类型安全**:Beetl在编译时进行...