如何讓aFleX指令碼效能更好

2021-09-21 20:48:27 字數 1497 閱讀 6096

a10網路的的aflex指令碼可以對請求和響應資料報進行深度檢測並進行靈活的重定向、丟棄、修改等操作,可以解決使用者的一些特殊需求,因此深受一批技術型使用者的鍾愛。儘管ax平台憑藉其傑出的架構設計使得aflex帶來的效能影響相對同類產品小很多,但根據aflex的複雜度和編寫質量不同,對應用整體效能的影響還是存在一些差別的。本文就如何編寫更高效的aflex進行簡單闡述。

首先,哪些因素會影響aflex效能? 有以下幾點。

知道了影響aflex效能的因素,如何編寫高效的aflex就又針對性了。基本原則如下。

1. 別使用aflex!

不要因為好玩使用aflex,除非必須。如果有相應的功能特性可以做到同樣功能,使用裝置自身的功能。ax的http模板中提供插入客戶端ip、url 交換、http頭刪除/插入/修改、http重定向等豐富的功能,效能要比使用aflex更好。

2. 避免沒必要的變數

除非必須,否則盡可能不要使用變數。變數建立、賦值等都需要耗費cpu資源,同時也會占用記憶體資源(每個連線都會占用一定位元組,在大併發使用者時影響會放大)。諸如http::host 和 ip::client_addr等命令的執行結果已經快取在記憶體中,將這些常量結果儲存到變數是典型的資源浪費。只有在使用變數可以減少重複計算該值時才使用變數。下面例子中,前者就使用了沒有必要的變數。

未優化:

set ip_addr [ip::client_addr]

log 「client address=$ip_addr」

優化後:

log 「client address=[ip::client_addr]」

3. 使用{}括住expr表示式!

由於tcl語言的表示式有兩次替代,一次tcl直譯器替代和一次expr命令替代,盡可能使用{}括住表示式。這樣可以使tcl對於沒必要的二次替換的變數和命令結果只進行一次替代。

如set octet [expr 3 + [getfield [ip::client_addr] "." 4]] 中[getfield [ip::client_addr] "." 4]在tcl直譯器中替代一次,在進行expr計算時還有一次替代。

而在使用{}後,set octet [expr ] 不需用第2次expr命令中的替代。

4. 條件判斷時遵循以下原則

5. 資料查詢時盡量使用tcl中的array替代list。多維矩陣的查詢膠質多個list查詢更高效。

6. 使用正確的操作符可以改善效能。如:

7. 盡可能避免使用正規表示式regex和正規表示式替代regsub。這兩個命令功能強大,但耗費資源也更多。有些情況必須使用正規表示式就不得不犧牲一些效能。可能的情況下盡可能使用以下替代命令。

以上只是部分常見的可以優化aflex的地方,可以滿足大部分情況。針對非常複雜的aflex優化,一方面需要非常熟悉tcl,另一方面需要熟悉aflex命令工作機制,這時最好是借助於廠家技術支援中心進行優化。

r.s

Python指令碼效能分析

來自 def foo sum 0 for i in range 10000 sum i suma bar sumb bar return sum defbar sum 0 for i in range 100000 sum i return sum if name main import cprof...

python指令碼效能分析

在進行python開發時需要對python指令碼的效能分析,以便對python指令碼進行優化,下面使用cprofile和 pstats對python指令碼效能分析。cprofile思路 1.使用cprofile模組生成指令碼執行的統計資訊檔案 2.使用pstats格式化統計資訊,並根據需要做排序分析...

PHP提高指令碼效能要點

1.刪除重複項 array keys array flip array 速度比 array unique array 高於30 2.獲取隨機數組記錄 array mt rand 0,count array 1 速度比 array rand array 高於96 3.檢查字串僅包含字母數字字元 cty...