#instant #web #system-time #time

web-time

浏览器中Wasm的std::time的即插即用替代品

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

Download history 146187/week @ 2024-04-21 139453/week @ 2024-04-28 135889/week @ 2024-05-05 152614/week @ 2024-05-12 151462/week @ 2024-05-19 151563/week @ 2024-05-26 166184/week @ 2024-06-02 193019/week @ 2024-06-09 192558/week @ 2024-06-16 212741/week @ 2024-06-23 188348/week @ 2024-06-30 208823/week @ 2024-07-07 214986/week @ 2024-07-14 225320/week @ 2024-07-21 237668/week @ 2024-07-28 238406/week @ 2024-08-04

每月下载量 929,655
用于 1,986 个crate (104个直接使用)

MIT/Apache

42KB
457

web-time

Crates.io Version Live Build Status Docs.rs Documentation Main Documentation

描述

完全替换std::time,适用于浏览器。

目前,当使用wasm32-unknown-unknown目标时,Instant::now()SystemTime::now()将直接 panic。此实现使用Performance.now()InstantDate.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::Deserializeserde::Serialize

MSRV

由于这个库严重依赖于wasm-bindgen,因此MSRV依赖于它。在撰写本文时,MSRV为1.60。

替代方案

instant Crates.io是一个流行的替代方案!然而,它实现的API与std::time不完全匹配。

变更日志

有关详细信息,请参阅变更日志文件。

贡献

有关详细信息,请参阅贡献文件。

归属

灵感来源于instant项目。

time项目中获得了额外的见解。

许可证

根据以下任何一个许可证授权:

任选其一。

代码和文档的大部分内容来自std::time。有关许可证信息,请参阅#License

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~0–350KB