parse url php 效率_五种URL参数解析方法的性能比较

这篇博客对比了五种URL参数解析方法——httpclient、jettyUtil、tomcat、regex和split,在100000次解析操作中的性能。结果显示jettyUtil表现最优,而split和regex的效率较低。因此,推荐在项目中优先考虑使用jettyUtil进行URL解析。测试代码和相关库的源码链接也在文中给出。
摘要由CSDN通过智能技术生成

因为在最近项目中需要解析日志中的 URL 的参数,所以我对比了一下五种不同 的 URL 参数解析方法的性能。

URL 参数解析方法:

httpclient org.apache.http.client.utils.URLEncodedUtils

URLEncodedUtils.parse(query, Charset.forName("UTF-8"));

jettyUtil org.eclipse.jetty.util.UrlEncoded

MultiMap values = new MultiMap();

UrlEncoded.decodeTo(query, values, "UTF-8", 1000);

tomcat org.apache.catalina.util.RequestUtil

Map values = new HashMap();

RequestUtil.parseParameters(values, query, "UTF-8");

regex 正则表达式

String u = URLDecoder.decode(url, "UTF-8");

for (String s : parameters) {

Pattern p = Pattern.compile(s + "=([^&]*)(&|$)");

Matcher m = p.matcher(u);

if (m.find()) {

m.group(1);

}

}

split 使用String 的split 方法对 URL 进行分割,然后用equals 匹配对应的 参数

String u = URLDecoder.decode(url, "UTF-8");

for (String s : parameters) {

String[] a = new String[100];

if (u.indexOf(s) != -1) {

a = (u.substring(u.indexOf(s))).split("&");

a[0].split("=");

}

}

前三者是 httpclient, jetty, tomcat 使用的 URL 解析工具。Split 方法是最简单 也是最直观的解析方法,regex 则使用了正则表达式去匹配参数。

性能比较

用这五种方法分别解析同一个URL 100000遍,得到如下的数据。考虑到 Java 的代 码缓存特性,共运行4遍这样的测试,测试数据取最后一次的结果。

---first---

httpclient: 3063

jettyUtil: 1767

tomcat: 2405

regex: 9226

split: 22905

---second---

httpclient: 2766

jettyUtil: 1618

tomcat: 2229

regex: 9025

split: 23661

---third---

httpclient: 2799

jettyUtil: 1632

tomcat: 2251

regex: 8761

split: 23476

---fouth---

httpclient: 2989

jettyUtil: 1634

tomcat: 2251

regex: 8895

split: 23571

在最后一组数据中,我们可以看到 jettyUtil 的性能最高,split 和 regex 的方法性 能较差。

总结

jettyUtil 解析URL的性能在五种中最高,如果我们在项目中需要解析 URL ,应该 尽可能的考虑使用 jettyUtil 来解析。

参考链接

本测试的代码 https://gist.github.com/hellojinjie/5651936

Tomcat RequestUtil 的代码http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/RequestUtil.java?view=markup

jettyUtil UrlEncoded 的代码 http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java

httpclient URLEncodedUtils 的代码 https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0-beta1/module-client/src/main/java/org/apache/http/client/utils/URLEncodedUtils.java

来源:Heck's Blog

地址:http://www.hecks.tk/post/433/

转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值