2025澳门开彩结果历史记录-2025澳门开彩结果-2025澳门开彩查询记录-2025澳门聚宝盆-2025澳门九点半一肖一码-2025澳门精准资料免费全览

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

告別Electron,WebView2帶你極速開啟EXE開發新旅程

admin
2025年2月5日 11:28 本文熱度 33

從 Electron 的困境說起

作為一名長期奮戰在前端開發一線的博主,我和大家一樣,對各種開發技術都有著強烈的探索欲望和實踐熱情。在獨立 EXE 程序開發的道路上,我也曾是 Electron 的忠實擁躉。Electron,這個將 Node.js 和 Chromium 巧妙結合的框架,確實為我們帶來了諸多便利。它讓前端開發者能夠憑借熟悉的 Web 技術棧,如 HTML、CSS 和 JavaScript,輕松構建出跨平臺的桌面應用程序 ,實現 “一次編寫,隨處運行” 的美好愿景,大大降低了桌面應用開發的門檻。

但隨著項目的推進和深入使用,我逐漸發現了 Electron 隱藏的一些 “痛點”。其中最讓人頭疼的就是它那龐大的體積。每一個 Electron 應用都像是一個 “巨無霸”,捆綁著自己的 Chromium 實例,這使得哪怕是一個簡單的 “Hello, world” 程序,打包后的體積也可能輕松超過 100MB。在如今這個追求極致性能和用戶體驗的時代,這樣的體積無疑是一個沉重的負擔,不僅會占用大量的磁盤空間,還會導致應用啟動速度變慢,給用戶帶來不佳的使用體驗。

除了體積問題,升級與分發也成了困擾我的難題。由于每個 Electron 應用都自帶 Chromium,當有新版本發布時,整個應用都需要重新下載和安裝,這對于用戶來說是一個繁瑣的過程,也增加了應用分發的成本和難度。而且在實際開發中,我還遇到了 Electron 嵌入其他窗口界面不方便的問題,與其他語言、技術融合時也存在諸多障礙,這在一定程度上限制了它的應用場景。

另外,對于一些只在 Windows 平臺運行,并且需要大量與專用系統 API 交互的軟件來說,Electron 強大的跨平臺特性反而成了一種不必要的負擔,徒增了開發和維護的成本 。我曾經在一個項目中,花費了大量的時間和精力去優化 Electron 應用的體積和性能,但效果卻不盡如人意,這讓我開始重新審視這個曾經信賴的框架。

WebView2 閃亮登場

在我為 Electron 的種種問題而苦惱時,WebView2 就像一道曙光,照亮了我在獨立 EXE 程序開發道路上前行的方向。WebView2 是微軟推出的一組強大的控件,它允許開發者在原生應用程序中輕松嵌入 Web 技術,如 HTML、CSS 和 JavaScript ,這一點和 Electron 有著相似之處,但 WebView2 的優勢卻十分顯著。

WebView2 基于性能強悍的 Edge(Chromium)內核,這意味著它擁有和 Chrome 瀏覽器一樣強大的渲染能力和對現代 Web 標準的良好支持。相比之下,Electron 雖然也是基于 Chromium 內核,但由于其版本更新相對滯后,在一些新特性和性能優化上可能會稍遜一籌。而且,WebView2 調用生成的軟件體積非常小,因為所有基于 WebView2 的軟件可以共享同一個 WebView2 組件。在 Windows 11 系統中,已經內置了 WebView2 組件,而在其他 Windows 操作系統上,也可以快速地自動安裝 WebView2 ,這大大減少了應用的安裝包大小和用戶的安裝時間,讓應用的分發和更新變得更加輕松便捷。

WebView2 的接口設計也非常簡潔,這使得它在嵌入其他窗口界面時非常方便,與其他語言、技術的融合也更加順暢。例如,在一些需要與 C++、C# 等語言結合開發的項目中,WebView2 能夠很好地與這些語言進行交互,實現功能的互補和擴展,而 Electron 在這方面則常常會遇到一些兼容性問題。此外,WebView2 對 Windows 系統的兼容性也非常出色,它支持從 Windows 7 到 Windows 11 的多個版本,能夠滿足不同用戶群體的需求。

