要想實現遊戲陪玩app原始碼的效能測試與調優,應該怎麼做?

雲豹科技程式設計師發表於2021-10-08

前言

還記得當年,被面試官問到如何測試遊戲陪玩app原始碼某個運算的速度(執行時間),我是這樣回到的。
var start = (new Date()).getTime(); // 或者Date.now() 
// 進行一些操作之後
var end = (new Date()).getTime(); 
console.log( "Duration:", (end - start) );
但是這種方案是錯誤的哦 為什麼呢? 這個運算的這次特定的執行消 耗了大概這麼長時間。而它是不是總是以這樣的速度執行,你基本上一無所知。你不知道遊戲陪玩app原始碼在這個時候有沒有受到什麼影響,以及其他時候這個運算會不會執行得更快。這樣低置 信度的測試幾乎無力支援你的任何決策。這個遊戲陪玩app原始碼效能測試基本上是無用的。
重複很多人可能會用一個迴圈把它包起來,這樣整個遊戲陪玩app原始碼測試的執行時間就會更長 一些了。如果重複一個運算 100 次,然後整個迴圈報告共消耗了 137ms,那你就可以把 它除以 100,得到每次運算的平均用時為 1.37ms,但是是不對得。 簡單的數學平均值絕對不足以對你要外推到整個遊戲陪玩app原始碼範圍的效能作出判斷。迭代 100 次, 即使只有幾個(過高或過低的)的異常值也可以影響整個平均值,然後在重複應用這個結 論的時候,你還會擴散這個誤差,產生更大的欺騙性。
Benchmark.js我並不打算複述他們的整個文件來介紹 Benchmark.js 如何運作。他們的 API 很不錯,你 應該讀一讀。還有一些很棒的文章介紹了更多的細節和方法。
function foo() {
    // 要測試的運算}var bench = new Benchmark(
    "foo test", // 測試名稱
    foo, // 要測試的函式(也即內容)
    {
        // .. // 可選的額外選項(參見文件)
 
    });
     bench.hz; // 每秒運算數 
     bench.stats.moe; // 出錯邊界
     bench.stats.variance; // 樣本方差
     // ..

環境為王

遊戲陪玩app原始碼測試條件與你期望的真實情況越接近越好。只有這 樣得出的結果才有可能接近事實。
jsPerf.com jsPerf 們前面介紹的 Benchmark.js 庫來執行統計上精確可靠的測試,並把測試結果放在一個公開 可得的 URL 上,你可以把這個 URL 轉發給別人。

寫好測試

要寫好遊戲陪玩app原始碼測試,需要認真分析和思考兩個測試用例之間有什麼區別,以及這些區別是有意還 是無意的。 不要試圖窄化到真實程式碼的微小片段,以及脫離上下文而只測量這一小部分的效能,因為 包含更大(仍然有意義的)上下文時遊戲陪玩app原始碼功能測試和效能測試才會更好。這些測試可能也會運 行得慢一點,這意味著環境中發現的任何差異都更有意義。

微效能

很多時候,我們通過程式碼得手段做的遊戲陪玩app原始碼一些效能上的優化可能在引擎眼中差異並不是非常大,譬如++i喝i++這樣的行為。
不是所有的引擎都類似遊戲陪玩app原始碼引擎可以自由決定一個運算是否需要優化,可能進行權衡,替換掉運算次要效能。對一個 運算來說,很難找到一種方法使其在所有瀏覽器中都執行得較快。
大局怎麼知道什麼是大局呢?首先要了解你的遊戲陪玩app原始碼程式碼是否執行在關鍵路徑上。如果不在關鍵路徑 上,你的優化就很可能得不到很大的收益。
尾呼叫優化尾呼叫就是一個出現在另一個函式“結尾”處的函式呼叫。這個呼叫結束後就沒有其餘事情要做了。 非遞迴的尾呼叫:
function foo(x) {
    return x;}function bar(y) {
    return foo(y + 1); // 尾呼叫}function baz() {
    return 1 + bar(40); // 非尾呼叫 }baz(); // 42
foo(y+1) 是 bar(…) 中的尾呼叫,因為在 foo(…) 完成後,bar(…) 也完成了,並且只需要 返回 foo(…) 呼叫的結果。然而,bar(40) 不是尾呼叫,因為在它完成後,它的結果需要加 上 1 才能由 baz() 返回。

小結

  • 對遊戲陪玩app原始碼一段程式碼進行有效的效能測試,特別是與同樣程式碼的另外一個選擇對比來看看哪種方案更快,需要認真注意細節;
  • 尾呼叫優化是 ES6 要求的一種優化方法,它使 JavaScript 中原本不可能的一些遞迴模式變 得實際。
本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2794940/,如需轉載,請註明出處,否則將追究法律責任。

相關文章