日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能测试中脚本怎么写_脚本在流程中的性能影响

發(fā)布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能测试中脚本怎么写_脚本在流程中的性能影响 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

性能測試中腳本怎么寫

我們經(jīng)常看到人們出于各種目的而使用腳本(例如,在服務任務,執(zhí)行偵聽器等中)。 使用腳本和Java邏輯通常很有意義:

  • 它不需要打包到jar中并放在classpath上
  • 它使流程定義更易于理解:無需查看其他文件
  • 邏輯是流程定義的一部分,這意味著無需費勁就能確保使用了正確的邏輯版本

但是,重要的是還要牢記在流程定義中使用腳本的性能方面,并在這些需求與上述好處之間取得平衡。

我們通常會看到與Activiti一起使用的兩種腳本語言是Javascript和Groovy。 Javascript與JDK(用于JDK 6和7的Rhino )和用于JDK 8的Nashorn捆綁在一起。 對于Groovy,需要將Groovy腳本引擎添加到類路徑。

但讓我告訴你,我沒有使用JavaScript作為腳本語言的選擇風扇,因為有JDK版本之間移動時(在以前的文章中我讀更多微妙的變化在這里和這里 ,以及這些都是人的那些記錄...)。 因此,這意味著您可以在一天之內(nèi)編寫自己的邏輯,然后一切都會愉快地工作,而在JDK升級后的第二天,它都會失敗。 我寧愿花時間在實際編碼上。

為了驗證性能,我做了一個非常小的基準測試:

以及腳本在哪里做了一些愚蠢的事情(關鍵是在那里有一個getVariable()和setVariable()以及一些諸如獲取當前日期的額外內(nèi)容):

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次,并記下了總執(zhí)行時間,我認為這些數(shù)字說明了一切:

  • JavaDelegate :6255毫秒
  • Groovy :7248毫秒
  • Javascript :27314毫秒

使用的JDK版本是最新版本(1.8.0_60)。 第一次運行測試時,我是在1.8.0_20上運行的,而Javascript的結(jié)果卻提高了25%(我發(fā)現(xiàn)JDK 1.8.0_40的性能得到了提高)。 對于Groovy,我使用的是2.4.4版本(您應該使用該版本,因為較舊的版本存在安全問題 !)

只是為了直觀地了解選項之間的區(qū)別:

與使用Javascript相比,將Groovy用于腳本語言似乎是更好的性能選擇。 一定要考慮到這是一個非常簡單的用例的微基準。 但是,鑒于過去使用JDK升級會破壞Javascript腳本的麻煩以及這種結(jié)果,默認情況下很難選擇Javascript。

15年9月11日更新:不少人問我為什么差異如此之大。 我的假設是,這是因為JDK中的javascript引擎不是線程安全的,因此無法重用或緩存,因此每次啟動ScriptingEngine的成本很高。 如果您看一下http://docs.oracle.com/javase/7/docs/api/javax/script/ScriptEngineFactory.html ,您會看到有一個特殊的參數(shù)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,這意味著它不能用于在多個線程上執(zhí)行腳本,即每個線程需要它自己的實例。 我只能假定JDK中的ScriptEngineManager做類似的事情。

翻譯自: https://www.javacodegeeks.com/2015/09/the-performance-impact-of-scripting-in-processes.html

性能測試中腳本怎么寫

總結(jié)

以上是生活随笔為你收集整理的性能测试中脚本怎么写_脚本在流程中的性能影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。