Qt 配置Webassemble环境

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

之前一直知道有一个神奇的东西Webassemble,好几次都是由于环境配置不对导致不能正常使用,而且我也对于它的真正能力表示有兴趣。所以经过深入研究,终于在5.15.26.8.3两个版本上配置成功并使用。


一、Webassemble是什么?

WebAssembly 是一种新的编码方式,可以在现代的 Web 浏览器中运行——它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如 C/C++、C# 和 Rust 等语言提供编译目标,以便它们可以在 Web 上运行。它也被设计为可以与 JavaScript 共存,允许两者一起工作。

对于 Web 平台而言,WebAssembly 具有巨大的意义——它提供了一条使得以多种语言编写的代码都可以接近原生的速度在 Web 中运行的途径,使得以前无法在 Web 上运行的客户端应用程序得以在 Web 上运行。

WebAssembly 被设计为可以和 JavaScript 一起协同工作——通过使用 WebAssembly 的 JavaScript API,你可以把 WebAssembly 模块加载到 JavaScript 应用中并且在两者之间共享功能。这允许你在同一个应用中利用 WebAssembly 的性能和能力以及 JavaScript 的表达力和灵活性,即使你可能并不知道如何编写 WebAssembly 代码。

通俗点说:对于运行在网页上的特殊需求的对性能有要求的场景可以尝试,比如数学矩阵计算和FFT一类的。

我之前一直对比Webassemble和调用服务器之间的差别,终于被我想通了。调用服务器需要网络传输时间损耗,而且消耗服务器的资源,如果你在一个性能不弱的电脑上跑网页的话,那么它是本地计算,就是在那台电脑上运算,而不是消耗服务器的资源。某些情况下在响应速度和体验上会有不俗的提升。

二、下载并配置emsdk

1.下载源代码

# githubgit clone https://github.com/emscripten-core/emsdk.git # gitee 建议git clone https://gitee.com/anold/emsdk.git 

2.配置环境

cd emsdk ./emsdk install latest ./emsdk activate latest 

./emsdk activate latest这句需要注意,执行完之后会提示你设置一些环境变量,emsdk 需要编译工具链,java,python,node等几个环境协同工作,这几个环境都已经在emsdk 里面了。

贴一下我的环境变量:

1.用户变量

在这里插入图片描述


在这里插入图片描述

2.PATH路径

在这里插入图片描述


改成你自己的目录即可!

三、配置Qt环境

这里只能使用Creator,暂不支持Clion等其它IDE

注意:先配置环境变量再打开Creator,会自动读取环境变量的!

1.设置SDKS

编辑->设置->SDKs->Webassemble

在这里插入图片描述


应用->确定

2.查看构建套件

编辑->设置->构建套件(Kit)

在这里插入图片描述


和我一样说明你的环境配置好了。

四、测试Demo

这里随便写了一个SplitterDemo,具体代码就不贴出来了,和你平常创建Qt Widgets项目一样的。构建套件选择Webassemble 6.8.3 multithread即可。

在这里插入图片描述

编译并等待结束!

五、部署

1.部署nginx环境

这里一定需要nginx环境,因为nginx部署配置Webassemble是最简单的。别的方法不懂JS的人操作不了,用nginx的话你不需要懂JS也能成功部署!

这里建议nginx的版本不低于1.26.3以上,太低的版本mime.types文件里没有对application/wasm的支持!Windows和Linux都可以,我们今天演示的所有特性都是跨平台的!

2.部署Webassemble程序

在这里插入图片描述

编译完成后在编译目录生成几个文件,这些文件都是对.wasm的包装,不用我们自己写.js文件了。所以说不懂JS的人也能顺利操作。

把这些文件全部复制到一个nginx能访问的目录下,在nginx.conf或其它方式配置网页访问。下面是我的示例:

