4

現在、このモジュールURI::URLを使用して、相対 URL から完全な URL を生成しています。ただし、希望どおりの速度で実行されていません。これを行う別の方法を知っている人はいますか?

4

5 に答える 5

4

深刻な影響を与えるPerlのRedhat/Centos/Fedora実装の欠点を指摘するこの記事に偶然出くわしましURIた。

これらのLinuxフレーバーのいずれかを実行している場合は、元のソース(RPMソースではない)からPerlを再コンパイルすることをお勧めします。

Redhat 5.2、Centos 5.2、またはFedora9で配布perlインタープリターを使用してperlコードを実行している人は誰でも被害者になる可能性が高いことに気付きました。はい、あなたのコードが派手なbless / overloadイディオムを使用していなくても、多くのCPANモジュールは使用しています!このグーグル検索は、1500以上のモジュールがbless / overloadイディオムを使用しており、URI、JSONなどの非常に人気のあるモジュールが含まれていることを示しています。..。

...この時点で、私はソースからperlを再コンパイルすることにしました。バグはなくなりました。そして、その違いは恐ろしいものでした。すべてが真剣に速くなりました。CPUは0.10未満のloadavgで冷却され、データを100倍から1000倍速く処理していました。

于 2008-08-26T13:15:32.077 に答える
3

次のコードは機能するはずです。

$uri = URI->new_abs( $str, $base_uri )

search.cpan.org の URI ページも参照してください。

于 2008-08-25T21:33:37.240 に答える
1

これらの2つの文字列を取得する方法に少し依存する可能性があります. おそらく、それを行うための安全で耐火性のある方法は、悪意のあるものを含むすべての代替手段が考慮されるURI::URLまたは同様のライブラリにあるものです. 遅いかもしれませんが、一部の環境では、自分の足に弾丸が当たる速度の方が速くなります。

しかし、あなたが何か単純でトリッキーではないものを期待しているなら、それが/、../のチェーン、または他の文字で始まるかどうかを見ることができます. 1 つ目はサーバー名 + URL、2 つ目はベース URI から他の 2 つの選択肢のいずれかに到達するまでのチョップ パスを配置するか、単にベース URL に追加します。

于 2008-08-28T04:05:38.747 に答える
1

ブレンダン、私は相対パスがどのように見えるかを保証できないことを明確にするべきでした. かなりトリッキーな場合があります (たとえば、先頭にスラッシュがある、スラッシュがない、"../" があるなど)。

ピーター、それは私が今使っているものです。それとも、URI::URL->new($path)->abs を使用するよりも高速ですか?

于 2008-08-25T21:40:11.280 に答える
0

おそらく私は棒の端を間違えたのでしょうが、そうではありませんでした。

$full_url = $base_url . $relative_url

仕事?IIRC Perl のテキスト処理は非常に高速です。

@lennysanああ、もちろんそうです。申し訳ありませんが、どうしようもありません。私の Perl はかなり錆びています。

于 2008-08-25T21:05:56.230 に答える