• <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 左言 閱讀(374) 評論(0)  編輯 收藏 引用
            www久久久天天com| 中文字幕热久久久久久久| 99久久精品日本一区二区免费| 亚洲色大成网站WWW久久九九| 日本欧美久久久久免费播放网| 久久婷婷五月综合色99啪ak| 东方aⅴ免费观看久久av | 久久久这里有精品中文字幕| 久久夜色精品国产亚洲| 久久香蕉国产线看观看乱码| 久久99精品久久久大学生| 亚洲欧美精品一区久久中文字幕 | 久久久久亚洲AV成人网| 伊人久久综合无码成人网| 94久久国产乱子伦精品免费| 国产精品久久久久久福利69堂| 性欧美大战久久久久久久久| 国产精品久久久久a影院| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久精品国产亚洲AV无码娇色| 久久亚洲中文字幕精品一区| 香蕉久久一区二区不卡无毒影院| 一本色道久久综合| 午夜肉伦伦影院久久精品免费看国产一区二区三区| a高清免费毛片久久| 亚洲精品乱码久久久久久蜜桃图片| 久久亚洲AV无码西西人体| 成人资源影音先锋久久资源网| 一本久久知道综合久久| 一个色综合久久| 精品久久久久久久国产潘金莲| 久久久久亚洲精品中文字幕| 91性高湖久久久久| 国产激情久久久久影院老熟女| 久久精品一区二区国产| 久久强奷乱码老熟女| 国产ww久久久久久久久久| 一本久久久久久久| 国产精品激情综合久久| 久久青青国产| 久久久久久国产精品无码下载 |