兩者深度大比拼

為了更直觀地了解 Electron 和 WebView2 的差異,我們不妨從多個維度對它們進行一番深入的對比分析。

架構與運行機制

從架構層面來看,Electron 和 WebView2 都繼承自 Chromium 的多進程架構,采用一個主進程與多個渲染進程的模式,進程間通過 IPC(進程間通信)進行通信 。不過,它們在具體的實現方式上還是存在一些區別。

Electron 應用是一個獨立的進程樹,每個應用都包含一個根瀏覽器進程、若干公共進程以及多個渲染進程,并且不與 Chrome 共用任何 DLL 文件,這就導致其打包后的體積較大。而 WebView2 的二進制文件與 Edge 有較強的依賴關系,它們會共享磁盤和一些工作集。使用相同用戶目錄的 WebView2 應用可以共享除渲染進程以外的進程,這在一定程度上減少了資源的占用 ,使得基于 WebView2 開發的應用在資源利用上更加高效。

功能特性

在功能方面,Electron 提供了豐富的 API,讓開發者能夠輕松實現菜單創建、文件系統訪問、系統通知發送等本地相關功能,這得益于它集成了 Node.js,開發者可以在主進程或者渲染進程中使用 Node.js 提供的 API、模塊以及 node-native-addon ,這為前端開發者提供了極大的便利,能夠充分發揮前端技術棧的優勢。

相比之下,WebView2 僅僅是一個被集成到 WinForms、WPF 等應用框架中的組件,它本身不提供操作系統的本地 API,僅提供標準的 Javascript API。如果使用 WebView2 開發的應用想要訪問本地能力,就需要通過 Javascript 和本地代碼進行對接來實現 。這雖然在一定程度上增加了開發的復雜性,但也為開發者提供了更多與原生應用融合的可能性,能夠充分利用原生系統的強大功能。

性能表現

在性能上,由于 Electron 和 WebView2 都基于 Chromium 內核,所以在渲染頁面時,它們的性能差異其實非常小。曾經有開發者專門制作了不同技術組合的 Demo 進行測試,結果顯示,無論是在 Electron 還是 WebView2 中渲染頁面,性能差異幾乎可以忽略不計 。不過,在 IPC 通信方面,兩者還是存在一些不同。

在 Chromium 中,瀏覽器進程充當著渲染器和系統其它部分之間的 IPC 通信代理角色。Electron 支持不開啟沙箱模式,但出于安全考慮,很多應用還是會選擇使用沙箱機制。WebView2 則無論在任何情況下都會開啟沙箱機制 。由于底層 IPC 的實現不同,在 JavaScript 和 C++ 或 C# 之間通信時,最常見的編碼方式是 JSON 字符串,而 JSON 的序列化和解析是一個比較耗時的操作,這可能會導致 IPC 通信產生瓶頸,從而降低應用的整體性能。不過,從 Edge93 版本開始,WebView2 采用了 CBOR 技術來在進程間傳輸數據,有效地提高了通信效率;而在 Electron 中,開發者也可以使用 MessagePorts 技術來避免 JSON 的序列化和解析操作,MessagePorts 底層采用的是結構化克隆技術,同樣能夠提升 IPC 通信的性能 。

安全機制

安全是應用開發中至關重要的一環。Electron 的安全級別可以在完全訪問權限到完全沙箱之間進行配置,這使得開發者可以根據應用的具體需求來靈活調整安全策略,實現一些在瀏覽器沙箱中無法實現的功能 。然而,這種靈活性也可能帶來一定的安全風險,如果配置不當,可能會導致應用存在安全漏洞。

WebView2 的上下文則只能運行在沙箱環境中,這種嚴格的沙箱機制可以有效地限制應用的訪問權限,降低安全風險,為應用提供了一個相對安全的運行環境 。但這也意味著開發者在進行一些涉及系統底層操作時會受到更多的限制,需要通過其他方式來實現相關功能。

實戰:WebView2 開發獨立 EXE

