JUST DO IT ~

          我只想當個程序員

          為什么 open-uri 有時候是stringio 有時候返回 tmpfile?

          為什么 open-uri 有時候是stringio 有時候返回 tmpfile?
          我用ruby openuri 慢.
          1.網絡io文件大小未定,作為類庫的設計者. 
            小文件太多,不好.IO性能差.
            單個文件太大,如果都用memorybuffer,內存占用會非常的大.
            設計者考慮2邊的靈活性.
          2.我實際使用為什么會慢.因為網絡慢,丟包厲害.調整這個參數確實沒什么用.
          在irb中調用
          require 'open-uri'
          zipfile = open("https://www.baidu.com/img/bdlogo.png")
          require 'open-uri'
          # Don't allow downloaded files to be created as StringIO. Force a tempfile to be created.
          OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
          OpenURI::Buffer.const_set 'StringMax', 2000000
          irb(main):010:0> zipfile = open("https://www.baidu.com/img/bdlogo.png")
          => #<Tempfile:/var/folders/ss/kfvmx1195cj_zz3zb3tg0ch00000gn/T/open-uri20150617-13110-yt0suh>
          修改配置后測試 
          require 'open-uri'
          # Don't allow downloaded files to be created as StringIO. Force a tempfile to be created.
          OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
          OpenURI::Buffer.const_set 'StringMax', 0
          irb(main):004:0> zipfile = open("https://www.baidu.com/img/bdlogo.png")
          => #<StringIO:0x007fe2f9008b68 @base_uri=#<URI::HTTPS https://www.baidu.com/img/
          參考: 
          http://stackoverflow.com/questions/10496874/why-does-openuri-treat-files-under-10kb-in-size-as-stringio
          When one does network programming, you allocate a buffer of a reasonably large size and send and read units of data which will fit in the buffer. However, when dealing with files (or sometimes things called BLOBs) you cannot assume that the data will fit into your buffer. So, you need special handling for these large streams of data.
          (Sometimes the units of data which fit into the buffer are called packets. However, packets are really a layer 4 thing, like frames are at layer 2. Since this is happening a layer 7, they might better be called messages.)
          For replies larger than 10K, the open-uri library is setting up the extra overhead to write to a stream objects. When under the StringMax size, it just includes the string in the message, since it knows it can fit in the buffer.

          posted on 2015-06-17 21:12 小高 閱讀(299) 評論(0)  編輯  收藏 所屬分類: Ruby on Rails

          導航

          <2015年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灵台县| 漳平市| 济阳县| 谢通门县| 泰宁县| 乌拉特前旗| 苏尼特右旗| 土默特右旗| 轮台县| 石柱| 夏邑县| 邮箱| 文安县| 三门峡市| 拉萨市| 佳木斯市| 南丰县| 清远市| 哈巴河县| 博野县| 昌图县| 松溪县| 抚远县| 连南| 繁昌县| 兰溪市| 西乡县| 汝南县| 桐梓县| 叙永县| 绥江县| 潮州市| 晋州市| 理塘县| 广元市| 陆良县| 宁陵县| 色达县| 元阳县| 南木林县| 五峰|