主要观点:正确解析 URL 很难,WHATWG 的 URL 规范虽有助于标准化但未普及;Python 中内置的urllib
模块不符合任何 URL 规范;Ada 项目是新的遵循 WHATWG 规范且快速的 URL 解析库,有 Python 绑定但性能有提升空间;can_ada 是新的 Python 绑定,使用 pybind11 生成代码更快且绑定定义简洁可读,已提供多个 Python 版本的二进制构建。
关键信息:
- URL 定义自 1994 年以来有很大演变,WHATWG 规范虽有帮助但不通用。
urllib
模块存在多年但不符合 RFC3986 或 WHATWG 规范,且因依赖众多项目难有重大改变。- Ada 项目 2024 年创建,解析速度快,Node.js 18 起使用,其 Python 绑定 ada-python 基于 CFFI 性能有损失。
- can_ada 用 pybind11 生成代码,比 ada-python 快约 2 倍,比
urllib.parse
快约 4 倍,代码简洁可读,可通过 pip 安装。
重要细节:
- 浏览器能接受含数千个斜杠的 URL,但规范不应如此。
urllib
模块的测试用例可反映其解析行为。- Ada 解析 7 个 URL 耗时约为 cURL 的 1/7。
- can_ada 的性能测试数据及对比情况。
- can_ada 的安装方式及示例代码展示正确解析的域名和路径。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。