日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Ruby使用心得匯總:尋找高效的實(shí)現(xiàn)

最近因?yàn)槭褂肦uby寫一個(gè)多線程爬蟲(chóng),所以積累了一點(diǎn)小心得:

編輯推薦:Ruby入門教程與技巧大全

Ruby使用心得1、多使用Benchmark測(cè)試效率,以尋找高效的實(shí)現(xiàn),尤其是對(duì)于頻繁執(zhí)行的代碼。Ruby執(zhí)行的效率本身比較慢,所以代碼選擇很重要。

 
 
 
  1. require 'benchmark'
  2. n = 100000
  3. Benchmark.bm { |x|
  4.   x.report("gsub") { 
  5.     for i in 1..n
  6.       a = "abcd\nef" * 10
  7.       b = a.gsub(/\n/," ")
  8.     end 
  9.  }
  10.  x.report("  tr") {
  11.    for i in 1..n
  12.      a = "a\"bcd\nef" * 10
  13.      b = a.tr("\n"," ")
  14.    end  
  15.  }

上面執(zhí)行結(jié)果:

 
 
 
  1.       user     system      total        real
  2. gsub  2.312000   0.109000   2.421000 (  2.438000)
  3. tr  0.656000   0.000000   0.656000 (  0.672000)

兩者效率相差近四倍。

Ruby使用心得2、關(guān)于字符串連接,盡量使用"<<",而不是"+=",因?yàn)閮烧咝氏嗖罹薮蟆?/p>

 
 
 
  1.  require 'benchmark'
  2.  
  3.  Benchmark.bm { |b|
  4.    b.report("+= ") {
  5.      a = ""
  6.      100000.times { a += "foo" }
  7.    }
  8.    b.report("<< ") {
  9.      a = ""
  10.     100000.times { a << "foo" }
  11.   }
  12. }

執(zhí)行結(jié)果:

 
 
 
  1.       user     system      total        real
  2. +=  22.390000   9.750000  32.140000 ( 35.671000)
  3. <<   0.094000   0.000000   0.094000 (  0.094000)

Ruby使用心得3、注意Ruby的異常類層次:

 
 
 
  1. Exception
  2.     * fatal
  3.     * NoMemoryError
  4.     * ScriptError
  5.           o LoadError
  6.           o NotImplementedError
  7.           o SyntaxError
  8.     * SignalException
  9.           o Interrupt
  10.     * StandardError
  11.           o ArgumentError
  12.           o IOError
  13.                 + EOFError
  14.           o IndexError
  15.           o LocalJumpError
  16.           o NameError
  17.                 + NoMethodError
  18.           o RangeError
  19.                 + FloatDomainError
  20.           o RegexpError
  21.           o RuntimeError
  22.           o SecurityError
  23.           o SystemCallError
  24.           o ThreadError
  25.           o TypeError
  26.           o ZeroDivisionError
  27.     * SystemExit
  28.     * SystemStackError

使用 rescue 捕捉異常時(shí),如果沒(méi)有指定捕捉的異常類型,則默認(rèn)為StandardError。(If you write a rescue clause with no parameter list, the parameter defaults to StandardError.——參見(jiàn)Programming Ruby)

這點(diǎn)需要特別注意,因?yàn)槲覀兺?xí)慣性假設(shè)它會(huì)捕捉所有異常。譬如Net::HTTP獲取頁(yè)面如果超時(shí)會(huì)拋出Timeout::Error異常,其為Interrupt的子類,所以不能被無(wú)參的 rescue 捕獲。我就在這上面栽過(guò)跟頭。

Ruby使用心得4、這里有一些非常好的參考資料:

Ruby-Doc.org —— Ruby文檔的權(quán)威網(wǎng)站

Programming Ruby —— Ruby權(quán)威的文檔

Ruby Class and Library Reference —— 很方便的常見(jiàn)類的參考

Ruby QuickRef —— 快速索引,查各種符號(hào)和用法很方便

Ruby User's Guide —— Ruby各方面精簡(jiǎn)介紹,入門不錯(cuò)

PLEAC Ruby —— Ruby的Cookbook

Ruby Example Code —— 簡(jiǎn)單直觀的樣例代碼,Ruby的HelloWorld

Ruby Essentials


本文標(biāo)題:Ruby使用心得匯總:尋找高效的實(shí)現(xiàn)
網(wǎng)址分享:http://www.5511xx.com/article/cdhieoo.html