Mvel的性能很不错(Mvel主要竞争对手是OGNL),这个是官方提供的性能数据,因为Mvel使用asm,采用了编译成java字节码的方式,其本质的性能应该和java代码的性能是类似的。不过在实际测试器模板的时候,其性能并没有非常突出:
测试代码:主要比较了完成同一个功能,java、velocity、mvel需要的时间
velocity对SimpleNode进行Cache之后进行测试,同样Mvel也是编译之后进行测试。发现两者的CPU性能相差不大,在同一数量级,而java则明显高很多,当然和java的写法也有关系。 看来还需要再看一下Mvel编译之后的代码!
public class Main {
private static Map vars = new HashMap();
private static VelocityContext context = new VelocityContext();
private static RuntimeInstance ri = new RuntimeInstance();
static {
Group g = new Group("group1");
for (int i = 0; i < 20; i++) {
g.addUser(new User(i, "user" + i));
}
vars.put("group", g);
vars.put("name", "john");
context.put("group", g);
context.put("name", "john");
}
private static String mvelTemplate = "Hello, my name is @{name.toUpperCase()},"
+ " @foreach{user : group.users} - @{user.id} - @{user.name} "
+ " @end{}";
private static String velocityTemplate = "Hello, my name is ${name.toUpperCase()},"
+ "#foreach($user in $group.users) - ${user.id} - ${user.name} #end " ;
public static String java(Map vars ) {
StringBuffer sb = new StringBuffer();
sb.append("Hello, my name is ");
String name = (String)vars.get("name");
sb.append(name.toUpperCase());
Group group = (Group)vars.get("group");
for (User u : group.getUsers()) {
sb.append(" - ");
sb.append(u.getId());
sb.append(" - ");
sb.append(u.getName());
}
return sb.toString();
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Velocity.init();
CompiledTemplate compiled = TemplateCompiler.compileTemplate(mvelTemplate);
for (int i = 0; i < 10; i++) {
/** 未编译的mvel模板效率*/
long start = System.currentTimeMillis();
for (int n = 0; n < 10000; n ++) {
TemplateRuntime.eval(mvelTemplate, vars);
}
long end = System.currentTimeMillis();
System.out.println("Mvel.NoCompiled elapsed:" + (end - start) );
/** 编译后的mvel模板效率*/
start = System.currentTimeMillis();
for (int n = 0; n < 10000; n ++) {
TemplateRuntime.execute(compiled, vars);
}
end = System.currentTimeMillis();
System.out.println("Mvel.Compiled elapsed:" + (end - start) );
/** Velocity模板效率*/
NullWriter writer = new NullWriter();
SimpleNode snode = ri.parse(velocityTemplate, "velocityTest" );
start = System.currentTimeMillis();
for (int n = 0; n < 10000; n ++) {
/* lets render a template */
ri.render(context, writer, "velocityTest", snode);
// Velocity.evaluate(context, writer, "velocityTest", velocityTemplate);
}
end = System.currentTimeMillis();
System.out.println("Velocity Cache elapsed:" + (end - start) );
/** Velocity模板效率*/
//start = System.currentTimeMillis();
//for (int n = 0; n < 10; n ++) {
/* lets render a template */
// Velocity.evaluate(context, writer, "velocityTest", velocityTemplate);
//}
//end = System.currentTimeMillis();
//System.out.println("Velocity No Cache elapsed:" + (end - start) );
/** java代码效率*/
start = System.currentTimeMillis();
for (int n = 0; n < 10000; n ++) {
java(vars);
}
end = System.currentTimeMillis();
System.out.println("Java elapsed:" + (end - start) );
}
}
}
测试结果:
Mvel.NoCompiled elapsed:7970
Mvel.Compiled elapsed:359
Velocity Cache elapsed:625
Java elapsed:93
Mvel.NoCompiled elapsed:6250
Mvel.Compiled elapsed:328
Velocity Cache elapsed:578
Java elapsed:78
Mvel.NoCompiled elapsed:6710
Mvel.Compiled elapsed:328
Velocity Cache elapsed:562
Java elapsed:47
Mvel.NoCompiled elapsed:6090
Mvel.Compiled elapsed:343
Velocity Cache elapsed:516
Java elapsed:46
Mvel.NoCompiled elapsed:7190
Mvel.Compiled elapsed:312
Velocity Cache elapsed:515
Java elapsed:47
Mvel.NoCompiled elapsed:6090
Mvel.Compiled elapsed:297
Velocity Cache elapsed:530
Java elapsed:47
Mvel.NoCompiled elapsed:6250
Mvel.Compiled elapsed:297
Velocity Cache elapsed:515
Java elapsed:47
Mvel.NoCompiled elapsed:6090
Mvel.Compiled elapsed:312
Velocity Cache elapsed:515
Java elapsed:47
Mvel.NoCompiled elapsed:7810
Mvel.Compiled elapsed:328
Velocity Cache elapsed:530
Java elapsed:32
Mvel.NoCompiled elapsed:6090
Mvel.Compiled elapsed:359
Velocity Cache elapsed:531
Java elapsed:46
分享到:
相关推荐
**表达式解析器(MVEL)** MVEL是一个强大的动态脚本语言,主要设计用于简化表达式的解析和执行。它在Java生态系统中广泛使用,尤其在Spring框架和其他项目中,用作快速、轻量级的表达式语言。MVEL提供了一种简洁的...
通过提供的`mvel`文件,可能包含了MVEL 2.0的API文档、示例代码、测试用例或库的源码。这些资源可以帮助你深入了解MVEL的工作原理,学习如何在实际项目中有效利用它。 总之,MVEL 2.0表达式语言是一个强大且灵活的...
mvel-maven-插件 使用 MVEL 渲染模板的 Maven 插件。 用法 < groupId>uk.co.codezen < artifactId>mvel-maven-plugin < version>1.0 < goal>render < template
MVEL 2.0 版本在继承 Java 语法的基础上进行了大量优化,以提高性能并简化开发流程。本文档旨在详细介绍 MVEL 2.0 的核心概念及其语法特点,帮助开发者更好地理解和运用这一工具。 #### 二、MVEL 2.0 表达式概述 ...
解释执行适用于简单场景,而预编译执行通常用于性能敏感的应用,因为它可以生成优化过的字节码,从而提高执行效率。 ### 变量作用域 MVEL支持局部变量和全局变量。局部变量仅在当前表达式或块的范围内有效,而全局...
mvel14-1.2.21.jar mvel14-1.2.21.jar
预编译模板是为了提高性能,确保快速执行。 ```java public class MVELTemplateWriter { private final CompiledTemplate template; public MVELTemplateWriter(String template) { this.template = Template...
很好的MVEL基础语法学习资料,希望能帮到你~
MVEL is very easy to use, and just as easy to integrate into your application. Let's take a quick look at a simple MVEL expression: foo.name == "Mr. Foo" This simple expression asks MVEL if the value...
功能强大的基于Java应用程序的表达式语言.
java运行依赖jar包
mvel2-2.1.6.Final-javadoc
mvel2-2.1.0.drools16.jar mvel2-2.1.0.drools16.jar
4. 测试与优化:编写测试用例,确保Hook功能正常工作,并根据性能需求进行优化。 通过这个小项目,开发者能够深入理解这些表达式语言的工作原理,同时掌握如何在实际项目中实现监控和日志记录,从而提升代码的可...
标题 "easyrulesplusmvel:一个结合 Easy Rules 和 MVEL 的 Java 项目" 提到的是一种基于 Java 的规则引擎实现,它整合了 Easy Rules 和 MVEL 这两个库。Easy Rules 是一个简单、灵活的 Java 规则引擎,旨在简化业务...