以性能为中心替换python的urlparse模块

urlparse4的Python项目详细描述


urlparse4是以性能为中心的python替代品 {TT2} $模块,使用来自CL自己的URL解析器的C++代码。

它还没有准备好生产。

许多学分 gurl-cython用于 灵感。

与python的urlparse

不同

urlparse4应该是透明的直接替换 案例。不过,还有一些不同之处需要注意:

  • urlparse4对于大多数操作来说要快2-7倍(参见基准测试 下面)
  • urlparse4当前未通过cpython的test_urlparse.py 套件,因为Chromium的解析器管理不同的边缘情况 (通常根据RFC,后面不跟urlparse的 完全)。
  • urlparse4目前只支持Python2.7

如何测试

你必须安装并运行Docker。你可以运行cpython的测试 套房为urlparse,如下:

make docker_build
make docker_test

基准

我们正在测试下面的libraries,样本来自 闪烁和dmoz:

它们中的每一个都在几种不同类型的操作上进行测试 (基本urlslit、相对链接解析、主机名提取)

下面是如何启动测试:

make docker_build
make docker_benchmark

在2.2GHz Intel Core i7 Mbp上的当前结果(秒):

Benchmark results on 104300 URLs x 10 times, in seconds:

Name              Sum            Mean               Median             90%
----------------  -------------  -----------------  -----------------  -----------------

urlsplit:
----              ----           ----               ----               ----
urlparse4         1.681858       1.61251965484e-06  1.99999999984e-06  2.00000000006e-06
pygurl            2.031712       1.94795014382e-06  1.99999999984e-06  2.00000000028e-06
uritools          2.638991       2.53019271333e-06  2.00000000028e-06  3.00000000042e-06
yurl              3.910247       3.74903835091e-06  3.00000000131e-06  4.99999999981e-06
urlparse2         3.756782       3.60190028763e-06  2.99999999953e-06  4.00000000056e-06
urlparse          3.862006       3.70278619367e-06  3.00000000308e-06  4.99999999803e-06
cyuri             9.912275       9.50361936721e-06  8.00000000112e-06  1.30000000027e-05

urljoin_sibling:
----              ----           ----               ----               ----
urlparse4         2.008453       1.92565004794e-06  2.00000000206e-06  2.00000000206e-06
pygurl            2.193427       2.10299808245e-06  2.00000000206e-06  2.99999999953e-06
uritools          10.575344      1.01393518696e-05  9.99999999607e-06  1.20000000052e-05
yurl              13.213052      1.26683144775e-05  1.19999999981e-05  1.60000000022e-05
urlparse2         14.239327      1.36522790029e-05  1.19999999981e-05  1.69999999997e-05
urlparse          9.25991500001  8.87815436242e-06  8.00000000822e-06  1.10000000006e-05
cyuri             5.742724       5.50596740172e-06  5.00000000159e-06  7.00000001075e-06

hostname:
----              ----           ----               ----               ----
urlparse4         1.883982       1.80631064237e-06  1.99999999495e-06  2.00000000916e-06
pygurl            1.67332099999  1.60433461169e-06  1.99999999495e-06  2.00000000916e-06
uritools          3.31632199999  3.17959923297e-06  3.00000000664e-06  4.00000000411e-06
yurl              3.853319       3.69445733461e-06  3.00000000664e-06  4.00000000411e-06
urlparse2         4.641513       4.45015627996e-06  4.00000000411e-06  5.99999999906e-06
urlparse          5.122682       4.91148801534e-06  4.00000000411e-06  5.99999999906e-06
cyuri             11.108649      1.06506701822e-05  9.0000000057e-06   1.5999999988e-05

一些库包含在基准代码中,但对于 各种原因:

请随时提交请求以添加新请求!

反馈

我们很高兴听到你的反馈!请随意查看 github并在需要时打开新的:)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓软件包与java代码中的类型冲突   谷歌应用引擎Java还是Python?   如何将java bean传递到jsp页面,以便jqQrid使用json显示?   在编译kotlin代码时,kotlin编译器如何处理java代码?   java不准确地更改JTextPane中的文本颜色   反应式编程AWS SDK v2 SdkAsyncHttpClient使用Java 11 Java实现。网http HttpClient sendAsync   在Spring AMQP中,java根据队列的消费者计数来消费队列   java在ArrayList的add()方法中创建新对象会导致内存泄漏。我能做什么不同的事?   未将java BufferedReader特定行追加到字符串   用于聊天程序格式化的java JavaFX 2文本区   java如何从netbeans项目生成exexutable文件?   swing如何在Java中使用JButton操作调整JWindow的宽度和高度?   java有没有办法在spring boot中使用jasypt aes加密和解密?   java通过使用泛型如何将映射作为集合传递给方法?   java如何替换不推荐使用的构造函数DynamoDBMapperFieldModel