`

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

url 
阅读更多

 

 

原文链接:http://blog.csdn.net/a491057947/article/details/20148783

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

URL 参数解析方法:

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

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

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

    Map<String, String> values = new HashMap<String, String>();  
    RequestUtil.parseParameters(values, query, "UTF-8");
    
  4. 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);  
        }  
    }
    
  5. 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 来解析。

参考链接

  1. 本测试的代码 https://gist.github.com/hellojinjie/5651936
  2. Tomcat RequestUtil 的代码http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/util/RequestUtil.java?view=markup
  3. 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
  4. 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
分享到:
评论

相关推荐

    java 版Url转换工具,可得到真实的URL

    Java URL转换工具是一种用于解析和处理URL的程序,它能够帮助开发者获取URL背后的真实地址,尤其是在面对重定向、参数编码等情况时。在Web开发中,URL(Uniform Resource Locator)是互联网资源的统一地址,它包含了...

    url rewrite 时,中文参数解决方法:用到的解码函数

    针对上述问题,我们可以编写一个自定义的解码函数`URLDecode`,该函数能够将经过编码的URL参数转换回原始的中文字符。下面将详细介绍此函数的实现细节。 #### 解码函数实现 ```vb Function URLDecode(enStr) Dim ...

    Mysql JDBC Url参数说明

    以下是一些常见的MySQL JDBC URL参数: 1. **user** 和 **password**: 指定连接数据库的用户名和密码,通常在连接字符串之外设置,以避免明文暴露。 ```text jdbc:mysql://localhost:3306/mydb?user=myusername...

    Js日历控件传递url参数

    总的来说,"Js日历控件传递url参数"涉及到客户端JavaScript的事件处理和URL操作,以及服务器端ASP的参数解析和数据库查询。通过这种技术结合,我们可以创建一个能够动态筛选内容的交互式日历,提供更个性化的浏览...

    jurl一个快速简单的URL解析Java库

    1. **快速解析**:`jurl`库设计时考虑了性能,它提供了快速的URL解析功能,可以高效地分解URL的各个组成部分,如协议、主机、端口、路径、查询参数等。 2. **UTF-8编码支持**:在处理URL时,字符编码是一个重要的...

    pb8888_GetURL_

    这通常涉及构造一个protobuf消息(包含请求参数),发送到Web服务的URL,然后接收并解析服务返回的响应。 5. **HTTP请求与响应**:在这个过程中,pb客户端会构建一个HTTP请求,可能包含POST或GET方法,以及必要的...

    三种网页之间传送参数的方法

    **概念解释**:QueryString是一种非常基础且常用的数据传递方式,它通过URL后面添加参数的形式来进行数据传输。这种方式简单易用,但是由于所有参数都明文显示在URL上,因此不太适合传递敏感信息。 **优点**: - ...

    js获取地址栏参数

    下面我们将基于上述基础知识,介绍几种常用的获取URL参数的方法: ##### 方法一:正则表达式匹配 这种方法是通过编写正则表达式来匹配URL中的特定参数。给出的示例代码正是采用这种方式: ```javascript function...

    行业文档-设计装置-一种基于URL地址改写的网页原版原貌展现方法.zip

    1. **URL重写的基本原理**:解释URL是如何被解析和处理的,以及如何通过服务器配置或编程来改变URL的显示形式。 2. **URL重写的重要性**:阐述优化URL对于用户体验、搜索引擎优化、网站可维护性等方面的好处。 3. ...

    javascritp添加url参数将参数加入到url中.docx

    ### JavaScript 添加 URL 参数知识点详解 在 Web 开发中,经常需要动态地修改 URL 地址中的查询参数。本文档详细介绍了如何使用 JavaScript 来添加或更新 URL 的查询参数,并提供了完整的示例代码。 #### 一、核心...

    postgresql参数解析

    以下是对"postgresql参数解析"的详细说明。 1. **服务器配置文件** PostgreSQL的主配置文件通常名为`postgresql.conf`,这是设置数据库服务器参数的主要途径。在描述中提到的`postgresql 参数注释.conf`可能是这个...

    Boost.URL是一个用于操作统一资源标识符(URI)和定位器(URL)的库。.zip

    7. **性能优化**: 由于直接操作内存结构而非字符串,Boost.URL库在处理大量URL时能提供良好的性能。 8. **错误处理**: 提供清晰的错误信息,帮助开发者快速定位和修复问题。 9. **代码示例和文档**: Boost.URL库...

    Flex程序如何获取html容器传递的URL参数值

    Flex,作为一种基于Adobe Flash的富互联网应用开发框架,能够创建高性能、跨平台的应用程序。然而,Flex程序如何从HTML容器中获取URL参数值,成为了一个重要的技术知识点。 ### Flex程序与HTML容器间的URL参数传递 ...

    URL重写URL重写URL重写URL重写

    URL重写是Web开发中的一种技术,主要用于优化和管理网站的URL结构,使其更符合搜索引擎优化(SEO)标准,提高用户体验,并便于服务器管理和应用程序处理。这个技术主要涉及到服务器配置、HTTP请求处理以及URL路径与...

    URL 重写类 url class

    标题 "URL 重写类 url class" 涉及的核心技术是 URL 重写,这是一种优化网站 URL 结构,使其更美观、更易读的方法。在网页开发中,URL 重写通常用于实现 SEO(搜索引擎优化)友好和用户友好的网址。通过 URL 重写,...

    JDBC连接数据库各种数据库参数大全

    以上介绍了如何使用Java通过JDBC连接不同类型的数据库,并详细解释了各个数据库连接的配置参数。在实际应用中,根据不同的数据库类型选择合适的驱动程序,并正确设置URL、用户名、密码以及其他连接参数是非常重要的...

    Nginx+lua通过url传参的方式实现动态代理

    本文将详细介绍如何利用Nginx结合Lua脚本来实现一个基于URL参数的动态代理系统。 #### 技术背景 - **Nginx**:是一款高性能的HTTP和反向代理Web服务器,同时也是IMAP/POP3/SMTP代理服务器。Nginx以其出色的稳定性...

    解析百度搜索结果link?url=参数分析 (全)

    通过比较不同搜索结果中这部分共享密文后的不同部分,可以推断出这些不同的部分可能对应着目标URL的不同字符。在例子中,`6427d385`似乎与`www.`这个域名前缀有固定的关系,表明可能每两个密文字符对应URL的一个...

    分页控件、存储过程 URL传参数

    文件“Common”可能是用于实现这些功能的通用代码或工具集,可能包含了分页逻辑、存储过程调用和URL参数解析的代码片段。 总之,掌握分页控件的实现、存储过程的运用以及URL参数的传递,是构建高效、安全且用户友好...

Global site tag (gtag.js) - Google Analytics