• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            qinzuoyan

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              8 Posts :: 0 Stories :: 16 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(3)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            最近因為使用Ruby寫一個多線程爬蟲,所以積累了一點小心得:

            1、多使用Benchmark測試效率,以尋找高效的實現,尤其是對于頻繁執行的代碼。Ruby執行的效率本身比較慢,所以代碼選擇很重要。
             1 require 'benchmark'
             2 
             3 = 100000
             4 Benchmark.bm { |x|
             5   x.report("gsub") { 
             6     for i in 1..n
             7       a = "abcd\nef" * 10
             8       b = a.gsub(/\n/," ")
             9     end 
            10   }
            11   x.report("  tr") {
            12     for i in 1..n
            13       a = "a\"bcd\nef" * 10
            14       b = a.tr("\n"," ")
            15     end  
            16   }
            17 }

            上面執行結果:
                  user     system      total        real
            gsub  2.312000   0.109000   2.421000 (  2.438000)
              tr  0.656000   0.000000   0.656000 (  0.672000)
            兩者效率相差近四倍。

            2、關于字符串連接,盡量使用"<<",而不是"+=",因為兩者效率相差巨大。
             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 }

            執行結果:
                  user     system      total        real
            +=  22.390000   9.750000  32.140000 ( 35.671000)
            <<   0.094000   0.000000   0.094000 (  0.094000)

            3、注意Ruby的異常類層次:
            Exception
                
            * fatal
                
            * NoMemoryError
                
            * ScriptError
                      o LoadError
                      o NotImplementedError
                      o SyntaxError
                
            * SignalException
                      o Interrupt
                
            * StandardError
                      o ArgumentError
                      o IOError
                            
            + EOFError
                      o IndexError
                      o LocalJumpError
                      o NameError
                            
            + NoMethodError
                      o RangeError
                            
            + FloatDomainError
                      o RegexpError
                      o RuntimeError
                      o SecurityError
                      o SystemCallError
                      o ThreadError
                      o TypeError
                      o ZeroDivisionError
                
            * SystemExit
                
            * SystemStackError
            使用 rescue 捕捉異常時,如果沒有指定捕捉的異常類型,則默認為StandardError。(If you write a rescue clause with no parameter list, the parameter defaults to StandardError.——參見Programming Ruby
            這點需要特別注意,因為我們往往習慣性假設它會捕捉所有異常。譬如Net::HTTP獲取頁面如果超時會拋出Timeout::Error異常,其為Interrupt的子類,所以不能被無參的 rescue 捕獲。我就在這上面栽過跟頭。

            4、這里有一些非常好的參考資料:
              Ruby-Doc.org —— Ruby文檔的權威網站
              Programming Ruby —— Ruby權威的文檔
              Ruby Class and Library Reference —— 很方便的常見類的參考
              Ruby QuickRef —— 快速索引,查各種符號和用法很方便
              Ruby User's Guide —— Ruby各方面精簡介紹,入門不錯
              PLEAC Ruby —— Ruby的Cookbook
              Ruby Example Code —— 簡單直觀的樣例代碼,Ruby的HelloWorld
              Ruby Essentials
             
            posted on 2009-08-11 00:09 左言 閱讀(363) 評論(0)  編輯 收藏 引用
            久久国产精品一区| 99久久99久久精品国产片果冻| 国产美女久久精品香蕉69| 69久久夜色精品国产69| 久久99毛片免费观看不卡 | 亚洲国产精品无码成人片久久| 性欧美丰满熟妇XXXX性久久久 | 品成人欧美大片久久国产欧美| 精品久久人人爽天天玩人人妻| 精品一二三区久久aaa片| 青青草国产精品久久久久| 亚洲精品午夜国产va久久| 青青青国产精品国产精品久久久久| 综合久久给合久久狠狠狠97色| 99久久精品国内| 久久丫忘忧草产品| 久久一本综合| 91精品国产91久久久久久| 亚洲AV无码久久精品狠狠爱浪潮| 99久久国产亚洲高清观看2024 | 亚洲AV无码久久| 久久亚洲2019中文字幕| 亚洲综合婷婷久久| 丰满少妇高潮惨叫久久久| 久久伊人五月丁香狠狠色| 色婷婷综合久久久久中文字幕| 久久精品视频免费| 国产精品久久成人影院| 久久久亚洲AV波多野结衣| 久久亚洲色一区二区三区| 久久AAAA片一区二区| 伊人色综合久久| 国产精品99久久不卡| 日本一区精品久久久久影院| 72种姿势欧美久久久久大黄蕉| 久久精品国产亚洲av日韩 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久久久亚洲av无码专区喷水| 漂亮人妻被中出中文字幕久久 | 久久精品国产72国产精福利| 国产日韩久久久精品影院首页|