Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析url查询时比较regexp和split的速度_Javascript_Python_Node.js - Fatal编程技术网

Javascript 解析url查询时比较regexp和split的速度

Javascript 解析url查询时比较regexp和split的速度,javascript,python,node.js,Javascript,Python,Node.js,我想确定什么是解析url查询值的最快节点。例如,hello.org/post.html?action=newthread&fid=32&fpage=1,如果我想获得fid值,我有3个选择: 1str.match(/[?/&]fid=(.*?)/) express中的2req.query.fid,我发现它实际上在调用https://github.com/ljharb/qs/blob/master/lib/parse.js,我发现它在后面使用了str.split('&') 3str.split('/

我想确定什么是解析url查询值的最快节点。例如,
hello.org/post.html?action=newthread&fid=32&fpage=1
,如果我想获得fid值,我有3个选择:

1
str.match(/[?/&]fid=(.*?)/)

express中的2
req.query.fid
,我发现它实际上在调用
https://github.com/ljharb/qs/blob/master/lib/parse.js
,我发现它在后面使用了
str.split('&')

3
str.split('/[&/#?]/')
然后使用
for
循环确定哪个以
fid开始

我猜第一个是最慢的,第二个是最快的。但我不知道它是否正确(尽管我可以做一个测试),但我确实想知道一些深层次的原因,谢谢。

1)regexp是高级字符串操作。对于解析时遇到的每个字符,它必须与整个regexp字符串中的每个标记匹配。复杂性是源长度和regexp字符串长度的非线性函数

2) 而字符串标记器(split)是在单个字符上进行的,当您依次遍历源字符串,“cut”并在遇到模式字符时对单词进行标记并向前移动时,任务显然被切断了。复杂度相当于n的数量级,其中n是字符串中的字符数

3) 实际上是(2)的变体,但在拆分器中有更多字符。因此,如果第一个字符匹配,则需要额外的工作来匹配后续的字符等。因此复杂性增加,并向regexp移动。性能仍然比regexp好,因为regexp需要进一步解释它自己的令牌


希望这有帮助。

因此速度是第二快,第一慢。谢谢你的解释。