最佳化Ruby指令碼效率執行個體分享_ruby專題

來源:互聯網
上載者:User

profile.rb是為Ruby程式準備的profiler,它可以統計並輸出各方法的已耗用時間,以便於找到程式執行的效能瓶頸。這次就用它來剖析指令碼的已耗用時間。使用方法很簡單,加上命令列選項-r profile就可以:

ruby -r profile rename.rb
運行結束後,會把統計資訊輸出到標準錯誤輸出中。如下圖所示:

profile統計的是各方法的已耗用時間,分為2類。第1種計算的是從方法調用到方法返回之間的時間,稱為整體時間;第2種則是從整體時間中扣除在該方法中調用其它方法所耗費時間之後得到的時間,稱為實際時間。輸出資訊每行中各欄位含義如下(從左至右):

該方法執行時間佔整體時間的百分比,比例越高越說明這行代碼可能需要最佳化

整體時間的總和

實際時間的總和

被調用的次數

每次調用的平均實際時間(毫秒)

每次調用的平均整體時間(毫秒)

方法名

由上圖可以看出,指令碼執行的時間大部分耗在了迴圈上。解決方案有兩個:消除迴圈或減少迴圈次數。前者很難實現,暫且還沒有想到辦法,也許根本就沒有可能。指令碼中mapping的大小為2685,所以每修改一個檔案名稱需要執行2685次迴圈,且迴圈中的encode和gsub!都是耗時操作。通常檔案名稱的長度不超過30個字元,通過遍曆檔案名稱中每個字元的方式重新命名就可以把迴圈次數縮減到不超過30次。

修改代碼後重新執行分析命令,得到的結果是指令碼已耗用時間從379395秒最佳化到2418秒,效能整整提升了156倍,達到2個數量級的效果。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.