标签: webassembly

WebAssembly LinkError 模块 =“env”

我正在web assembly.org上运行该教程,现在我想hello.wasm从我自己的页面运行该教程。我正在按照教程的说明使用Emscripten编译代码。

按照我正在做的这些说明进行操作:index.html

const instantiate = (bytes, imports = {}) =>
  WebAssembly.compile(bytes).then(m =>
    new WebAssembly.Instance(m, imports)
  )

fetch('hello.wasm')
  .then(response => response.arrayBuffer())
  .then(bytes => instantiate(bytes, {}))
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

范围误差

所以我尝试使用MDN 文档WebAssembly.instantiate()中的以下代码:

const instantiate = (bytes, imports = {}) =>
  WebAssembly.compile(bytes).then(m =>
    WebAssembly.instantiate(m, imports)
  )
Run Code Online (Sandbox Code Playgroud)

我得到了一个不同的:

链接错误

知道如何修复它吗?

javascript webassembly

4
推荐指数
1
解决办法
5414
查看次数

WebAssembly 实例:调用导出函数时的 Javascript 行为

当我调用 WebAssembly 模块实例的导出函数时,Javascript 和 WebAssembly 如何交互?

instance = WebAssembly.instantiate(bytes)
result = instance.exports.myFunction()
Run Code Online (Sandbox Code Playgroud)

如果 .wasm 实例进入无限循环会发生什么?控制权最终会被转移回调用它的 JavaScript 函数吗?

javascript webassembly

4
推荐指数
1
解决办法
152
查看次数

如何使用 Go 从磁盘读取文件并将其传递给 WebAssembly?

<input type="file">具体来说, Go中如何连接这个函数呢?我知道有“syscall/js”包,但我没有找到任何文件读取的示例。

func parseCSVFile(filePath string) []LabelWithFeatures {
    fileContent, _ := ioutil.ReadFile(filePath)
    lines := bytes.Split(fileContent, newline)
    numRows := len(lines)

    labelsWithFeatures := make([]LabelWithFeatures, numRows-2)

    for i, line := range lines {
        // skip headers
        if i == 0 || i == numRows-1 {
            continue
        }
        labelsWithFeatures[i-1] = NewLabelWithFeatures(bytes.Split(line, comma))
    }
    return labelsWithFeatures
}
Run Code Online (Sandbox Code Playgroud)

javascript go webassembly

4
推荐指数
1
解决办法
3961
查看次数

多线程 WebAssembly 在浏览器中比单线程慢,为什么?

几年没有使用 Emscripten 后,我最近发现它现在支持将多线程 C++ 代码编译为 WebAssembly。我已经编写了简单的合并排序代码,可以对 1000 万个浮点进行排序(本机代码可以轻松地对更多浮点进行排序,但浏览器似乎将您限制为 1GB 内存):

https://github.com/bsergeev/MtMergeSort

令人惊讶的是,虽然这段代码编译为 WebAssembly 并在 Chrome 中运行,但由于使用了多个线程,浏览器中的排序速度变得越来越慢(而单线程性能,正如预期的那样,是本机性能的 1.5...2 倍:本机代码1.80 秒,WebAssembly 3.1...3.3 秒,JavaScript 4.69 秒):

x64、WebAssembly 和 JavaScript 的比较

多线程性能下降是否是由于浏览器限制 WebWorkers 造成的?那么 WebAssembly 中的多线程有什么意义呢?

c++ multithreading emscripten webassembly

4
推荐指数
1
解决办法
2257
查看次数

在浏览器中运行 C# dll 仅用于计算

我有 fin 的 C# 代码。计算,我想在浏览器中运行它。我研究了 Blazor,但我能找到的所有示例都集中在 ASP.NET 上,而我想下载 .dll 或 .wasm 文件并从我现有的 Web 应用程序(用 Typescript 编写)执行它。我正在寻找这样的例子。

dll webassembly blazor

4
推荐指数
1
解决办法
1658
查看次数

Blazor WebAssembly 会使用 Mono 还是 .Net Core 3.1?

由于 Microsoft 表示 Blazor WebAssembly 是 .Net Core 3.1 的预览版(请参阅该页面),这是否意味着 Blazor Web Assembly 中的 Mono 被 .Net Core 3.1 取代?

