admin管理员组

文章数量:1579385

慎重使用正则表达式

上一讲,我在讲 String 对象优化时,提到了 Split() 方法,该方法使用的正则表达式可能引起回溯问题,今天我们就来深入了解下,这究竟是怎么回事?

开始之前,我们先来看一个案例,可以帮助你更好地理解内容。 在一次小型项目开发中,我遇到过这样一个问题。

为了宣传新品,我们开发了一个小程序, 按照之前评估的访问量,这次活动预计参与用户量 30W+,TPS(每秒事务处理量)最高 3000 左右。

这个结果来自我对接口做的微基准性能测试。我习惯使用 ab 工具(通过 yum -y install httpd-tools 可以快速安装)在另一台机器上对 http 请求接口进行测试。

我可以通过设置 -n 请求数 /-c 并发用户数来模拟线上的峰值请求,再通过 TPS、RT(每秒 响应时间)以及每秒请求时间分布情况这三个指标来衡量接口的性能,如下图所示(图中隐 藏部分为我的服务器地址):

就在做性能测试的时候,我发现有一个提交接口的 TPS 一直上不去,按理说这个业务非常简单,存在性能瓶颈的可能性并不大。

我迅速使用了排除法查找问题。首先将方法里面的业务代码全部注释,留一个空方法在这里,再看性能如何。这种方式能够很好地区分是框架性能问题,还是业务代码性能问题。

我快速定位到了是业务代码问题,就马上逐一查看代码查找原因。我将插入数据库操作代码 加上之后,TPS 稍微下降了。

但还是没有找到原因。最后,就只剩下 Split() 方法操作了, 果然,我将 Split() 方法加入之后,TPS 明显下降了。 可是一个 Split() 方法为什么会影响到 TPS 呢?下面我们就来了解下正则表达式的相关内容,学完了答案也就出来了。

 

什么是正则表达式?

很基础,这里带你简单回顾一下。 正则表达式是计算机科学的一个概念,很多语言都实现了它。正则表达式使用一些特定的元 字符来检索、匹配以及替换符合规则的字符串。 构造正则表达式语法的元字符,由普通字符、标准字符、限定字符(量词)、定位字符(边 界字符)组成。详情可见下图:

本文标签: 阿里巴巴慎重实战性能正则表达式