码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 看看CabloyJS是如何异步加载并执行go wasm模块的


    介绍

    CabloyJS提供了一个内置模块a-wasmgo,将go wasm模块的异步加载运行机制进行了封装,使我们可以非常方便的在CabloyJS项目中引入go wasm,从而支持更多的业务场景开发

    下面,我们以测试模块test-party为例,演示引入go wasm模块并运行需要哪几个步骤

    效果演示

    • 请直接打开此演示页面:https://test.cabloy.com/#!/test/party/wasm_go

    1. 准备工作

    1. 安装go环境:参见 https://go.dev/doc/install

    2. 创建CabloyJS项目:参见 https://cabloy.com/zh-cn/articles/guide-quick-start.html

    3. 安装test-party演示套件:参见 https://store.cabloy.com/zh-cn/articles/test-party.html

    2. 开发一个go wasm模块

    2.1 go源码

    src/suite-vendor/test-party/modules/test-party/front/src/assets/wasm/demo.go

    package main
    
    import (
    	"fmt"
    	"syscall/js"
    )
    
    func main() {
    	fmt.Println("Hello, World!")
    	alert := js.Global().Get("alert")
    	alert.Invoke("alert!")
    }
    
    1. fmt.Println:在控制台输出一个字符串

    2. js.Global().Get(“alert”):获取网页中的window.alert方法

    3. alert.Invoke:执行alert方法

    2.2 编译wasm

    进入源码所在目录,将demo.go编译为demo.wasm

    $ cd src/suite-vendor/test-party/modules/test-party/front/src/assets/wasm/
    $ GOOS=js GOARCH=wasm go build -o demo.wasm demo.go
    
    • 更详细说明,请参见go官方文档:https://github.com/golang/go/wiki/WebAssembly

    3. 加载并运行wasm

    测试模块test-party提供了一个演示页面,页面路径为:http://localhost:9092/#!/test/party/wasm_go

    该页面提供了两个加载并运行wasm的方法:

    3.1 两步执行

    src/suite/test-party/modules/test-party/front/src/pages/wasm_go.jsx

    import wasmDemo from '../assets/wasm/demo.wasm';
    ...
    async onPerformRun1() {
      // go
      let action = {
        actionModule: 'a-wasmgo',
        actionComponent: 'sdk',
        name: 'go',
      };
      const go = await this.$meta.util.performAction({ ctx: this, action });
      // load wasm
      action = {
        actionModule: 'a-wasmgo',
        actionComponent: 'sdk',
        name: 'loadWasm',
      };
      const item = { source: wasmDemo };
      const wasmResult = await this.$meta.util.performAction({ ctx: this, action, item });
      // run
      await go.run(wasmResult.instance);
    },
    
    1. 内置模块a-wasmgo是异步模块,提供了一个sdk组件,用于封装异步加载并运行wasm的逻辑。因此需要通过调用performAction方法异步加载a-wasmgo模块,并调用其中的方法

    2. 第一步,调用performAction取得go实例

    3. 第二步,调用performAction异步加载demo.wasm模块

    4. 调用go.run执行wasm模块的实例

    3.2 一步执行

    src/suite/test-party/modules/test-party/front/src/pages/wasm_go.jsx

    import wasmDemo from '../assets/wasm/demo.wasm';
    ...
    async onPerformRun2() {
      // load&run wasm
      const action = {
        actionModule: 'a-wasmgo',
        actionComponent: 'sdk',
        name: 'run',
      };
      const item = { source: wasmDemo };
      await this.$meta.util.performAction({ ctx: this, action, item });
    },
    
    1. 调用performAction时,直接传入demo.wasm模块,从而一次完成加载与运行的逻辑

    附:performAction说明

    • action
    名称 说明
    actionModule 模块名称,此处为a-wasmgo
    actionComponent 模块提供的组件,此处为sdk
    name 需要调用的方法名称,此处有以下可选值:go/loadWasm/run
    • item
    名称 说明
    source wasm模块的url地址,此处为wasmDemo,指向'../assets/wasm/demo.wasm'

    相关链接

    • 文档:https://cabloy.com/

    • 演示:https://test.cabloy.com/

    • GitHub源码仓库: https://github.com/zhennann/cabloy

  • 相关阅读:
    制作win11系统盘
    深入理解计算机系统——第九章 Virtual Memory
    新手上路:学会使用SELinux保护你的系统
    【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现
    Jquery 老项目引入vue,elementui
    (23)STM32——硬件随机数发生器
    MD5 到底算不算一种加密算法?
    技术委员会主席杨勇:下一代操作系统展望|2022云栖龙蜥实录
    Nodejs -- Express托管静态资源
    从0到1配置TensorRT环境
  • 原文地址:https://www.cnblogs.com/zhennann/p/cabloy-go-wasm.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号