說了這么多,相信大家已經迫不及待地想要親自體驗一下 WebView2 的魅力了。下面,我將以 aardio 為例,為大家詳細展示如何使用 WebView2 和 JavaScript 開發獨立 EXE 程序。aardio 是一款簡單易學的編程語言,它與 WebView2 的結合,能夠讓我們更加輕松地創建出功能強大的桌面應用。

準備工作

首先,我們需要確保開發環境已經搭建好。在 aardio 中,WebView2 的使用非常方便,只需要簡單的幾步操作即可。我們可以在 aardio 的官方網站上下載并安裝最新版本的 aardio 開發環境,安裝完成后,打開 aardio,新建一個工程。

創建工程

在 aardio 中,創建一個新工程非常簡單。點擊菜單欄中的 “文件”->“新建工程”,在彈出的對話框中選擇 “Windows 窗口程序”,然后為工程命名,比如 “WebView2Demo”,點擊 “確定” 即可創建一個新的工程。

添加 WebView2 控件

工程創建完成后,我們需要在窗口中添加 WebView2 控件。在 aardio 的設計界面中,找到 “工具箱”,在 “工具箱” 中找到 “WebView2” 控件,將其拖放到窗口中。此時,我們可以看到窗口中出現了一個 WebView2 控件,我們可以根據自己的需求調整其大小和位置。

編寫代碼

接下來,就是編寫代碼的環節了。在 aardio 中,我們可以使用 JavaScript 來編寫 WebView2 的相關邏輯。首先,我們需要在窗口的初始化事件中,加載一個本地的 HTML 頁面。在 aardio 的代碼編輯區中,找到窗口的初始化事件函數,比如 “_啟動窗口_創建完畢”,在該函數中添加以下代碼:

// 獲取WebView2控件

var webView = _啟動窗口.WebView21;

// 加載本地HTML頁面

webView.Source = "file:///" + aardio.path.join(aardio.appPath,"index.html");

上述代碼中,我們首先獲取了窗口中的 WebView2 控件,然后使用webView.Source屬性來加載本地的index.html頁面。這里的aardio.path.join(aardio.appPath,"index.html")表示將index.html文件的路徑與當前應用的路徑拼接起來,以確保能夠正確加載頁面。

接下來,我們可以在index.html頁面中編寫 HTML、CSS 和 JavaScript 代碼,來實現我們想要的功能。例如,我們可以在index.html中添加一個簡單的按鈕,當點擊按鈕時,在 WebView2 中顯示一個提示信息:

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="UTF-8">

<title>WebView2 Demo</title>

</head>

<body>

<button id="btn">點擊我</button>

<script>

document.getElementById('btn').addEventListener('click', function() {

alert('你點擊了按鈕!');

});

</script>

</body>

</html>

在上述代碼中,我們創建了一個簡單的 HTML 頁面,包含一個按鈕和一段 JavaScript 代碼。當按鈕被點擊時,會調用alert函數顯示一個提示信息。

與本地代碼交互

WebView2 的強大之處不僅在于能夠顯示 Web 頁面,還在于它能夠與本地代碼進行交互。在 aardio 中,我們可以通過一些方法來實現 JavaScript 與 aardio 代碼的雙向通信。

例如,我們可以在 JavaScript 中調用 aardio 的函數。首先,在 aardio 中定義一個函數,比如在窗口的代碼中添加以下函數:

function showMessage(msg) {

_啟動窗口.MsgBox(msg);

}

上述函數接受一個參數msg,并使用_啟動窗口.MsgBox方法在窗口中顯示一個消息框。

然后,在 JavaScript 中調用這個函數。在index.html的 JavaScript 代碼中添加以下內容:

document.getElementById('btn').addEventListener('click', function() {

// 調用aardio的showMessage函數

window.chrome.webview.hostObjects.aardio.showMessage('你點擊了按鈕,這是從JavaScript傳遞給aardio的消息!');

});

在上述代碼中,我們通過window.chrome.webview.hostObjects.aardio.showMessage來調用 aardio 中定義的showMessage函數,并傳遞了一個消息。

