m2

(pipes書く人向け)Yahoo Pipes のチューニング

前回のエントリではめんどくさくて結果だけにしちゃいましたが、一番言いたかったチューニングがあんまり注目されてないのでちゃんと書いてみます。

かなり面倒
Yahoo! Pipes の応答速度が結構遅くて、1箇所変更しては2?3秒待っては確認を繰り返す必要あり。根気が必要。

これ、私の場合は 20 秒でした。根気ってレベルじゃない。

ボトルネックは「Regex モジュール」

pipesエディタはよくできていて、選択した工程までの結果とかかった時間を表示してくれます。なのでどこがボトルネックなのかが一目瞭然です。
以下は上で紹介している「Yahoo! Pipes の Page Fetch モジュールでスクレイピングし放題」の「はてブ ブックマーク件数一括取得API」のpipesエディタ画面。

まずは Regex モジュールの前まで。

「Time taken: 0.377219s」と出てますね。

次にその次の Regex モジュールまで。

「Time taken: 1.56506s」と出ました。
処理数が多いとはいえ、普段から正規表現に触れている人間にとっては意味がわからない数字です。

Regex モジュールの代わりに Loop モジュール + String Regex モジュールを試してみる

他人が作った pipes をコピーして自分の pipes を作れるのも Yahoo Pipes のいいところの一つです。前回のエントリで効果があった「Regex モジュールをやめて Loop モジュール + String Regex モジュールに書き直す」を、これに適用してみます。

先程と同じように Regex モジュールの前まで。

「Time taken: 0.279237s」と出てますね。ここまではオリジナルと全く同じなので秒数の違いは気にしないでください。問題なのは次の工程との差です。

次にその次の Loop モジュール + String Regex モジュールまで。Loop モジュールは一つの項目しか処理できないのでここでは title のみの変換になります。

「Time taken: 0.3212s」です。その差「0.041963s」。この後に link、description の変換が続きますが、それを合わせても 0.2 秒弱で、普段から正規表現に触れている人間にとっても納得の数字です。

いいことばかりか? Loop + String Regex

そんなことありません。

モジュール数が格段に多くなる

前述の通り、Loop モジュールは一つの項目しか処理できないので、項目の数だけモジュールが必要になり、ただでさえごちゃごちゃしやすい pipes が非常に煩雑なものになります。

Loop + String Regex を使うとモジュールを選択する度に結果が Refresh される

Pipes のバグ*1。これはこのエントリを書いている最中に気付きました。
Regex モジュールの場合はモジュール選択時に前回の結果をそのまま表示するだけなのですが、Loop + String Regex だと内容を変更していないのにもかかわらず毎回結果を更新してしまいます。

追記
モジュールの組み方でこの現象が起こらない場合もあるようです。うん、やっぱりバグっぽい。

起こる方
Copy of はてブ ブックマーク件数一括取得API
起こらない方
Copy of はてブ ブックマーク件数一括取得API 2

つーか 1 秒や 2 秒でなにごちゃごちゃ言ってんの?

全くその通りです。

じゃあ何のために書いたの?

pipes の開発者にとどけー」と思いました。Regex モジュールが改善されればみんな幸せ!

  • -

正規表現を変えるだけで劇的に早くなることがあります

言い忘れてました。
前回のエントリに書いたように、正規表現を見直すだけで 20 秒が数秒になりました。あと、Regex モジュールではオプションを何も付けない方が早そうです。(sオプションを外して「[\s\S]*」に変えるだけでも早くなる)

*1:と言っておくと一晩で直ってそうな気がする