适用于DotNet Maui的Positron-JS
内容提要
这篇文章介绍了一个基于Maui项目的高级Web视图。该项目受到了Cordova/Capacitor的启发,但构建原生插件非常耗时。Maui提供了一种单一语言来轻松编写原生插件。作者决定为Maui创建Capacitor/Electron-JS。文章还讨论了使用HTML5 + CSS3和JavaScript创建Web UI的优势,以及如何在PositronWebView中访问.NET API。最后,文章提到了发布项目和使用Jex进行构建脚本的方法。
延伸解读
为何选择 Positron:解决原生插件开发痛点
文章指出,Cordova/Capacitor 等方案虽然成熟,但构建原生插件需要分别使用 Java 和 Swift 编写,维护两套代码且耗时。Maui 允许用单一语言(C#)编写跨平台原生插件,因此作者为 Maui 创建了类似 Capacitor 的 PositronWebView,旨在简化混合应用开发,让开发者能更高效地调用设备原生接口。
性能优化建议:轻量级 Web UI 与原生动画
文章强调,要打造超快应用,应避免使用笨重的 JavaScript 框架,推荐直接使用原生 DOM 操作(如 document.getElementById 替代 jQuery 选择器),并优先使用内置 CSS 动画而非 JavaScript 模拟动画。作者提到自家的 Web Atoms 框架速度很快,但开发者也可自由选择其他框架与 PositronWebView 搭配。
访问 .NET API 的机制与限制
PositronWebView 在 window 对象上暴露 positron 属性,其 run 方法可将 JavaScript 函数发送到内置的 JavaScript 引擎(Android 用 YantraJS,iOS 用 JavaScriptCore)中执行,从而直接访问 CLR 对象。但需注意:传入的参数只能是简单的非递归原始类型(以 JSON 形式传递),且函数内不能包含除 global 外的闭包。
AOT 与链接设置:性能权衡
为了让 PositronWebView 访问所有 CLR 对象,必须禁用链接(Linking)并启用解释器(Interpreter)。使用解释器可减小代码体积,但会带来性能开销。不过,如果大部分逻辑在 HTML 中完成,浏览器原生性能足以应对;仅偶尔调用 .NET API(如获取地理位置、推送令牌、选择文件等)时,性能影响几乎不可见。
Q&A
Positron-JS是什么?
Positron-JS是一个基于Maui的高级Web视图项目,旨在简化混合应用的开发。
如何在Maui项目中使用Positron?
在Maui项目中使用Positron需要初始化npm并安装Positron CLI,然后创建项目并配置构建脚本。
PositronWebView的主要功能是什么?
PositronWebView提供简单的API来访问设备的原生接口,支持创建混合应用。
使用HTML5和CSS3开发Web UI有哪些优势?
使用HTML5和CSS3可以更容易实现各种效果,并且通常比原生UI更快。
如何发布使用Positron的项目?
发布项目需要执行.jsx文件,并使用Jex作为构建脚本引擎。
Positron如何访问.NET API?
Positron通过在window对象上暴露positron属性和run方法,允许JavaScript直接访问CLR对象。