4

我目前正在使用该模块URI::URL从相对 URL 生成完整 URL;但是,它的运行速度并没有我希望的那么快。有谁知道另一种可能更快的方法?

4

5 回答 5

4

刚刚发生在这篇文章中,指出了 Perl 的 Redhat/Centos/Fedora 实现中影响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 倍!

于 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

Brendan,我应该澄清一下,我不能保证相对路径会是什么样子。这可能非常棘手(例如,前面有一个斜线,没有斜线,有“../”等)。

彼得,这就是我现在正在使用的。还是比使用 URI::URL->new($path)->abs 更快?

于 2008-08-25T21:40:11.280 回答
1

可能取决于您如何获得这两个字符串。URI::URL 或类似库中的安全、防火方法可能会考虑所有替代方案,包括恶意的替代方案。也许更慢,但在某些环境中,更快的是子弹射中你自己脚的速度。

但是,如果您期望有一些简单且不棘手的内容,可以查看它是否以 /、../ 链或任何其他字符开头。第一个将放置服务器名称+ url,第二个从基本 uri 切割路径,直到进入其他 2 个替代方案之一,或者只是将其添加到基本 url。

于 2008-08-28T04:05:38.747 回答
0

也许我弄错了棍子的一端,但不会,

$full_url = $base_url . $relative_url

工作?IIRC Perl 文本处理非常快。

@lennysan啊,当然可以。对不起,我帮不上忙,我的 Perl 很生锈。

于 2008-08-25T21:05:56.230 回答