欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

優(yōu)化Ruby腳本效率實(shí)例分享

 更新時(shí)間:2014年06月30日 15:44:30   投稿:hebedich  
以前寫(xiě)過(guò)批量修改繁體文件名為簡(jiǎn)體的Ruby腳本 ,可惜腳本的性能很有問(wèn)題,批量重命名時(shí)運(yùn)行速度非常慢。這次準(zhǔn)備優(yōu)化下代碼,提升腳本的執(zhí)行效率。

profile.rb是為Ruby程序準(zhǔn)備的profiler,它可以統(tǒng)計(jì)并輸出各方法的運(yùn)行時(shí)間,以便于找到程序執(zhí)行的性能瓶頸。這次就用它來(lái)剖析腳本的運(yùn)行時(shí)間。使用方法很簡(jiǎn)單,加上命令行選項(xiàng)-r profile就可以:

ruby -r profile rename.rb
運(yùn)行結(jié)束后,會(huì)把統(tǒng)計(jì)信息輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出中。如下圖所示:

profile統(tǒng)計(jì)的是各方法的運(yùn)行時(shí)間,分為2類(lèi)。第1種計(jì)算的是從方法調(diào)用到方法返回之間的時(shí)間,稱(chēng)為整體時(shí)間;第2種則是從整體時(shí)間中扣除在該方法中調(diào)用其它方法所耗費(fèi)時(shí)間之后得到的時(shí)間,稱(chēng)為實(shí)際時(shí)間。輸出信息每行中各字段含義如下(從左到右):

該方法執(zhí)行時(shí)間占整體時(shí)間的百分比,比例越高越說(shuō)明這行代碼可能需要優(yōu)化

整體時(shí)間的總和

實(shí)際時(shí)間的總和

被調(diào)用的次數(shù)

每次調(diào)用的平均實(shí)際時(shí)間(毫秒)

每次調(diào)用的平均整體時(shí)間(毫秒)

方法名

由上圖可以看出,腳本執(zhí)行的時(shí)間大部分耗在了循環(huán)上。解決方法有兩個(gè):消除循環(huán)或減少循環(huán)次數(shù)。前者很難實(shí)現(xiàn),暫且還沒(méi)有想到辦法,也許根本就沒(méi)有可能。腳本中mapping的大小為2685,所以每修改一個(gè)文件名需要執(zhí)行2685次循環(huán),且循環(huán)中的encode和gsub!都是耗時(shí)操作。通常文件名的長(zhǎng)度不超過(guò)30個(gè)字符,通過(guò)遍歷文件名中每個(gè)字符的方式重命名就可以把循環(huán)次數(shù)縮減到不超過(guò)30次。

修改代碼后重新執(zhí)行分析命令,得到的結(jié)果是腳本運(yùn)行時(shí)間從379395秒優(yōu)化到2418秒,性能整整提升了156倍,達(dá)到2個(gè)數(shù)量級(jí)的效果。

相關(guān)文章

  • Ruby中的字符串編寫(xiě)示例

    Ruby中的字符串編寫(xiě)示例

    這篇文章主要介紹了Ruby中的字符串編寫(xiě)示例,作者給出了相關(guān)編程風(fēng)格的一些建議,需要的朋友可以參考下
    2015-08-08
  • Ruby基礎(chǔ)知識(shí)之類(lèi)

    Ruby基礎(chǔ)知識(shí)之類(lèi)

    這篇文章主要介紹了Ruby基礎(chǔ)知識(shí)之類(lèi),本文講解了類(lèi)的創(chuàng)建、訪問(wèn)器、類(lèi)變量、常量、類(lèi)方法、方法的訪問(wèn)性、工廠方法、模塊module等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 編寫(xiě)Ruby腳本來(lái)對(duì)Twitter用戶(hù)的數(shù)據(jù)進(jìn)行深度挖掘

    編寫(xiě)Ruby腳本來(lái)對(duì)Twitter用戶(hù)的數(shù)據(jù)進(jìn)行深度挖掘

    這篇文章主要介紹了編寫(xiě)Ruby腳本來(lái)對(duì)Twitter用戶(hù)的數(shù)據(jù)進(jìn)行深度挖掘的一些例子,通過(guò)調(diào)用Twitter API來(lái)實(shí)現(xiàn)各種功能(內(nèi)地注意墻),需要的朋友可以參考下
    2015-11-11
  • Ruby中遍歷目錄的簡(jiǎn)潔方法

    Ruby中遍歷目錄的簡(jiǎn)潔方法

    這篇文章主要介紹了Ruby中遍歷目錄的簡(jiǎn)潔方法,本文分享了一個(gè)復(fù)雜方法和一個(gè)簡(jiǎn)潔方法,需要的朋友可以參考下
    2015-01-01
  • Ruby中實(shí)現(xiàn)把字符串轉(zhuǎn)換為類(lèi)的2種方法

    Ruby中實(shí)現(xiàn)把字符串轉(zhuǎn)換為類(lèi)的2種方法

    這篇文章主要介紹了Ruby中實(shí)現(xiàn)把字符串轉(zhuǎn)換為類(lèi)的2種方法,其中一種是rails提供的方法,需要的朋友可以參考下
    2014-10-10
  • Ruby下WebDriver的相關(guān)操作指南

    Ruby下WebDriver的相關(guān)操作指南

    這篇文章主要介紹了Ruby下WebDriver的相關(guān)操作指南,同時(shí)也介紹了啟動(dòng)firefox drive加載firebug擴(kuò)展的方法,需要的朋友可以參考下
    2015-07-07
  • Ruby on Rails網(wǎng)站項(xiàng)目構(gòu)建簡(jiǎn)單指南

    Ruby on Rails網(wǎng)站項(xiàng)目構(gòu)建簡(jiǎn)單指南

    Rails項(xiàng)目通過(guò)Ruby世界中的gem和rake工具來(lái)構(gòu)建起來(lái)真的相當(dāng)方便,這里就給大家整理了一份Ruby on Rails網(wǎng)站項(xiàng)目構(gòu)建簡(jiǎn)單指南,需要的朋友可以參考下
    2016-06-06
  • Ruby編寫(xiě)HTML腳本替換小程序的實(shí)例分享

    Ruby編寫(xiě)HTML腳本替換小程序的實(shí)例分享

    這篇文章主要介紹了Ruby編寫(xiě)HTML腳本替換小程序的實(shí)例分享,單純使用Ruby中的字符串替換方法而沒(méi)有涉及更復(fù)雜的正則表達(dá)式,需要的朋友可以參考下
    2016-05-05
  • 初步了解一下什么是ruby

    初步了解一下什么是ruby

    了解下什么是ruby,希望學(xué)習(xí)ruby的朋友了解下
    2008-06-06
  • ruby實(shí)現(xiàn)github第三方認(rèn)證

    ruby實(shí)現(xiàn)github第三方認(rèn)證

    GitHub在用戶(hù)認(rèn)證過(guò)程中采用了雙匙機(jī)制,在雙匙加密機(jī)制中,只有合法用戶(hù)才擁有私匙,只要GitHub在收到請(qǐng)求時(shí)可以證明提交請(qǐng)求的客戶(hù)端上擁有該私匙,即可以確認(rèn)該操作是由合法用戶(hù)發(fā)起的。我們通過(guò)ruby來(lái)簡(jiǎn)單模擬下吧。
    2015-06-06

最新評(píng)論