对于一个程序语言来说,访问变量是一个基本的操作,也是最频繁使用的操作。提高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倍
- 浏览: 168788 次
- 性别:
- 来自: 北京
最新评论
-
javamonkey:
https://my.oschina.net/xiandafu ...
beetl功能与Freemarker功能比较 -
laj76333:
支持标签嵌套吗?<%{}%><%{}%> ...
beetl功能与Freemarker功能比较 -
javamonkey:
支持,去ibeetl.com 上了解吧
beetl功能与Freemarker功能比较 -
laj76333:
支持标签吗?<%{}%><%{}%>& ...
beetl功能与Freemarker功能比较 -
酷沃哦:
beetl支持集群吗?
beetl功能与Freemarker功能比较
相关推荐
Java模板语言Beetl是一种强大的、高性能的Java模板引擎,专为简化Web开发中的视图层处理而设计。它的设计理念是让开发者能够更自然地写出符合语义的模板代码,提高开发效率,同时保持良好的可读性和可维护性。Beetl...
本资料包聚焦于“神经网络变量筛选—基于BP的神经网络变量筛选”,这是一个关键步骤,尤其是在处理高维数据时,因为变量的选择直接影响到模型的性能和解释性。BP(Back Propagation)神经网络是最常见的前馈神经网络...
2. **强大的变量处理**:Beetl支持多种类型的变量操作,包括取值、计算、条件判断、循环等。它提供了丰富的内置函数,如字符串处理、日期时间操作、集合操作等,使得模板中的变量处理变得灵活多样。 3. **模板继承...
高级语言程序设计基础(C&C++):函数与变量.ppt
示例 2: 声明了一个 char 类型的变量 c,并输出其字符值。 示例 3: 变量 c 被初始化为 25,之后更新为 50,并显示其变化。 示例 4: 展示了全局变量和局部变量的作用域。局部变量 c 在 main 函数内定义,它遮蔽了全局...
在编程领域,尤其是在C语言...正确地选择变量的存储类型,可以优化性能、避免内存泄漏,同时也有助于保持代码的清晰和可维护性。在实际编程中,应根据变量的作用范围、生命周期和访问效率需求来决定使用哪种存储方式。
- 高性能:Beetl的性能远远超过主流Java模板引擎,引擎性能是Freemaker的5-6倍,是JSP的2倍。 - 易于整合:Beetl可以很方便地与多种Web框架整合,如SpringMVC、JFinal、Struts、Nutz、Jodd、Servlet等。 - 支持模板...
2. **模板语法**:Beetl提供了丰富的控制结构,如循环(foreach)、条件判断(if/else)、包含(include)和导入(import)等,方便构建复杂的页面布局。 3. **标签库**:Beetl支持自定义标签,可以创建自己的模板...
### Beetl模板语言知识点详解 #### 一、Beetl简介 **Beetl** (Bee Template Language) 是一种轻量级的模板语言,专为忙碌的开发者设计。其核心理念在于简化模板语言的学习曲线,同时保持强大的功能性和优秀的性能。...
2. 变量命名规则:KUKA 的变量命名遵循特定的规则,通常包含前缀、类型标识和变量名,如 "KRLVAR" 开头表示 KUKA Robot Language 变量。 3. 变量读写:在 KUKA 的编程语言 KRL(KUKA Robot Language)中,你可以...
9. 类型推测:Beetl在运行时能够推测模板变量类型,以优化性能。用户还可以使用注解明确指定模板变量的属性,有助于IDE提供自动提示功能。 10. 可插拔设计:Beetl提供了错误信息提示、模板引擎缓存机制、模板资源...
总的来说,这些文件涵盖了时间序列分析的基础到高级主题,包括基本概念、“2基本概念.pdf”,季节性模型,谱估计,模型选择,以及处理非平稳性和多变量关系的方法。通过深入学习这些材料,你可以掌握从数据中提取有...
2. **丰富的内置函数**:Beetl提供了一套完整的内置函数库,如字符串操作、日期时间处理、数学计算等,使得模板代码可以执行复杂的逻辑。 3. **良好的性能**:Beetl优化了模板编译和执行过程,使得其在处理大量模板...
3. 高性能:Beetl的性能远超主流Java模板引擎。根据性能比较,Beetl的引擎性能是Freemarker的5-6倍,JSP的2倍。 4. 易于整合:Beetl可以轻松整合到多种web框架中。 5. 支持模板单独开发和测试:即使在没有M和C部分...
其中,语句①的循环变量的步长为2, 语句②的循环变量的步长为-2。 (3)增加运算:++ 和 --。 选做内容: (1)增加类型:① 字符类型; ② 实数类型。 (2)扩充函数:① 有返回值和返回语句;② 有参数函数...
在Go语言中,变量是存储数据的基本单元,它在程序执行期间可以改变其值。Go语言的变量声明具有多种方式,这些方式灵活且方便。在本篇内容中,我们将深入探讨Go语言变量的声明和使用。 1. **基本变量声明**: - ...
在SpringBoot应用中,我们经常使用模板引擎来渲染动态页面,而Beetl是一个功能强大的模板引擎,能够方便地与SpringBoot集成。然而,当页面在运行时出现异常时,Beetl默认的行为可能会导致不完整的页面被发送到客户端...
BeetSql的SQL模板采用了Beetl引擎,提供了丰富的模板语法,如变量、算术表达式、控制语句等。 #### 十三、Beetl入门 BeetSql采用了Beetl模板引擎,以下是一些基本的Beetl概念: - **定界符号**: 定义模板的特殊...
T-SQL语言局部变量 T-SQL语言局部变量是指在T-SQL语言中,由用户定义的变量。这些变量只能在声明它们的批处理范围内使用,即局部变量的作用域仅限于一个批处理范围内。局部变量必须以符号“@”开头。 局部变量声明...
对于变量和数组,会生成相应的存取指令,如加载、存储、数组索引等操作。 在易语言中,由于使用了中文作为编程语言,这些过程都更加符合中国程序员的思维习惯,降低了学习和使用的难度。同时,易语言的编译器还支持...