我目前正在使用该模块URI::URL
从相对 URL 生成完整 URL;但是,它的运行速度并没有我希望的那么快。有谁知道另一种可能更快的方法?
5 回答
刚刚发生在这篇文章中,指出了 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 倍!
Brendan,我应该澄清一下,我不能保证相对路径会是什么样子。这可能非常棘手(例如,前面有一个斜线,没有斜线,有“../”等)。
彼得,这就是我现在正在使用的。还是比使用 URI::URL->new($path)->abs 更快?
可能取决于您如何获得这两个字符串。URI::URL 或类似库中的安全、防火方法可能会考虑所有替代方案,包括恶意的替代方案。也许更慢,但在某些环境中,更快的是子弹射中你自己脚的速度。
但是,如果您期望有一些简单且不棘手的内容,可以查看它是否以 /、../ 链或任何其他字符开头。第一个将放置服务器名称+ url,第二个从基本 uri 切割路径,直到进入其他 2 个替代方案之一,或者只是将其添加到基本 url。
也许我弄错了棍子的一端,但不会,
$full_url = $base_url . $relative_url
工作?IIRC Perl 文本处理非常快。
@lennysan啊,当然可以。对不起,我帮不上忙,我的 Perl 很生锈。