webassembly blazor .net-core-3.0 blazor-client-side

4
推荐指数
1
解决办法
1539
查看次数

从 emscripten 读取用户提供的大文件,一次读取一大块

我正在寻找一个 API,它可以让我一次读取通过(或允许从浏览器访问用户文件的任何其他方法)块提供的文件。我正在读取大文件,所以我不想将整个文件加载到内存中。

我的用例是,我正在使用用 emcc 编译的 ffmpeg 库,但我不想用它来处理多媒体文件。我可以实现自己的 AVIOContext,但要做到这一点,我需要相当于 C 函数 fread 和 fseek。

我正在查看具有 WORKERFS 文件系统类型的 FS API,但我不清楚是否可以使用 DOM 中的文件对象从工作线程挂载它。

file-io emscripten html5-filesystem webassembly

4
推荐指数
1
解决办法
1624
查看次数

直接从 WebAssembly 操作画布字节

我是 Rust 和 WebAssembly 的初学者。我试图找到一种方法来canvas考虑性能的元素。

为了canvas利用 Rust 和 WebAssembly,我通常会找到一些示例,其中他们将使用浏览器的CanvasRenderingContext2D界面并在其上绘制将从 WASM 接收的数据

const canvasContext = canvasElement.getContext("2d");
const canvasImageData = canvasContext.createImageData(width, height);
const imageDataArray = getWasmImageDataArray()
canvasImageData.data.set(imageDataArray);
canvasContext.clearRect(0, 0, width, height);
canvasContext.putImageData(canvasImageData, 0, 0);
Run Code Online (Sandbox Code Playgroud)

来源:https : //wasmbyexample.dev/examples/reading-and-writing-graphics/reading-and-writing-graphics.rust.en-us.html

有一些变体,他们将canvasAPI绑定到 Rust 并在 Rust / WebAssembly 中执行操作,但尽管如此,他们总是使用CanvasRenderingContext2DAPI 在画布上绘制。

这当然意味着 Rust / WebAssembly 会通过浏览器的canvasAPI往返到画布显示缓冲区,这意味着性能下降。

我想知道是否还有另一种方法:是否可以将画布显示的像素的缓冲区直接绑定到 Rust 并直接操作该缓冲区以更改画布显示的内容?有点像这样(伪代码)

Rust 伪代码:

// Makes whole canvas black
drawOnCanvasDisplayBuffer(displayBuffer) {
  for(i = 0; i < displayBuffer.width; i++) …
Run Code Online (Sandbox Code Playgroud)

canvas rust webassembly

4
推荐指数
1
解决办法
938
查看次数

(string[] args) 如何在 Blazor WebAssembly 应用程序中传递给 Program.Main?

Program.MainBlazor WASM 应用程序中的方法具有string[] args参数。ASP.NET Core 主机站点是否可以将参数传递给这些?在构建应用程序之前,我需要能够从服务器读取值。

webassembly blazor

4
推荐指数
2
解决办法
391
查看次数

如何告诉 Blazor Webassembly 网站的访问者他们的浏览器不支持 Webassembly?

我尝试了 Blazor Webassembly。我在 Visual Studio 中创建了一个新的 Blazor Webassembly 项目。这为我们提供了一个基本的示例项目,其中包含可以通过单击增加的计数器,获取一些数据的页面,......

当我在最新版本的 Firefox 中运行它时,它运行良好。

但后来我想:当我在不支持 Webassembly 的旧版 Firefox 中运行它时会发生什么?例如 2017 年的 Firefox 50。

它只是显示了这一点。它不加载。没有其他事情发生:

在此处输入图片说明

查看 WebConsole 我发现了这个:

在此处输入图片说明

因此,Blazor Webassembly 应用程序知道它无法在该浏览器中运行,但不会告诉访问者。我们是否有一种简单的方法可以告诉用户问题是什么(也许指定一个替代的 HTML 文件)而不是撒谎说某些东西是“正在加载...”?

c# browser webassembly blazor blazor-webassembly

4
推荐指数
1
解决办法
246
查看次数