server { listen 8080; server_name localhost;#access_log /var/log/nginx/host.access.log main; location /Webassemble { add_header Cross-Origin-Embedder-Policy "require-corp" always; add_header Cross-Origin-Opener-Policy "same-origin" always;alias /var/www/Webassemble/; try_files $uri$uri/ /SpliterDemo.html;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html# error_page 500502503504 /50x.html; location = /50x.html { root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}

完了之后重启nginx,Windows环境必须杀死nginx程序重新打开,Linux环境执行:sudo nginx -s reload即可。

最后,打开chrome浏览器输入网址打开:

http://127.0.0.1:8080/Webassemble/SpliterDemo.html 
在这里插入图片描述

简单的功能页面看起来和Creator上编译的没什么两样,除了没看到标题栏。性能也很快,没发现瓶颈。

注意:下面这两句一定要加上,要不然浏览器报无法申请SharedArrayBuffer 的错误,这个是因为一个浏览器漏洞,感兴趣的可以看我发的说明网站!

 add_header Cross-Origin-Embedder-Policy "require-corp" always; add_header Cross-Origin-Opener-Policy "same-origin" always;

幽灵漏洞

写在最后:这个东西确实给不会JS的童鞋提供了一种可能,虽然可能开发速度远不如VUE那样快,但性能肯定是快的。这个东西说白了主要是完成一些耗时计算的,比如前面说的数学矩阵快速傅里叶变换等等,不是用来开发复杂的GUI的,虽然目前我也没有发现什么不支持的功能,可能我写的Demo页面简单的缘故,有兴趣的还需要进一步测试。

试想有这么一种可能:项目的主体是JS开发的,然后有这么一个模块需要复杂的计算,JS无论如何不能满足性能需求,而且对网络延迟的容忍度也低,不好通过服务器去中间计算返回,这个时候Webassemble就派上用场了。


总结

1、环境配置对于纯小白稍微有点压力,一步步来也没什么问题
2、使用场景比较稀少,绝大多数人可能都遇不到,可以先收藏起来作为一个备选方案,我以前也是不知道浏览器还能这么玩的。

Read more

Claude部署(copilot反向代理)

一、教育邮箱认证 1、进行教育邮箱认证可免费使用claude pro 2年,有机会的话可以进行认证,无法教育认证的话只能花钱充claude的会员了,如何进行教育认证可观看该Up的视频 超简单一次通过Github学生认证,逐步详细视频教程_哔哩哔哩_bilibili 2、教育认证通过后在GitHub个人主页下的Copilot/Features中开启Copilot Pro 二、服务器上配置Copilot反向代理 1、配置nodejs环境 在官网https://nodejs.org/en/download/package-manager,下载nodejs安装包(Linux) 下载完成后将压缩包传到服务器上进行解压,目录如下 创建软连接,使得在任意目录下都可以试用直接使用node命令和npm命令 ln -s /root/node-v24.13.1-linux-x64/bin/node /usr/local/bin/node ln -s /root/node-v24.13.

GitHub Copilot AI 编程超全使用教程,从入门到精通

GitHub Copilot AI 编程超全使用教程,从入门到精通

前言 作为 GitHub 推出的 AI 编程助手,GitHub Copilot 凭借强大的代码补全、自然语言交互、自动化开发等能力,成为了开发者提升编码效率的 “神器”。它能支持主流 IDE(VS Code、IntelliJ IDEA、Eclipse 等)、终端等多环境,还可自定义配置、切换 AI 模型,适配个人和团队的不同开发需求。本文结合 GitHub 官方文档和实际使用经验,用通俗易懂的方式讲解 Copilot 的完整使用方法,从环境搭建到高级技巧,再到故障排除,一站式搞定 Copilot AI 编程! 一、GitHub Copilot 核心能力一览 在开始使用前,先快速了解 Copilot 的核心功能,清楚它能帮我们解决哪些开发问题: 1. 智能代码补全:

【实践】操作系统智能助手OS Copilot新功能测评

【实践】操作系统智能助手OS Copilot新功能测评

一、引言         数字化加速发展,尤其人工智能的发展速度越来越快。操作系统智能助手成为提升用户体验与操作效率的关键因素。OS Copilot借助语言模型,人工智能等,对操作系统的自然语言交互操作 推出很多功能,值得开发,尤其运维,系统操作等比较适用,优化用户与操作系统的交互模式。本次测评,按照测评指南进行相关测评,得出下面的测评报告。 二、OS Copilot简介         OS Copilot 是一款致力于深度融合于操作系统的智能助手,它旨在成为用户与操作系统交互的得力伙伴 。通过先进的自然语言处理技术和机器学习算法,OS Copilot 能够理解用户多样化的指令,将复杂的操作系统操作简单化。         在日常使用场景中,无论是文件管理、应用程序的操作,还是系统设置的调整,OS Copilot 都能提供高效的支持。例如,在文件管理方面,用户无需手动在层层文件夹中查找文件,只需通过描述文件的大致信息,如创建时间、文件内容关键词等,就能快速定位到目标文件。         对于应用程序,它不仅能根据用户的使用习惯智能启动,还能在应用程序运行时进行优化,确保

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践

PyTorch实战——基于文本引导的图像生成技术与Stable Diffusion实践 * 0. 前言 * 1. 基于扩散模型的文本生成图像 * 2. 将文本输入编码为嵌入向量 * 3. 条件 UNet 模型中的文本数据融合机制 * 4. 使用 Stable Diffusion 模型生成图像 * 相关链接 0. 前言 在本节中,我们将为扩散模型添加文本控制能力。学习如何通过文字描述来引导图像生成过程,实现从"纯噪声+文本"生成图像,而不仅是从纯噪声生成。 1. 基于扩散模型的文本生成图像 在扩散模型的 UNet 模型训练流程中,我们仅训练模型从含噪图像中预测噪声。为实现文生图功能,需使用以下架构,将文本作为额外输入注入 UNet 模型: 这样的 UNet 模型称为条件 UNet 模型 ,或者更精确地说,是文本条件 UNet