【发布时间】:2021-04-13 11:01:39
【问题描述】:
我希望能够编写一个非常小的 Rust 包并将其编译为wasm,从而能够读取系统 RAM/CPU 资源。
这是因为 PC 的浏览器保护吗?
我可以使用依赖 sysinfo 依赖并在 Rust 中运行它没有问题,但是一旦编译成 wasm,这些值就不再可用。他们只是以0 的身份返回。
use sysinfo::SystemExt;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = console)]
fn log(s: String);
}
#[wasm_bindgen]
pub fn specs() {
let mut system = sysinfo::System::new();
// First we update all information of our system struct.
system.refresh_all();
// And finally the RAM:
let total_ram = system.get_total_memory();
let used_ram = system.get_used_memory();
let available_ram = total_ram - used_ram;
log(format!("Total memory: {} kB", total_ram)); <--- Work in Rust but return 0 in wasm
log(format!("Used memory: {} kB", used_ram)); <--- Work in Rust but return 0 in wasm
log(format!("Available memory: {} kB", available_ram)); <--- Work in Rust but return 0 in wasm
}
【问题讨论】:
-
WASM 对系统的访问仅限于运行时提供的任何内容。通常,这意味着它无法访问在浏览器中运行的 Javascript 无法访问的任何内容。您可以查看
web_sys和js_sys之类的 crate,了解 WASM 可用的内容。直接回答您的问题:不,浏览器不提供系统信息,即使提供了,sysinfocrate 也不兼容浏览器环境。
标签: javascript rust webassembly rust-cargo wasm-bindgen