#time #performance #replace #consider #native #alias

instant

未维护,请考虑使用 web-time 代替 - 用于 WASM 的 std::time::Instant 的部分替代品

14 个版本

0.1.13 2024年5月17日
0.1.12 2021年10月18日
0.1.11 2021年9月23日
0.1.10 2021年7月11日
0.1.1 2019年4月9日

#3 in WebAssembly

Download history 929559/week @ 2024-05-03 956793/week @ 2024-05-10 1032769/week @ 2024-05-17 988854/week @ 2024-05-24 1111062/week @ 2024-05-31 1088787/week @ 2024-06-07 1055570/week @ 2024-06-14 1132337/week @ 2024-06-21 1042821/week @ 2024-06-28 1045536/week @ 2024-07-05 1110478/week @ 2024-07-12 1160325/week @ 2024-07-19 1125362/week @ 2024-07-26 1126928/week @ 2024-08-02 1194265/week @ 2024-08-09 928773/week @ 2024-08-16

每月 4,591,952 次下载
9,309 个 crate (193 直接使用) 中使用

BSD-3-Clause

17KB
217

Instant

此 crate 已停止维护。请考虑创建分支或使用 web-time 代替。或者如果您有兴趣接管其维护,请与我们联系。

如果您在 WASM 平台上调用 std::time::Instant::now(),则会引发 panic。此 crate 为 std::time::Instant 提供了部分替代品,它也适用于 WASM。这定义了类型 instant::Instant,它是

  • 当您针对 wasm32-unknown-unknownwasm32-unknown-asmjs 并启用了 stdwebwasm-bindgen 功能时,模拟 std::time::Instant 行为的结构。这种模拟基于 JavaScript 的 performance.now() 函数。
  • 否则为 std::time::Instant 的类型别名。

请注意,即使启用了 stdwebwasm-bindgen 功能,只要您不是针对 wasm32,此 crate 仍将继续依赖于 std::time::Instant。这允许编写可在原生和 WASM 平台上运行的通用代码。

此 crate 还导出函数 instant::now(),它以毫秒为单位以平台无关的方式返回当前时间的表示,类型为 f64instant::now() 将返回

  • 在编译具有 stdwebwasm-bindgen 功能的 WASM 平台或使用自定义 JavaScript 函数时,请调用 performance.now()
  • nativenon-WASM 平台上返回自 Unix Epoch 以来经过的时间。

注意:旧功能 now 已弃用。 instant::now() 总是导出,而 now 功能标志不再有任何效果。它仍然列在 Cargo.toml 中,以避免引入破坏性更改,并可能在未来的版本中被移除。

示例

在原生平台上使用 instant

Cargo.toml:

[dependencies]
instant = "0.1"

main.rs:

fn main() {
    // Will be the same as `std::time::Instant`.
    let now = instant::Instant::now();
}

在 WASM 平台上使用 instant

此示例显示了 stdweb 功能的使用。使用 wasm-bindgen 也会类似。

Cargo.toml:

[dependencies]
instant = { version = "0.1", features = [ "stdweb" ] }

main.rs:

fn main() {
    // Will emulate `std::time::Instant` based on `performance.now()`.
    let now = instant::Instant::now();
}

在无法使用 performance.now() 的 WASM 平台上使用 instant

此示例显示了 inaccurate 功能的使用。

Cargo.toml:

[dependencies]
instant = { version = "0.1", features = [ "wasm-bindgen", "inaccurate" ] }

main.rs:

fn main() {
    // Will emulate `std::time::Instant` based on `Date.now()`.
    let now = instant::Instant::now();
}

在任何启用功能传递的平台中使用 instant

Cargo.toml:

[features]
stdweb = [ "instant/stdweb" ]
wasm-bindgen = [ "instant/wasm-bindgen" ]

[dependencies]
instant = "0.1"

lib.rs:

fn my_function() {
    // Will select the proper implementation depending on the
    // feature selected by the user.
    let now = instant::Instant::now();
}

使用 instant::now()

Cargo.toml:

[features]
stdweb = [ "instant/stdweb" ]
wasm-bindgen = [ "instant/wasm-bindgen" ]

[dependencies]
instant = "0.1"

lib.rs:

fn my_function() {
    // Will select the proper implementation depending on the
    // feature selected by the user.
    let now_instant = instant::Instant::now();
    let now_milliseconds = instant::now(); // In milliseconds.
}

在没有 stdwebwasm-bindgen 的情况下使用功能 now

Cargo.toml:

[dependencies]
instant = "0.1"

lib.rs:

fn my_function() {
    // Will use the 'now' javascript implementation.
    let now_instant = instant::Instant::now();
    let now_milliseconds = instant::now(); // In milliseconds.
}

javascript WASM 绑定文件:

function now() {
	return Date.now() / 1000.0;
}

依赖项

~0–2.6MB
~48K SLoC