7个版本 (2个稳定版)
1.1.0 | 2024年3月1日 |
---|---|
1.0.0 | 2024年1月14日 |
0.2.4 | 2023年12月24日 |
0.2.3 | 2023年10月23日 |
0.1.0 | 2023年3月27日 |
#10 in WebAssembly
每月下载量 929,655
用于 1,986 个crate (104个直接使用)
42KB
457 行
web-time
描述
完全替换std::time
,适用于浏览器。
目前,当使用wasm32-unknown-unknown
目标时,Instant::now()
和SystemTime::now()
将直接 panic。此实现使用Performance.now()
为Instant
和Date.now()
为SystemTime
提供一个即插即用的替代品,适用于浏览器。
同时,当不使用wasm32-unknown-unknown
目标时,该库将简单地重导出std::time
,并且不会引入任何依赖。
此外,如果使用target-feature = "atomics"
进行编译,它将同步时间戳以处理不同的上下文,如web workers。更多信息请参阅Performance.timeOrigin
。
使用-Ctarget-feature=+nontrapping-fptoint
将提高Instant::now()
和SystemTime::now()
的性能,但绝大多数时间仍然花费在通过JS上。
目标
这个库专门针对支持Performance.now()
的浏览器,使用wasm32-unknown-unknown
目标。Emscripten不支持。WASI不需要支持,因为它有自己的本地API来处理std::time
。
此外,它依赖于wasm-bindgen
,这是必需的。该库将继续依赖于它,直到出现可行的替代方案,届时可能支持多个生态系统。
注意
睡眠中的计时
目前一个已知的bug影响到了除Windows之外的操作系统上的浏览器。这个bug阻止了Instant
在上下文处于睡眠状态时继续计时。这并不一定与Rust对Instant
的要求冲突,但仍可能是不预期的。
有关更多信息,请参阅MDN文档。
上下文支持
Instant::now()
的实现依赖于Performance
对象的存在,其缺失将导致panic。这可能会在从worklet
调用时发生。
用法
您可以直接导入所需的类型
use web_time::{Instant, SystemTime};
let now = Instant::now();
let time = SystemTime::now();
功能
serde
为SystemTime
实现serde::Deserialize
和serde::Serialize
。
MSRV
由于这个库严重依赖于wasm-bindgen
,因此MSRV依赖于它。在撰写本文时,MSRV为1.60。
替代方案
instant 是一个流行的替代方案!然而,它实现的API与std::time
不完全匹配。
变更日志
有关详细信息,请参阅变更日志文件。
贡献
有关详细信息,请参阅贡献文件。
归属
灵感来源于instant项目。
从time项目中获得了额外的见解。
许可证
根据以下任何一个许可证授权:
- Apache许可证第2版(LICENSE-APACHE或http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
版权
代码和文档的大部分内容来自std::time
。有关许可证信息,请参阅#License。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~0–350KB