反過來,我們也可以在 aardio 中調用 JavaScript 的函數。例如,在 aardio 中添加以下代碼:

// 調用JavaScript中的函數

webView.ExecuteScriptAsync("document.getElementById('btn').click();");

上述代碼會在 WebView2 中執行一段 JavaScript 代碼,模擬點擊按鈕的操作。

生成 EXE

當我們完成代碼編寫和測試后,就可以將應用打包成獨立的 EXE 文件了。在 aardio 中,打包非常簡單,只需要點擊菜單欄中的 “工程”->“生成 EXE 文件”,然后在彈出的對話框中選擇生成的路徑和文件名,點擊 “保存” 即可。aardio 會自動將我們的應用打包成一個獨立的 EXE 文件,我們可以將這個文件分享給其他人使用。

通過以上步驟,我們就成功地使用 WebView2 和 JavaScript 在 aardio 中開發了一個獨立的 EXE 程序。這個程序不僅體積小巧,而且能夠充分發揮 Web 技術的優勢,實現豐富的功能。希望通過這個實戰案例,大家能夠對 WebView2 的開發有更深入的了解和掌握。

總結與展望

通過以上的對比和實戰,我們可以清晰地看到 WebView2 在開發獨立 EXE 程序方面展現出的獨特優勢。它體積小巧、接口簡潔、與原生系統融合度高,為我們在 Windows 平臺上開發桌面應用提供了一種高效、便捷的解決方案 。尤其是在一些對跨平臺需求不高,主要面向 Windows 用戶的項目中,WebView2 無疑是一個非常不錯的選擇。

當然,Electron 也并非一無是處,它的跨平臺特性和豐富的生態系統仍然在很多場景下有著不可替代的作用。在實際的開發過程中,我們應該根據項目的具體需求、目標平臺、性能要求等因素,綜合考慮選擇最適合的技術框架。

展望未來,隨著技術的不斷發展和進步,桌面應用開發領域也必將迎來更多的創新和變革。WebView2 等基于 Web 技術的開發方案或許會在 Windows 平臺上占據越來越重要的地位,為開發者和用戶帶來更多優質、高效的桌面應用。同時,我們也期待看到更多新技術、新框架的出現,為桌面應用開發注入新的活力,讓我們能夠創造出更加出色的軟件產品,滿足用戶日益增長的需求 。


閱讀原文:原文鏈接


該文章在 2025/2/5 18:35:23 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 赤兔男同性恋 | 中共中央政治局5月29日 | 香港六合特码109期推荐ios | 2025年澳门天天彩网站 | 正版图库 | 2025年澳门资料大全正版资料 | 2025年澳门天天开好彩大全 | 2025年澳门正版免费资料 | 2025正版资料大全免费 | 4949澳门免费资料大全特色网页版 | 澳门六开彩开奖结果资料查询最新 | 澳门今晚6合开彩买什么 | 49图库资料中心49图下载 | 49图库澳门彩图库安卓手机版下载 | 香港跑狗论坛资料 | 王中王一肖一特一中一 | 2025年十二生肖财运排行榜 | 澳门三肖三码期期准精选大全 | 天下彩天空彩彩票资料大全(中国)官方网站 | 澳门香港开奖结果2025开奖记录 | 2025新澳今晚资料鸡号几号 | 澳门六合码今晚开什么特 | 2025年香港资料精准 | 2025年澳彩免费公开资料 | 今晚特马号是蛇吗2025 | 管家婆2025资料精准大全 | 管家婆一肖一码100%准确 | 118免费彩色印刷图v7.3.17 | 国外免费网站域名服务器查询 | 港澳台49图库免费资料正版 | 2025正版澳门资料下载 | 刘伯温精选资料大全630 | 新澳门与香港四肖期期准免费资料公开的特色 | 2025新澳资料免费长期公开吗 | 香港最准100话肖中特官方版下载 | 澳门2025正版资料免费公开 | 新澳天天开奖资料大全最新54期 | 2025新澳门精准免费大全 | 管家婆进销存软件 | 新澳精准资料免费提供网站有哪些地方 | 今晚开奖免费查结果 |