如何使用单纯的`WebAssembly`

如何,使用,单纯,webassembly · 浏览次数 : 97

小编点评

**使用单纯的WebAssembly安装WebAssembly模板dotnet new install Microsoft.NET.Runtime.WebAssembly.Templates** 1. 创建一个新项目。 2. 在项目中添加一个新文件 named `main.js`。 3. 将以下代码添加到 `main.js` 中: ```js import { dotnet } from './dotnet.js' const { setModuleImports, getAssemblyExports, getConfig } = await dotnet.withDiagnosticTracing(false).withApplicationArgumentsFromQuery() .create();setModuleImports('main.js', { window: { location: { href: () => globalThis.window.location.href } } });const config = getConfig();const exports = await getAssemblyExports(config.mainAssemblyName);const text = exports.MyClass.Greeting();console.log(text);document.getElementById('out').innerHTML = text;await dotnet.run(); ``` 4. 在 `Program.cs` 中添加以下代码: ```csharp using System; using System.Runtime.InteropServices.JavaScript; using Microsoft.NET.Core.Runtime.WebAssembly; [JSExport] internal static string Greeting() { var text = $"Hello, World! Greetings from {GetHRef()}" ; Console.WriteLine(text); return text; } [JSImport("window.location.href", "main.js")] internal static partial string GetHRef() { return globalThis.window.location.href; } ``` 5. 在项目中构建项目。 6. 在 HTML 中创建一个 `#out` 元素并设置其 `id` 属性为 `out`: ```html ``` 7. 启动项目。 **效果:** 在运行项目之前,您可以看到一个名为 `Hello, World!` 的消息。 **注意:** * `main.js` 文件的命名必须为 `main.js`。 * `window.location.href` 属性将返回指向窗口的当前 URL。 * 此代码使用 MIT 许可协议。

正文

一般来说在.net core使用WebAssembly 都是Blazor ,但是Blazor渲染界面,.net core也提供单纯的WebAssembly这篇博客我将讲解如何使用单纯的WebAssembly

安装WebAssembly模板

dotnet new install Microsoft.NET.Runtime.WebAssembly.Templates

安装完成以后在vs的新建项目的时候会出现如图的模板

然后我们下一步创建一个WebAssembly的项目,WebAssembly的项目很单纯,项目结构如下图:

我们可以看到项目及其简单,分别查看文件代码

Program.cs

using System;
using System.Runtime.InteropServices.JavaScript;

Console.WriteLine("Hello, Browser!");

public partial class MyClass
{
    [JSExport]
    internal static string Greeting()
    {
        var text = $"Hello, World! Greetings from {GetHRef()}";
        Console.WriteLine(text);
        return text;
    }

    [JSImport("window.location.href", "main.js")]
    internal static partial string GetHRef();
}

main.js

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

import { dotnet } from './dotnet.js'

const { setModuleImports, getAssemblyExports, getConfig } = await dotnet
    .withDiagnosticTracing(false)
    .withApplicationArgumentsFromQuery()
    .create();

setModuleImports('main.js', {
    window: {
        location: {
            href: () => globalThis.window.location.href
        }
    }
});

const config = getConfig();
const exports = await getAssemblyExports(config.mainAssemblyName);
const text = exports.MyClass.Greeting();
console.log(text);

document.getElementById('out').innerHTML = text;
await dotnet.run();

index.html

<!DOCTYPE html>
<!--  Licensed to the .NET Foundation under one or more agreements. -->
<!-- The .NET Foundation licenses this file to you under the MIT license. -->
<html>

<head>
  <title>WebAssemblyDemo</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="modulepreload" href="./main.js" />
  <link rel="modulepreload" href="./dotnet.js" />
</head>

<body>
  <span id="out"></span>
  <script type='module' src="./main.js"></script>
</body>

</html>

这些代码及其简单,如果在遇到js性能瓶颈的时候就可以使用当前这种模式,使用单纯的WebAssembly去提高我们的产品性能

试试看执行一下程序,效果如下图:

与如何使用单纯的`WebAssembly`相似的内容:

如何使用单纯的`WebAssembly`

一般来说在.net core使用WebAssembly 都是Blazor ,但是Blazor渲染界面,.net core也提供单纯的WebAssembly这篇博客我将讲解如何使用单纯的WebAssembly 安装WebAssembly模板 dotnet new install Microsoft.N

【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?

问题一:迁移到云服务扩展后,之前经典版的云服务的部署槽会变成单一的部署槽,关于两个云服务扩展版之间的部署交换能否提供一个演示? 对于具有双槽的云服务(Classic),根据文档中的建议,在迁移到云服务(外延支持)时需要先删除过渡槽,将生产槽作为一个独立的云服务进行迁移。 在完成生产槽的迁移后,创建另

如何使用JavaScript实现在线Excel附件的上传与下载?

前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等。同样的,类比到Web端,现在很多人用的在线Excel是否也可以像本地一样实现附件文件的操作呢?答案是肯定的,不过和本地不同的是,Web端不会直接打开附件,而是使用超链接单

MongoDB 中的索引分析

MongoDB 的索引 前言 MongoDB 使用 B 树还是 B+ 树索引 单键索引 创建单键索引 使用 expireAfterSeconds 创建 TTL 索引 复合索引 最左匹配原则 ESR 规则 如何使用排序条件 多键索引 创建多键索引 局限性 哈希索引 注意事项 创建索引 总结 参考 Mo

《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(12)-Charles如何使用Repeat功能进行简单压力测试

1.前言 李四:“今天好累啊,点的我手指都疼了。我一直被要求给后端接口的同事重复发送请求来调试接口。” Charles:“哎呀,李四同学,你怎么能一条一条的手动发送呢 我可是有超级工具:负载测试。” 2.简介 Repeat英文的意思就是:重复,顾名思义:就是重复请求接口,可以单次请求,一次只请求一次

揭秘报表新玩法!标配插件不再单调,如何用柱形图插件让你的报表瞬间高大上!

> 摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # 前言 图表作为一款用于可视化数据的工具,可以帮助我们更好的分析和理解数据,并发现数据之间的关系和趋势。下面以柱形图为例介绍如何使用JavaScript在报表中引入图表。 本文使用软件

2种GaussDB(DWS)查看作业运行信息方式

摘要:提供以作业基本单位的作业统计视图pgxc_session_wlmstat,便于用户观察运行作业和排队作业信息。 本文分享自华为云社区《GaussDB(DWS)如何查看作业运行信息》,作者:幕后小黑爪。 用户反馈,出现连接数告警,作业并发数高,超过资源池限制,与实际配置不符。经过了解,用户使用p

c# 如何将程序加密隐藏?

下面将介绍如何通过`LiteDB`将自己的程序进行加密,首先介绍一下`LiteDB`。 ## LiteDB LiteDB是一个轻量级的嵌入式数据库,它是用C#编写的,适用于.NET平台。它的设计目标是提供一个简单易用的数据库解决方案,可以在各种应用程序中使用。 LiteDB使用单个文件作为数据库存储

[转帖]如何在KingbaseES数据库查看数据库和表的大小

关键字 kingbaseES,数据库大小,表大小 1、查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_size('kapp'); sys_database_size 1685672055(1 行记录)

[转帖]如何在KingbaseES数据库查看数据库和表的大小

关键字 kingbaseES,数据库大小,表大小 1、查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_size('kapp'); sys_database_size 1685672055(1 行记录)