4 个版本 (稳定)
1.2.0 | 2019 年 6 月 3 日 |
---|---|
1.1.0 | 2019 年 5 月 16 日 |
1.0.0 | 2018 年 10 月 25 日 |
0.1.0 | 2018 年 10 月 25 日 |
#2331 在 解析器实现 中
75KB
468 行
更快的公共后缀域名解析。
该库的作用范围限于从公共后缀列表中找到给定域名的 tld+1。
方法
- 将公共后缀列表条目加载到内存中
- 将待解析的域的不可变、所有者值进行匹配
- 利用用户大小的 lru 缓存条目
目标
- 提供(主要是)符合规范的公共后缀域名解析。
- 避免在域名解析过程中进行分配。
- 尽可能将工作卸载到解析阶段。
- 避免引入可能带来不必要负担的依赖
- 输入不被修改,输出是输入的切片
注意事项
- 仍然依赖于 idna crate 进行 punycode 解析
- 我们不将任何内容转换为小写(为了性能我们忽略这一点)
环境变量
PUBLIC_SUFFIX_LIST_FILE=somefile
- 用文件名覆盖 public_suffix_list.dat
示例
lazy_static! {
static ref LIST: List = {
let list = List::parse_source_file("public_suffix_list.dat", 10_000_000);
list.expect("unable to parse PSL file")
};
}
...
fn foo() {
let domain = "abc.one.two.example.co.uk";
let tldp1 = LIST.parse_domain(domain);
assert_eq!(tldp1, Some("example.co.uk"));
}
待办事项
- 基准测试
依赖项
~2.5MB
~66K SLoC