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
每月 4,591,952 次下载
在 9,309 个 crate (193 直接使用) 中使用
17KB
217 行
Instant
此 crate 已停止维护。请考虑创建分支或使用 web-time
代替。或者如果您有兴趣接管其维护,请与我们联系。
如果您在 WASM 平台上调用 std::time::Instant::now()
,则会引发 panic。此 crate 为 std::time::Instant
提供了部分替代品,它也适用于 WASM。这定义了类型 instant::Instant
,它是
- 当您针对
wasm32-unknown-unknown
或wasm32-unknown-asmjs
并启用了stdweb
或wasm-bindgen
功能时,模拟 std::time::Instant 行为的结构。这种模拟基于 JavaScript 的performance.now()
函数。 - 否则为
std::time::Instant
的类型别名。
请注意,即使启用了 stdweb 或 wasm-bindgen 功能,只要您不是针对 wasm32,此 crate 仍将继续依赖于 std::time::Instant
。这允许编写可在原生和 WASM 平台上运行的通用代码。
此 crate 还导出函数 instant::now()
,它以毫秒为单位以平台无关的方式返回当前时间的表示,类型为 f64
。 instant::now()
将返回
- 在编译具有 stdweb 或 wasm-bindgen 功能的 WASM 平台或使用自定义 JavaScript 函数时,请调用
performance.now()
。 - 在 native、non-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.
}
在没有 stdweb
或 wasm-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