From: AOKI Shigeru Date: 2010-01-13T01:19:24+09:00 Subject: [ruby-list:46762] httpclientとhtmlsplitの併用 青木と申します。 httpclient(http://raa.ruby-lang.org/project/httpclient/) をrequireすると、htmlsplit(http://www.moonwolf.com/ruby/) の動作がものすごく遅くなります。 回避策はありますでしょうか。 (a.txtは45KBほどのHTMLファイルです) [stest.rb] require 'htmlsplit' html = open('a.txt').read HTMLSplit.new(html) C:\work>ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] C:\work>ruby -r profile stest.rb % cumulative self self total time seconds seconds calls ms/call ms/call name 63.15 36.59 36.59 1 36586.00 57766.00 String#each_byte 16.50 46.15 9.56 265550 0.04 0.04 Symbol#=== 5.29 49.21 3.06 32635 0.09 0.12 Kernel.=== 3.02 50.96 1.75 53992 0.03 0.03 String#== 2.88 52.63 1.67 43398 0.04 0.04 Integer#chr 2.48 54.06 1.44 34806 0.04 0.04 String#<< 2.23 55.35 1.29 1192 1.08 1.70 Array#include? 1.67 56.32 0.96 27797 0.03 0.03 Fixnum#== 0.80 56.78 0.47 11143 0.04 0.04 Regexp#=== 0.29 56.95 0.17 1125 0.15 0.22 CGI#unescapeHTML 0.24 57.09 0.14 2518 0.06 0.06 String#downcase 0.21 57.22 0.12 1991 0.06 29.24 Class#new 0.16 57.31 0.10 507 0.19 0.25 StartTag#initialize 0.14 57.39 0.08 506 0.16 0.22 EndTag#initialize 0.14 57.47 0.08 6 13.17 60.17 Kernel.require 0.13 57.55 0.08 1125 0.07 0.07 String#gsub 0.11 57.61 0.06 1656 0.04 0.04 String#[] 0.11 57.67 0.06 1989 0.03 0.03 Array#<< 0.08 57.72 0.05 3 15.67 20.67 Array#each 0.08 57.77 0.05 179 0.26 0.35 EmptyElementTag#initialize 0.08 57.81 0.05 1298 0.04 0.04 Hash#[]= 0.05 57.85 0.03 111 0.28 0.28 Module#module_eval 0.05 57.88 0.03 1262 0.02 0.02 Fixnum#> 0.05 57.91 0.03 728 0.04 0.04 CharacterData#initialize 0.03 57.92 0.02 1262 0.01 0.01 String#length 0.03 57.94 0.01 308 0.05 0.05 Module#method_added 0.00 57.94 0.00 1 0.00 0.00 File#initialize 0.00 57.94 0.00 68 0.00 0.00 Comment#initialize 0.00 57.94 0.00 1 0.00 0.00 IO#read 0.00 57.94 0.00 1 0.00 0.00 String#+ 0.00 57.94 0.00 1192 0.00 0.00 String#downcase! 0.00 57.94 0.00 1 0.00 0.00 Regexp#quote 0.00 57.94 0.00 1 0.00 0.00 Class#initialize 0.00 57.94 0.00 4 0.00 0.00 Module#private 0.00 57.94 0.00 2 0.00 0.00 Module#public_instance_met hods 0.00 57.94 0.00 11 0.00 0.00 Module#module_function 0.00 57.94 0.00 1 0.00 0.00 Regexp#match 0.00 57.94 0.00 1 0.00 0.00 Array#| 0.00 57.94 0.00 1 0.00 0.00 String#<=> 0.00 57.94 0.00 28 0.00 0.00 String#sub 0.00 57.94 0.00 1 0.00 57766.00 HTMLSplit#initialize 0.00 57.94 0.00 1 0.00 0.00 Declaration#initialize 0.00 57.94 0.00 25 0.00 0.00 Kernel.singleton_method_ad ded 0.00 57.94 0.00 1 0.00 0.00 Module#attr 0.00 57.94 0.00 15 0.00 0.00 Class#inherited 0.00 57.94 0.00 1 0.00 0.00 Comparable.< 0.00 57.94 0.00 1 0.00 0.00 Kernel.open 0.00 57.94 0.00 14 0.00 0.00 Module#attr_accessor 0.00 57.94 0.00 110 0.00 0.00 Fixnum#+ 0.00 57.94 0.00 28 0.00 0.00 Module#define_method 0.00 57.94 0.00 1 0.00 0.00 Array#- 0.00 57.94 0.00 1 0.00 0.00 Module#attr_reader 0.00 57.94 0.00 1 0.00 62.00 Object#DelegateClass 0.00 57.94 0.00 1 0.00 57938.00 #toplevel C:\work>ruby -r httpclient -r profile stest.rb % cumulative self self total time seconds seconds calls ms/call ms/call name 70.84 641.68 641.68 1 641681.00 904297.00 String#each_byte 11.45 745.36 103.68 265550 0.39 0.39 Symbol#=== 6.02 799.87 54.51 32635 1.67 2.04 Kernel.=== 2.79 825.16 25.29 1192 21.22 27.05 Array#include? 2.16 844.71 19.54 53992 0.36 0.36 String#== 1.89 861.85 17.15 43398 0.40 0.40 Integer#chr 1.52 875.63 13.77 34806 0.40 0.40 String#<< 1.25 886.97 11.34 27797 0.41 0.41 Fixnum#== 0.50 891.51 4.54 11143 0.41 0.41 Regexp#=== 0.37 894.83 3.32 1991 1.67 457.48 Class#new 0.22 896.85 2.02 1125 1.80 2.28 CGI#unescapeHTML 0.11 897.88 1.03 506 2.03 2.34 EndTag#initialize 0.11 898.85 0.97 507 1.91 2.27 StartTag#initialize 0.10 899.75 0.90 2518 0.36 0.36 String#downcase 0.08 900.47 0.72 1989 0.36 0.36 Array#<< 0.08 901.16 0.69 1656 0.42 0.42 String#[] 0.07 901.76 0.60 1262 0.48 0.48 String#length 0.06 902.31 0.54 1125 0.48 0.48 String#gsub 0.06 902.84 0.53 1262 0.42 0.42 Fixnum#> 0.05 903.25 0.42 728 0.57 0.57 CharacterData#initialize 0.04 903.66 0.40 3 135.00 312.33 Array#each 0.04 904.05 0.39 111 3.51 3.95 Module#module_eval 0.04 904.44 0.39 1298 0.30 0.30 Hash#[]= 0.04 904.81 0.38 6 62.67 476.50 Kernel.require 0.04 905.17 0.36 179 1.99 2.42 EmptyElementTag#initialize 0.03 905.44 0.27 1192 0.22 0.22 String#downcase! 0.01 905.56 0.13 14 8.93 10.07 Module#attr_accessor 0.01 905.69 0.12 308 0.41 0.41 Module#method_added 0.01 905.74 0.05 28 1.71 2.25 Module#define_method 0.01 905.78 0.05 68 0.69 0.69 Comment#initialize 0.00 905.81 0.03 110 0.28 0.28 Fixnum#+ 0.00 905.83 0.02 1 15.00 15.00 Module#attr 0.00 905.83 0.00 1 0.00 0.00 File#initialize 0.00 905.83 0.00 1 0.00 0.00 Declaration#initialize 0.00 905.83 0.00 1 0.00 0.00 Regexp#quote 0.00 905.83 0.00 1 0.00 0.00 String#+ 0.00 905.83 0.00 1 0.00 0.00 Array#| 0.00 905.83 0.00 1 0.00 0.00 Class#initialize 0.00 905.83 0.00 28 0.00 0.00 String#sub 0.00 905.83 0.00 4 0.00 0.00 Module#private 0.00 905.83 0.00 11 0.00 0.00 Module#module_function 0.00 905.83 0.00 1 0.00 0.00 String#<=> 0.00 905.83 0.00 1 0.00 904297.00 HTMLSplit#initialize 0.00 905.83 0.00 1 0.00 765.00 Object#DelegateClass 0.00 905.83 0.00 15 0.00 0.00 Class#inherited 0.00 905.83 0.00 1 0.00 0.00 Comparable.< 0.00 905.83 0.00 25 0.00 0.00 Kernel.singleton_method_ad ded 0.00 905.83 0.00 1 0.00 0.00 Kernel.open 0.00 905.83 0.00 1 0.00 0.00 IO#read 0.00 905.83 0.00 2 0.00 0.00 Module#public_instance_met hods 0.00 905.83 0.00 1 0.00 0.00 Regexp#match 0.00 905.83 0.00 1 0.00 0.00 Array#- 0.00 905.83 0.00 1 0.00 0.00 Module#attr_reader 0.00 905.83 0.00 1 0.00 905828.00 #toplevel -- (有)ナセ工企  青木 茂 mailto:shig.aok@gmail.com