馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
本帖最後由 qciwbu95 於 2025-12-9 19:12 編輯
記憶體價格飆漲 Windows 11 熱門應用程式因為 Electron、網頁元件消耗更多 RAM
由於開發者偏好採用網頁應用程式而非 Windows 原生應用程式的趨勢,導致 Windows 11 上一些最受歡迎的應用程式消耗大量記憶體(RAM),進而可能影響個人電腦(PC)效能,加上記憶體價格正不斷飆升,使得情況更加嚴峻。
近期《Windows Latest》報導指出,如 Discord、Teams 和新版 WhatsApp 等應用程式,即使在背景執行也非常耗用記憶體。這些都是以通訊為核心的應用程式,即使使用者沒有使用,它們也需要保持活動狀態。然而,這些應用程式的原生版本(例如舊版 WhatsApp)並不會消耗這麼多記憶體。無論使用者從事哪個領域,這些都是 Windows 上使用率最高的應用程式。
那麼,為什麼這些應用程式不推出原生版本呢?對於這些公司來說,為最受歡迎的桌面作業系統開發原生且最佳化的版本真的有這麼困難嗎?
Windows 11 上消耗記憶體最嚴重的應用程式
在個人電腦和筆記型電腦硬體升級日益昂貴之際,探討記憶體用量變得前所未有的重要,而美光(Micron)退出 消費級記憶體業務的事實,更讓情況雪上加霜。
Windows 11 在剛推出時,就因為更高的記憶體需求而受到批評,但到了 2025 年,情況變得更糟,因為 Windows 上主要的通訊應用程式正在肆無忌憚地「鯨吞」記憶體,彷彿記憶體是免費資源一樣。
Discord 記憶體用量長期居高不下,輕易衝破 4GB
在 遊戲玩家和線上社群中知名的 Discord,是其中最容易被點名批評的對象,因為該公司已經承認記憶體用量的問題。Discord 的 Windows 用戶端是基於 Electron 架構,這意味著它是在桌面應用程式中執行了一個 Chromium 瀏覽器實體,外加一個 Node.js 環境。每開啟一個伺服器、頻道或額外功能,都會為這個內嵌的瀏覽器增加更多「分頁」。
Discord 曾向使用者說明,一般使用情況下的記憶體用量會低於 1GB,但在實際使用情境中,它可能會衝上 4GB。正是在這種情況下,該公司開始測試現在惡名昭彰的「 記憶體超過 4GB 時自動重啟」實驗功能。如果應用程式已開啟至少一小時、閒置 30 分鐘且沒有通話,Discord 會在 24 小時內靜默地重新啟動一次,以收回記憶體。
該公司 解釋稱,重新啟動是出於善意。然而這只是治標不治本的權宜之計。儘管如此,Discord 的開發者一直忙於修復實際的記憶體洩漏問題,並聲稱已將高百分位記憶體用量降低了 5%。
話雖如此,Electron 實際上是為每個應用程式部署一個完整的瀏覽器堆疊,因此使用者電腦必須為了一個聊天介面支付渲染引擎、JavaScript 執行環境和安全沙盒的資源消耗。
好消息是 Discord 願意解決問題,但壞消息是,儘管該公司已經營運 10 年,但它 並非獲利豐厚。因此,我們不能期望該公司投入資源開發原生應用程式。該公司也沒有原生的 macOS 應用程式。
Teams:連微軟自己都不在乎
接著是微軟的 Teams,它從 Electron 轉向了 WebView2。這在理論上可能聽起來像是一種進步。然而,實際上,它仍然是一個徹頭徹尾的網頁應用程式。Teams 在閒置時,記憶體用量通常在 1GB 左右。
微軟 承認了這個問題,但卻走向選擇重構應用程式而非重新編寫。從 2026 年初開始,Teams 將引入一個名為 ms-teams_modulehost.exe 的新程序,將通話功能從主要的 ms-teams.exe 程序中分離出來處理。
然而,這並沒有改變一切仍然執行在 WebView2 之上的事實,且在背景中運行著那些「常客」程序。實在不知道該如何評論這種情況,特別是微軟的企業客戶每天都依賴 Teams 進行日常通訊。
就目前而言,不期望微軟會關心其他開發者是否會開發原生 Windows 應用程式,或者他們是否會像 Meta 那樣,將現有的原生應用程式轉向網頁應用程式。事實是,現今的網頁瀏覽器消耗大量的記憶體,任何基於它構建的應用程式都會吞噬記憶體。其中最糟糕的就是通訊應用程式,因為它們需要隨時保持開啟。
為何每個現代 Windows 應用程式都消耗這麼多記憶體?
現今 Microsoft Store 上的大多數新 Windows 應用程式,本質上並不是真正的 Windows 應用程式,而是瀏覽器引擎。Discord 使用 Electron,WhatsApp 和 Teams 使用 WebView2,許多較小的應用程式則使用 PWA(漸進式網頁應用程式)。但所有這些都具有一個共同特點:它們在應用程式內部嵌入了一個完整的 Chromium 執行環境。
每個 Electron 應用程式都有自己的 JavaScript 引擎、繪圖處理器(GPU)渲染器、網路堆疊、音訊管道和沙盒子程序。由於現代瀏覽器的安全標準,即使是一個小的使用者介面元素也可能產生另一個程序。每個聊天、伺服器、頻道、通話畫面或設定面板,實際上都是一個獨立的沙盒世界。因此,記憶體用量會隨著功能並行執行而橫向增長。
Teams 和 WhatsApp 所使用的 WebView2 架構,避免了開啟自己獨立的 Chromium 副本,但設計理念仍然相似。你可能認為 Windows 上的新版 WhatsApp 僅僅是一個簡單的聊天列表。但實際上,它是一個微型的瀏覽器分頁,底層執行著 Chrome 的所有層級。至於 PWA 行為也一樣, Windows 上的 Reddit 應用程式就是這個例子,因為它們同樣依賴 Chromium 的多程序架構和背景服務工作程式。
技術上來說,WebView2 優於 Electron
由於每個 Electron 應用程式都會像一個完整的瀏覽器一樣開啟,這會增加應用程式的大小和記憶體用量,但它能在 Windows、macOS 和 Linux 上保持一致的跨平台行為。WebView2 應用程式則利用 Windows 上現有的 Microsoft Edge(Chromium)安裝,在原生應用程式內渲染網頁內容。因此,它減少了開銷和佔用空間,因為它不需要開啟自己的瀏覽器。當然,由於它與 Windows 綁定並需要 Edge 執行環境,這在可移植性上會有一點限制。
無論如何,這些架構所造成的記憶體使用效率低下並非是偶然的。開發者深知這一點,這些架構的存在是為了防止漏洞和安全問題。現代瀏覽器實作了程序隔離,以阻止惡意網頁與使用者正在查看的內容進行互動。它們將記憶體池分散到不同的沙盒中,將渲染(Rendering)與邏輯(Logic)分離,邏輯再與儲存(Storage)分離。這種額外的資源消耗是我們為了安全必須付出的代價。因此,當您選擇瀏覽器引擎作為桌面應用程式的基礎時,額外的記憶體消耗是難以避免的。
除此之外,現代 JavaScript 架構也佔用了不少記憶體。大型程式碼包(Large Bundles)、繁重的差異化比對演算法(Diffing Algorithms)、虛擬文件物件模型(Virtual DOM)層和用戶端狀態機器(Client-side State Machines),都堆疊在瀏覽器本身就已很高的記憶體用量之上。從本質上講,即使是經過良好最佳化的網頁封裝應用程式,其記憶體基準用量也會很高。
記憶體洩漏無所不在
當 JavaScript 參考沒有正確釋放,或事件監聽器隨時間累積時,就會發生記憶體洩漏。當框架在內部快取中保留閒置物件時,這種情況很常見。當瀏覽器程序在長時間執行的工作階段中未能釋放記憶體時,也會發生。一旦記憶體洩漏開始,它們就會累積成數 GB 的記憶體尖峰用量,就像我們在 Discord 上看到的那樣。這在 Electron、Chromium Embedded Framework(CEF)和 WebView2 應用程式中很常見,而針對複雜 JS 堆疊的偵錯工具,遠不及原生偵錯工具成熟。
令人不安的事實是,我們知道公司會監控記憶體用量,而他們所能做的只是發布可能修復小部分記憶體問題的修補程式。但整個技術堆疊在抽象層面隱藏了太多細節。我們無法在低層級看到 Chromium 正在做什麼。我們不能強制其渲染器更積極地釋放記憶體。我們不能重寫多程序模型。因此,在記憶體用量方面,可以改善該架構的程度是有限的。
記憶體價格正在上漲,這種趨勢不會改變
所有這些發生的時機再糟糕不過了。許多情況下,記憶體價格幾乎翻了一倍,這主要受到對普通消費者的供應削減、DDR5 積極的價格週期,以及其中最大的因素:人工智慧(AI)資料中心壓倒性的需求所驅動。記憶體製造商現在優先考慮這些高利潤的企業級晶片。
對於 Windows 應用程式的現狀,沒有靈丹妙藥可以解決。微軟在這裡扮演著最大的角色,因為我們看不到開發者有任何動機去改變現狀。該公司可以再次推動開發者使用原生工具,精進 WinUI 使其更具吸引力,並透過修復 Windows 中長期存在的問題來證明核心系統品質仍然很重要。
如果 Windows 將存在於一個基於瀏覽器的應用程式世界中,那麼該平台首先需要以身作則,為使用者和開發者提供一個更好的基礎來進行工作。
資訊來源:https://www.windowslatest.com/2025/12/07/ram-prices-soar-but-popular-windows-11-apps-are-using-more-ram-due-to-electron-web-components/
|