五种URL参数解析方法的性能比较

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

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

URLEncodedUtils.parse(query, Charset.forName("UTF-8"));
jettyUtil org.eclipse.jetty.util.UrlEncoded

MultiMapvalues = new MultiMap();  
UrlEncoded.decodeTo(query, values, "UTF-8", 1000);
tomcat org.apache.catalina.util.RequestUtil

Mapvalues = 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 的代码/catalina/util/RequestUtil.java?view=markup">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/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!

时间: 2025-01-01 22:55:34

五种URL参数解析方法的性能比较的相关文章

URL参数解析方法

这几天遇到这样一个需求,需要在不同页面之前传递参数,一般我们都是通过URL来传递,如下 window.open('test.html?id=123&name=456') 然后在新窗口的时候我们再用window.location.search方法获取?后面的参数内容,但是拿到的内容是"?id=123&name=456"这样的形式,我们还需要进行一系列的字符串处理才能拿到我们需要的信息,这样就比较麻烦一些了,所以我们就基于这个需求封装一个工具方法来把参数后面的内容解析成一个

封装一个方法:把URL参数解析为一个对象,来获取地址栏url里面的传递的参数。

URL参数解析 //获取url方法 //window.location.href // function getUrlkey(url){ var params = {}, arr = url.split("?"); if (arr.length <= 1) return params; arr = arr[1].split("&"); for(var i=0, l=arr.length; i<l; i++){ var a = arr[i].spl

把URL参数解析成一个Json对象

问题:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象.           eg:var obj=parseQueryString(url); 创建对象的三种形式:        一:                var Person=new Object();                Person.name="Sun";                Person.age=24;        二:         

百度URL参数解析

百度URL参数解析 在用Python爬取百度搜索的内容时,发现百度搜索的url非常的长,往往会跟一大段的参数,但其实很多参数都是没有必要的,如同样是搜索java关键字,可以通过 http://www.baidu.com/s?wd=java 如此简单的URL来获取,而下面这个超级复杂的URL也是同样进行了关键字java的搜索: http://www.baidu.com/s?wd=java&rsv_spt=1&rsv_iqid=0xd3c8c51900052eb3&issp=1&

数据库中的五种约束及其添加方法

数据库中的五种约束及其添加方法五大约束1.—-主键约束(Primay Key Coustraint) 唯一性,非空性 2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个 3.—-检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等) 4.—-默认约束 (Default Counstraint) 该数据的默认值 5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列五大

Javascript 获取链接(url)参数的方法

qa项目可能需要客户端获取到url的参数,搜到一个很好的解决方法,记录在博客,省得以后找麻烦. 方法一:分解链接的方式 <script type="text/javascript"> /* * 说明:Javascript 获取链接(url)参数的方法 */ function getQueryString(name) { // 如果链接没有参数,或者链接中不存在我们要获取的参数,直接返回空 if(location.href.indexOf("?")==-1

0428日重点:页面之间通过url参数的方法传递变量

1.一个页面里的变量,要传递给另一个页面,可通过把变量作为网址的url参数的方法传递,在另一个页面(接收页面)里,先获取到属性,然后放在隐藏的input里,然后表单提交! 1.传递页面的url里,把变量作为参数写进去 2. 接收页面,js获取url中的参数,并把参数放入隐藏的input里. 3.最后ajax的时候,把获取到的参数上传.

javascript:设置URL参数的方法,适合多条件查询

适用场景:多条件查询情况,如下图所示: 通过设置URL参数,再结合数据源控件设置的RUL参数,就能进行简单的多条件查询了. javascript函数: <mce:script type="text/javascript"><!-- //设置URL参数的方法 function setParmsValue(parms, parmsValue) { var urlstrings = document.URL; var args = GetUrlParms(); var va

转:使用jquery获取url以及jquery获取url参数的方法

转:使用jquery获取url以及jquery获取url参数的方法 使用jquery获取url以及jquery获取url参数的方法