一.通過上篇QLExpress的例子我們知道了它的執行過程,總結爲五個階段
- 單詞分析
- 單詞類型分析
- 語法分析
- 生成指令
- 執行指令
其中前4個過程涉及語法的匹配運算等非常耗時,要做到使qlExpress的性能最大化,你可以做以下兩方面的優化:
- 1、ExpressRunner設置成singleton(結合spring是非常容易做到的)
- 2、execute方法的參數設置 isCache =true(它會把 expressString 編譯成一段指令,緩存在內存中,相當於緩存了(1)->(4)的過程)
二.測試qlexpress性能
public static void main(String[] args) throws Exception{
Stopwatch s = Stopwatch.createStarted();
ExpressRunner runner = new ExpressRunner(false,true);
String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
//isCache設置成false
Object r = runner.execute(express,null, null, false,false);
for(int i = 0;i<10000;i++){
runner.execute(express,null, null, false,true);
System.out.println("表達式計算:" + express + " = " + r);
}
System.out.println(s.stop());
}
運行耗時: 9.123 s
通過設置isCache=true
public static void main(String[] args) throws Exception{
Stopwatch s = Stopwatch.createStarted();
ExpressRunner runner = new ExpressRunner(false,true);
String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
Object r = runner.execute(express,null, null, true,false);
for(int i = 0;i<10000;i++){
runner.execute(express,null, null, true,true);
System.out.println("表達式計算:" + express + " = " + r);
}
System.out.println(s.stop());
}
運行耗時:2.976 s
同時可以觀察控制檯的打印信息,未設置isCache=true時候,控制檯會反覆進行1-5階段
isCache只進行了一次1-5階段的解析;
摘文
https://blog.csdn.net/express_wind
感謝博主分享,學無止境