相対 URL (ベース URL が与えられた場合) から完全な URL を決定する最速の方法は何ですか?
-
09-06-2019 - |
質問
現在モジュールを使用しています URI::URL
相対 URL から完全な URL を生成します。ただし、思ったほど速く動作しません。これをより速く行う別の方法を知っている人はいますか?
解決
他のヒント
たまたま通りかかっただけ この記事 Redhat/Centos/Fedora の Perl 実装の欠点を指摘しており、影響を及ぼします。 URI
深く。
これらの Linux フレーバーのいずれかを実行している場合は、元のソース (RPM ソースではなく) から Perl を再コンパイルすることをお勧めします。
Redhat 5.2、Centos 5.2、または Fedora 9 でディストリビューション Perl インタプリタを使用して Perl コードを実行している人は誰でも被害者である可能性が高いことに気づきました。はい、コードで派手な bless/overload イディオムが使用されていない場合でも、多くの CPAN モジュールは使用しています。この Google 検索では、1500 を超えるモジュールが bless/overload イディオムを使用していることが示されており、その中には URI、JSON などの非常に人気のあるモジュールが含まれています。...
...この時点で、Perl をソースから再コンパイルすることにしました。バグは消えました。そしてその違いは驚くべきものでした。すべてが非常に速くなりました。CPU は、loadavg が 0.10 未満になると冷却され、データの処理速度は 100 倍から 1000 倍になりました。
ブレンダン、相対パスがどのようになるかは保証できないことを明確にするべきでした。それはかなり難しいかもしれません(例:先頭にスラッシュがある、スラッシュがない、「../」があるなど)。
ピーター、それは私が今使っているものです。それとも、URI::URL->new($path)->abs を使用するよりも速いですか?
これら 2 つの文字列を取得する方法に少し依存する可能性があります。おそらく、それを行うための安全で耐火性の高い方法は、URI::URL または同様のライブラリにあるものであり、悪意のあるものを含むすべての代替手段が考慮されます。おそらく遅いかもしれませんが、環境によっては弾丸が自分の足に当たる速度の方が速いでしょう。
ただし、/、../ のチェーン、またはその他の文字で始まるかどうかを、単純でトリッキーではない方法で確認できることを期待している場合は、1 番目はサーバー名 + URL を入力し、2 番目は他の 2 つの選択肢のいずれかに到達するまでベース URI からパスを切り取るか、単にベース URL に追加します。
もしかしたらスティックの端を間違えたかもしれないが、そうはしなかった、
$full_url = $base_url . $relative_url
仕事?IIRC Perl のテキスト処理は非常に高速です。
@レニーさん ああ、もちろんそうですよ。申し訳ありませんが、私の Perl はかなり錆びています。