性能测试中脚本怎么写_脚本在流程中的性能影响
性能測試中腳本怎么寫
我們經常看到人們出于各種目的而使用腳本(例如,在服務任務,執行偵聽器等中)。 使用腳本和Java邏輯通常很有意義:
- 它不需要打包到jar中并放在classpath上
- 它使流程定義更易于理解:無需查看其他文件
- 邏輯是流程定義的一部分,這意味著無需費勁就能確保使用了正確的邏輯版本
但是,重要的是還要牢記在流程定義中使用腳本的性能方面,并在這些需求與上述好處之間取得平衡。
我們通常會看到與Activiti一起使用的兩種腳本語言是Javascript和Groovy。 Javascript與JDK(用于JDK 6和7的Rhino )和用于JDK 8的Nashorn捆綁在一起。 對于Groovy,需要將Groovy腳本引擎添加到類路徑。
但讓我告訴你,我沒有使用JavaScript作為腳本語言的選擇風扇,因為有JDK版本之間移動時(在以前的文章中我讀更多微妙的變化在這里和這里 ,以及這些都是人的那些記錄...)。 因此,這意味著您可以在一天之內編寫自己的邏輯,然后一切都會愉快地工作,而在JDK升級后的第二天,它都會失敗。 我寧愿花時間在實際編碼上。
為了驗證性能,我做了一個非常小的基準測試:
以及腳本在哪里做了一些愚蠢的事情(關鍵是在那里有一個getVariable()和setVariable()以及一些諸如獲取當前日期的額外內容):
var input = execution.getVariable(‘input’); var today = new Date().getDay(); execution.setVariable(‘result’, input * today);Java服務任務中的相同代碼:
public class MyDelegate implements JavaDelegate {@Overridepublic void execute(DelegateExecution execution) throws Exception {Integer input = (Integer) execution.getVariable("input");int today = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);execution.setVariable("result", input * today);} }和Groovy對應的:
def input = execution.getVariable('input'); int today = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); execution.setVariable('result', input * today);我啟動了該流程實例10.000次,并記下了總執行時間,我認為這些數字說明了一切:
- JavaDelegate :6255毫秒
- Groovy :7248毫秒
- Javascript :27314毫秒
使用的JDK版本是最新版本(1.8.0_60)。 第一次運行測試時,我是在1.8.0_20上運行的,而Javascript的結果卻提高了25%(我發現JDK 1.8.0_40的性能得到了提高)。 對于Groovy,我使用的是2.4.4版本(您應該使用該版本,因為較舊的版本存在安全問題 !)
只是為了直觀地了解選項之間的區別:
與使用Javascript相比,將Groovy用于腳本語言似乎是更好的性能選擇。 一定要考慮到這是一個非常簡單的用例的微基準。 但是,鑒于過去使用JDK升級會破壞Javascript腳本的麻煩以及這種結果,默認情況下很難選擇Javascript。
15年9月11日更新:不少人問我為什么差異如此之大。 我的假設是,這是因為JDK中的javascript引擎不是線程安全的,因此無法重用或緩存,因此每次啟動ScriptingEngine的成本很高。 如果您看一下http://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngineFactory.html ,您會看到有一個特殊的參數THREADING,我們在Activiti中使用它: https ://github.com/Activiti/Activiti/blob/master/modules/activiti-engine/src/main/java/org/activiti/engine/impl/scripting/ScriptingEngines.java#L111確定腳本引擎是否可以已緩存。 Nashorn(和Rhino)在此處返回null,這意味著它不能用于在多個線程上執行腳本,即每個線程需要它自己的實例。 我只能假定JDK中的ScriptEngineManager做類似的事情。
翻譯自: https://www.javacodegeeks.com/2015/09/the-performance-impact-of-scripting-in-processes.html
性能測試中腳本怎么寫
總結
以上是生活随笔為你收集整理的性能测试中脚本怎么写_脚本在流程中的性能影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宣传资料主要包括哪些内容 宣传资料介绍
- 下一篇: 中国三大母亲河 中国三大母亲河分别介绍