3

たとえば、次のような配列があるとします。

links = [['May 1', 'Link A', 'www.linka.com'], ['May 2', 'Link B', 'www.linkb.com']]

私が Nokogiri でやりたいことは、各リンクに移動し、各ページで (私が持っている xpath ごとに) 特定のテキストを返すことです。

私は次のようなことができることを知っています:

links.each do |x|
   doc = Nokogiri::HTML(open(x[2]))
end

次に、そのループdoc内でそれぞれをトラバースします。eachしかし、私の配列に 700 個のアイテムが含まれている可能性があることを考えると、これは非常に非効率的であるように思われます。あらゆる種類のネストされたループなどがあります。

この問題を攻撃するより効率的な方法はありますか?

ありがとう。

4

1 に答える 1

1

TyphoeusEM-HTTP-Requestなどを調べて、HTTP リクエストを並列化することをお勧めします。

ページ自体を Nokogiri で処理するのは CPU バウンド タスクになるため、そのタスクをマルチスレッド化してもあまり (またはまったく) 高速化されません。

最大の速度低下は HTTP リクエストによるものであるため、それらを並行して実行すると最大の速度向上が得られます。

Typhoeus :
https://github.com/typhoeus/typhoeus

EM-HTTP-リクエスト:
https://github.com/igrigorik/em-http-request

于 2012-06-03T10:53:02.887 に答える