Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Websys而不是简单的旧JavaScript是否会提高性能?_Javascript_Rust_Webassembly_Wasm Bindgen - Fatal编程技术网

使用Websys而不是简单的旧JavaScript是否会提高性能?

使用Websys而不是简单的旧JavaScript是否会提高性能?,javascript,rust,webassembly,wasm-bindgen,Javascript,Rust,Webassembly,Wasm Bindgen,我使用wasm bindgen编写了一个非常基本的JS/wasm webapp,其中灰度变换(用Rust编写)应用于webapp用户通过上传并显示在中的图像 为此,我必须将图像加载到WebAssembly内存空间,对每个像素应用变换,然后在内存空间中返回结果,以便JS处理显示: import{memory}来自“img grayscale wasm/img_grayscale_wasm_bg”; 从“img灰度wasm”导入{MyImage} //... 异步函数processImg(文件、宽度

我使用
wasm bindgen
编写了一个非常基本的JS/wasm webapp,其中灰度变换(用Rust编写)应用于webapp用户通过
上传并显示在
中的图像

为此,我必须将图像加载到WebAssembly内存空间,对每个像素应用变换,然后在内存空间中返回结果,以便JS处理显示:

import{memory}来自“img grayscale wasm/img_grayscale_wasm_bg”;
从“img灰度wasm”导入{MyImage}
//...
异步函数processImg(文件、宽度、高度){
const canvas=document.getElementById(“像素灰度”);
var resp=wait fetch(file.name)
var bytes=await resp.arrayBuffer()
const myImage=myImage.new();
const ptr=myImage.alloc(byteLength字节);
//复制到内存空间
const imgArray=新的Uint8Array(memory.buffer,ptr,bytes.bytellength);
set(新的Uint8Array(字节));
//变换img
myImage.read_img(ptr,字节数,ByTeleLength)
const grayScalePtr=myImage.to_灰度(宽度、高度)
//从内存空间读取
const arr=new Uint8ClampedArray(memory.buffer、grayscaleptor、width*height*4);
设imageData=新的imageData(arr,宽度);
getContextFromCanvas(画布,宽度,高度).putImageData(imageData,0,0);
}
如果我使用
web sys
板条箱中定义的web API绑定,从
fetch
提取文件到显示灰度图片,我想我可以避免将内容来回复制到内存空间的整个过程


这就是我感到困惑的地方:就性能而言,使用
websys
及其web的API绑定而不是全部使用JavaScript有好处吗?嗯,我想是的,但它在哪里呢?

如果我理解正确的话,您现在正在使用浏览器方法来回整理数据,以享受
web sys
的荣耀。我有好消息和坏消息要告诉你

好消息是,如果您的代码按照您所说的方式进行布局(这是一个代码片段非常方便的地方),您将获得一个内存副本

目前,程序如下:

12
======>        =====>       \
浏览器WebWorker生锈||

谢谢你的回答。因此,这就意味着,在我的特殊情况下,使用
websys
/
webassembly
就像是过度设计了一些我可以完全用纯JS编写的东西,而不知道它是否有利于性能。对吧?这取决于你已经有多少锈了。你可以用JS编写整个程序,但是图像处理可以从SIMD中获得巨大的好处,这是(我想?)目前正在进行的工作。根据你正在去饱和的图像的大小,以及你正在运行它的计算机,这可能会或可能不会带来性能上的提升,所以你的答案是“可能”?@Shepmaster这还取决于他已经用rust写了多少东西——从外观上看,他用一些代码编辑了他的问题,所以我可以更精确!昨天没有代码和额外的精度。WebAssembly目前没有SIMD指令,这是测试版功能。我认为现在它总是过于工程化(我的意思是它引入了开销),如果您的主要目的是DOM操作,那么除了使用相同的锈迹之外,没有任何实际的好处。