8个重大版本
0.11.0 | 2024年6月4日 |
---|---|
0.9.0 | 2023年11月16日 |
0.5.0 | 2023年2月27日 |
0.4.0 | 2022年5月9日 |
0.3.0 | 2022年3月4日 |
#239 在 解析器实现
162 每月下载量
93KB
2.5K SLoC
DeltaChat消息解析器
在DeltaChat消息中解析链接、电子邮件地址、简单的文本格式(Markdown子集)、用户提及、标签等。
规范可以在 spec.md 中找到。
WASM演示: https://deltachat.github.io/message-parser/
背后的想法
在所有平台上都有相同丰富的消息解析。
基本想法是核心可以使用这个库将消息转换为AST格式,然后UI可以根据需要显示它,对于桌面,它将被转换为react元素。
桌面已经使用这个包(除了Markdown,因为在单个平台上只有Markdown没有意义)作为wasm模块(见
./message_parser_wasm
),以后这个可能会集成到DeltaChat核心中。
编码原则
- 许多 测试用例
- 目标是快速 - 因此也有基准测试以确保库足够快
建议
如果用于消息解析,不要解析超过 10 000
个字符大小的消息,以确保性能保持出色。(库可以并且应该支持更多,并且应该足够快,但在慢速设备上或转换到wasm或asmjs时限制它是合理的,以避免界面卡顿/冻结)
基准测试
cargo install cargo-criterion
基准测试
cargo criterion
基准测试文档:https://bheisler.github.io/criterion.rs/book/criterion_rs.html
更改CPU电源设置以获得一致的结果
这些天,大多数CPU根据某些规则改变其性能以节省电力。为了产生一致的基准测试结果,CPU性能必须在基准测试之间保持不变。有各种方法可以实现这一点。如果你有笔记本电脑,第一步可能是连接交流适配器,以确保你的笔记本电脑不会进入省电模式,从而改变CPU频率。下一步是改变CPU频率到一个常数值,该值不能超过CPU能处理的最大频率。因为CPU通常不能在所有核心上处理最大的可能频率。
在Linux上,你可以使用cpupower
实用程序来设置CPU频率
cpupower frequency-set --min 3500 --max 3500 # this to set maximum and minimum to the same value
cpupower frequency-set -f 3500 # set frequency explicitly if the kernel module is available
参考资料
- 有关在deltachat中引入markdown的旧讨论:[链接](https://github.com/deltachat/interface/pull/20)
- 论坛中对消息markdown的功能请求:[链接](https://support.delta.chat/t/markdown-support-in-chat/159)
表情符号助手
除了消息解析,这个crate还包含一些用于处理表情符号的有用函数。
parser::is_emoji::emoji
(仅限rust)- nom解析器,消耗一个表情符号- 想法:可能被核心用来过滤只有表情符号的反应
parser::is_emoji::get_first_emoji(text)
- 如果文本以表情符号开头,则获取第一个表情符号- 想法:可以被UI用来获取聊天名称的第一个表情符号以显示为文本头像
parser::is_emoji::count_emojis_if_only_contains_emoji(text)
- 在只包含表情符号的文本中计算表情符号- 对于jumbomoji逻辑很有用(如果你只发送带有表情符号的短消息,表情符号会以更大的尺寸显示)。
- 此函数不会在过长字符串上失败,因此为了保持良好的性能,请先检查长度,如果它太长,消息本身就不大,因此不需要调用此函数。
依赖项
~1.2–2MB
~41K SLoC