网站首页 > 技术文章 正文
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 Extism
Extism 是一个轻量级的 WebAssembly (Wasm) 构建框架,支持在服务器、边缘计算、命令行界面 (CLI)、物联网 (IoT)、浏览器以及介于两者之间的所有设备上运行 Wasm 代码。Extism 的设计目标是“通用”,即无论在何处运行,都支持通用接口。
此外,Extism 在标准 Wasm 运行时之上还添加了一些额外的实用程序,例如:支持持久内存/模块范围变量、无需 WASI 的安全且主机控制的 HTTP、运行时限制器和计时器、更简单的主机函数链接等等。核心特征包括:
- 易于使用:Extism 充分利用 WebAssembly 的强大功能和可移植性,是一个现成的插件系统,只需导入库即可快速使用
- 默认安全:无需担心某些插件代码会对应用程序造成影响,Extism 以安全为核心构建,对所有插件代码的执行进行完全沙盒化处理
- 随处可用:独特的灵活架构使 Extism 几乎可以在任何地方运行,并提供了适用于 Python、Node、Ruby、Rust、Go、PHP、C/C++、OCaml 等语言的惯用 Host SDK。
目前 Extism 在 Github 通过 BSD-3-Clause 协议开源,有超过 5.1k 的 star、是一个妥妥的优质开源项目。
如何在 JS 中使用 Extism
以下是在选择的语言和平台上运行 Extism 插件的简要指南,本文档应该能帮助开发者尽快从零开始,实现“Hello, World!”。
在 Extism 中,普通(非 wasm)应用被称为“宿主”,而开发者提供的各种库称之为“宿主 SDK”,以帮助将 Extism 插件嵌入到应用程序中。
对于 JS 来说,首先需要将 @extism/extism 依赖项添加到 package.json 中:
npm install @extism/extism --save
接着建议将以下代码复制粘贴到 node.js shell 中:
const createPlugin = require("@extism/extism");
const plugin = await createPlugin(
"https://github.com/extism/plugins/releases/latest/download/count_vowels.wasm",
{ useWasi: true }
);
接着在插件上调用“count_vowels”导出函数,其将计算传入字符串中元音字母的数量,并返回 JSON 编码的结果。
let out = await plugin.call("count_vowels", "Hello, World!");
console.log(out.text());
// => '{"count":3,"total":3,"vowels":"aeiouAEIOU"}'
如何在 Python 中使用 Extism
首先也需要安装相应的依赖:
# using pip
$ pip install extism
# using poetry
$ poetry add extism=^1.0.0
接着在代码中导入相应的库:
import extism
url = "https://github.com/extism/plugins/releases/latest/download/count_vowels.wasm"
manifest = {"wasm": [{"url": url}]}
plugin = extism.Plugin(manifest)
接着也在插件上调用“count_vowels”导出函数,其将计算传入字符串中元音字母的数量,并返回 JSON 编码的结果。
wasm_vowel_count = plugin.call(
"count_vowels",
"hello world"
)
print(wasm_vowel_count)
# => {"count": 3, "total": 3, "vowels": "aeiouAEIOU"}
其他语言的集成官方也提供了非常详细的文档,可以参考文末资料,本文不再过多展开。
参考资料
https://github.com/extism/extism
https://extism.org/docs/quickstart/host-quickstart
猜你喜欢
- 2025-10-02 真实案例:优化用老PHP7.4的网站让其速度提高4倍
- 2025-10-02 2025 年 Node.js 和 PHP 官宣牵手?php-node 不做选择题?
- 2025-10-02 7个每个PHP程序员都应该掌握的操作符
- 2025-01-04 加锁了还有并发问题?Redis分布式锁,真的用对了?
- 2025-01-04 宝塔搭建实战php悟空CRM前后端分离源码-vue前端篇(二)
- 2025-01-04 php实现三方支付的方法有哪些?
- 2025-01-04 php项目宝塔搭建实战MoChat多租户开源版SCRM系统前端vue源码
- 2025-01-04 基于PHP(前端是安卓)的开源直播系统
你 发表评论:
欢迎- 最近发表
-
- Three.js vs Unity:工业可视化为何选择Web方案?
- 一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI
- 时间线可视化实战:三款AI工具实测,手把手教你制作人生轨迹图
- 【推荐】一款可视化在线 Web 定时任务管理平台,支持秒级任务设置
- 重磅更新!FastDatasets 推出可视化 Web 界面
- 模具设计之UG钣金实例教程(3)_ug钣金基础教程
- 前端基于 RBAC 模型的权限管理实现
- 别再把JWT存在localStorage里了!2025年前端鉴权新思路
- 模具设计之曲面造型中不圆润的曲面如何处理技巧
- 9个专业级别的CSS技巧区分了解和精通的鸿沟
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)