从相对URL(给定基本URL)确定完整URL的最快方法是什么

时间:2020-03-05 18:43:01  来源:igfitidea点击:

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

解决方案

回答

也许我走错了路,但是不会,

$full_url = $base_url . $relative_url

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

@lennysan啊,当然可以。抱歉,我帮不上忙,我的Perl非常生锈。

回答

下面的代码应该工作。

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

我们还应该查看search.cpan.org上的URI页面。

回答

布伦丹,我应该澄清一下,我不能保证相对路径会是什么样子。这可能非常棘手(例如,在前面加斜杠,不加斜杠,并带有" ../"等)。

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

回答

刚刚发生在本文中的所有文章指出了Perl的Redhat / Centos / Fedora实现中的缺陷,这些缺陷会深深地影响URI。

如果运行的是这些Linux操作系统之一,则可能需要从原始源(而不是RPM源)重新编译Perl。

I realized that anyone running perl code with the distribution perl interpretter on Redhat 5.2, Centos 5.2 or Fedora 9 is likely a victim. Yes, even if your code doesn’t use the fancy bless/overload idiom, many CPAN modules do!  This google search shows 1500+ modules use the bless/overload idiom and they include some really popular ones like URI, JSON. ...
  
  ... At this point, I decided to recompile perl from source.  The bug was gone.  And the difference was appalling.  Everything got seriously fast.  CPUs were chilling at a loadavg below 0.10 and we were processing data 100x to 1000x faster!

回答

可能取决于我们如何获得那两个字符串。 URI :: URL或者类似的库中可能是安全,防火的方法,其中将考虑所有替代方法,包括恶意的替代方法。也许速度较慢,但​​是在某些环境中,子弹的速度会更快。

但是,如果我们希望那里有一些简单而不棘手的内容,那么可以看看它是否以/、../的链或者任何其他字符开头。第一个将服务器名称+ URL,第二个从基本uri直到进入其他2个替代方法之一的路径,或者仅将其添加到基本url。