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

有帮助吗?

解决方案

下面的代码应该可以工作。

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

你还应该看看 search.cpan.org 上的 URI 页面.

其他提示

刚刚发生过 本文 其中指出了 Perl 的 Redhat/Centos/Fedora 实现中的缺陷,这些缺陷影响了 URI 深刻地。

如果您正在运行这些 Linux 版本之一,您可能需要从原始源代码(而不是 RPM 源代码)重新编译 Perl。

我意识到任何在 Redhat 5.2、Centos 5.2 或 Fedora 9 上使用发行版 perl 解释器运行 perl 代码的人都可能是受害者。是的,即使您的代码不使用花哨的祝福/重载习惯用法,许多 CPAN 模块也会这样做!谷歌搜索显示有 1500 多个模块使用 bless/overload 习惯用法,其中包括一些非常流行的模块,例如 URI、JSON。...

...此时,我决定从源代码重新编译 perl。错误消失了。差异是惊人的。一切都变得非常快。CPU 在平均负载低于 0.10 时变得寒冷,而我们处理数据的速度提高了 100 倍到 1000 倍!

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

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

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

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

也许我拿错了方向,但我不会,

$full_url = $base_url . $relative_url

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

@lennysan 啊当然是的。抱歉我无能为力,我的 Perl 已经很生疏了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top