V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zyxk
0.02D
V2EX  ›  程序员

webview2 (wails) 应用真的比 electron 应用更省内存吗?但似乎不是这样, 实测: Windows 任务管理器骗了你!

  •  
  •   zyxk · 20 小时 14 分钟前 · 3128 次点击
    webview2 (wails) 应用真的比 electron 应用更省内存吗? 以下仅讨论 windows 系统。

    之前经常看到有人说 electron 内存占用高, 就会有人推荐使用 wails tauri 等 webview2 应用,我一直以为,webview2 的优势是,更小的应用体积,更小的内存占用, 最近要写个 windows 应用,我想使用 wails 来写,顺便测试对比一下。

    如果电脑上安装有 webview2 , 那么更小的安装包毋庸置疑,如果没有,它的运行时完整安装包是 186M ,安装完成后占用大概八九百兆,不过我们一般使用仅有几兆的在线安装器,进行在线下载,并自动安装,安装过程没有显示下载包大小,淡化了这个过程,不过我们主要想讨论的是内存占用,这里略过。

    那 webview2 应用内存占用是否更小呢,我使用 go ,使用 wails 实际测试一下吧,我使用它们官方第一个 app 教程,分别编译了一个 hello demo ,直接运行。
    electron https://www.electronjs.org/zh/docs/latest/tutorial/tutorial-first-app
    wails3 https://v3alpha.wails.io/quick-start/first-app/



    可以看到 electron 应用内存使用 88MB ,wails3 应用内存使用约 4MB 到 8MB , webview2 应用确实占存更低,1/15 ,低的多,但是我在低版本的 windows 系统中进行测试时,发现了一个问题。


    从图上可以看到,同一个程序,占存占用又变成了 70 多兆,后来发现,同一个程序,在有些版本的 windows 任务管理器中,webview2 进程和程序进程是在一起显示的(父子级), 有些版本 windows 中又分别显示,所以看起来内存使用量很少,但是用 process explorer 进行查看,它们总是父子级进程。

    我进行 AI 查询,说 WebView2 更省内存,因为 WebView2 应用共享系统的内核进程,如果是这样,那应该也不错吧, 继续测试一下,如果我多运行几个 WebView2 ,是不是只占用一份 WebView2 运行时内存呢。



    我用一个新系统,启动一个 demo.exe, 内存占用 112MB , 再多运行两次, 占用占用 5MB ,6MB ,似乎确实共享了 webview 运行内存, 但是我将 demo.exe 复制一份,改名运行, 内存占用又变成了 70MB , 可能是共享了部分内存(约 40MB)。


    同时也有一个小问题,这个 demo.exe 我在之前的电脑上内存占用是 70 多,这个电脑上占用 112MB, 我返回之前的电脑发现,windows search 进程使用了 webview2 运行时, 应该是首个启动的程序,占用内存更大,之后启动的程序占用内存会小一点。



    如果只运行一个 webview2 应用, 内存占用是否比 electron 应用占用占用低呢,仅针对这两个空应用,直接说结果:electron 86MB, wails 110MB,如果是系统上运行的第二个 webview2 应用,内存是 70MB , 同一应用启动多份时,内存是五六兆, 没有太大意义,同一应用开多个窗口应该更省内存。



    以上内存都是指 [ windows 任务管理器] 中 [进程] 选项中显示的内存,这都是进程私有内存,windows11 叫专用工作集,如果加上进程可共享内存(共享工作集), 那么 webview2 占用内存更大。


    另外一点发现, 使用工具查看窗口层级发现,webview2 (wails) 应用,窗体显示的也是 chrome , 约等于 electron 应用之上套了一层 webview ,再套上一层 wails ,如果这样,同样的内核,理论上来说,webview2 应该更费内存吧。

    最后结论:系统只运行一个 webview2 应用时,更用内存更多,运行多个时,比 electron 应该节省一点吧( 10% 左右?),所以内存应该不在考虑范围之内吧。
    39 条回复    2025-12-04 01:39:57 +08:00
    yekern
        1
    yekern  
       19 小时 56 分钟前
    省不省内存都是基于 webview2 或者说 chrome 内核的 最起码 安装包要比 electron 的小很多啊.
    EngAPI
        2
    EngAPI  
       19 小时 53 分钟前
    webview2 非常耗 cpu ,日常使用 clash-verge-rev 比起 clash for windows 来,8265 的 cpu 温度能高 15-20 度。
    cryptovae
        3
    cryptovae  
       19 小时 52 分钟前
    wails tarui 这些最大的好处就是安装包的体积小,不用每一个 App 包含一个 Chromium
    SkywalkerJi
        4
    SkywalkerJi  
       19 小时 52 分钟前 via Android
    Mac 上 tauri 感觉比 electron 还卡,Windows 没感觉
    skuuhui
        5
    skuuhui  
       19 小时 22 分钟前
    为什么不能一个启动程序,起一个后台 server 并且唤起浏览器打开一个本地端口呢。感觉也没啥区别。
    querysecret
        6
    querysecret  
       19 小时 19 分钟前
    应该都是 cef 类似的东西吧
    artiga033
        7
    artiga033  
       19 小时 6 分钟前 via Android
    @skuuhui 固定端口的话数量有限且有可能和其它程序冲突,不固定端口的话污染浏览器历史记录
    liaohongxing
        8
    liaohongxing  
       19 小时 4 分钟前   ❤️ 2
    我认为不包含一个 Chromium ,出问题的概率很大,因为每个人的 webview2 版本不一致,出问题都不知道在哪里
    yb2313
        9
    yb2313  
       19 小时 3 分钟前
    用 bevy 一把梭 wasm, 直接 immediate mode 高刷.
    visper
        10
    visper  
       19 小时 3 分钟前
    按理解来说,wails 和 tauri 相对 electron 来说主要是省安装包大小吧。渲染都是 webview 的没多大区别。至于后端 go 和 rust 会不会比 nodejs 省一点内存,可能会,但是不太多吧。
    leyoumake1997
        11
    leyoumake1997  
       19 小时 2 分钟前
    wails 挺好的,aot 之后随处可用。没有像 electron 安装之后释放的很多依赖文件。本身依赖的是 webiew2 ,只能反馈社区让他们发力优化底层实现精简版
    momo1999
        12
    momo1999  
       18 小时 59 分钟前
    节约硬盘,不节约内存。
    zyxk
        13
    zyxk  
    OP
       18 小时 58 分钟前
    @artiga033
    @skuuhui 我准备这样试试, 固定端口,如果冲突了,提示用户自己去改
    rb6221
        14
    rb6221  
       18 小时 57 分钟前
    本质都是 chromium 套壳的,有区别也不可能有数量级的区别,优点主要在别的地方
    liuliuliuliu
        15
    liuliuliuliu  
    PRO
       18 小时 57 分钟前
    都是浏览器包壳,能省 多少内存,原生 ui 才是王道
    lisxour
        16
    lisxour  
       18 小时 54 分钟前
    这个我好早以前也发现了,他们的优势就是软件安装包小了,但实际运行内存都是没多大差别的,原本还想有 tauri 之类的写写小工具,tm 的代码 100KB ,跑起来要 100M 内存真的有点绷不住,关键是现在好多软件都用了这种架构,16G 内存库库吃完
    yiwayhb
        17
    yiwayhb  
       18 小时 43 分钟前
    @EngAPI 高 12~20 度基本就是 CPU 负载慢了,这个软件能有这么高的 CPU ?
    m1nm13
        18
    m1nm13  
       18 小时 34 分钟前
    webview 最大的问题是 MAC/WIN 端因为浏览器不一样. 体验不一致. 一堆坑. 烂
    dimwoodxi27
        19
    dimwoodxi27  
       18 小时 21 分钟前
    其实你这样算内存还是不太准确的,你还没算程序运行时渲染调度系统 api 产生的内存保留在系统进程中,你程序进程的内存不代表你的程序占用的最终内存;如果这样就算出程序的内存占用,那把程序写为系统子进,程不就完全不占内存了吗
    june4
        20
    june4  
       18 小时 20 分钟前
    感觉你测试的方式不对。
    要不就这么测,看看一台电脑运行的程序数量上限,关掉虚拟内存,看看启动到多少个才崩掉。
    leyoumake1997
        21
    leyoumake1997  
       18 小时 18 分钟前
    @liuliuliuliu 原生基于 .net 开发 WPF win 是非常快的,编译后的可执行文件也小,吃的内存也小,就是原生组建丑了点,能用也行
    bclerdx
        22
    bclerdx  
       18 小时 7 分钟前 via Android
    @liuliuliuliu 怎么才算原生 UI 呢?
    g17
        23
    g17  
       18 小时 2 分钟前
    @EngAPI #2 不见得是 webview2 的问题,clash-verge-rev 自身的 bug 一堆
    liuliuliuliu
        24
    liuliuliuliu  
    PRO
       16 小时 56 分钟前
    @leyoumake1997 #21
    美丑不也是设计的事……
    https://avaloniaui.net/showcase
    可以看看这里的客户案例
    跨平台、原生编译、低内存占用、无须运行时
    liuliuliuliu
        25
    liuliuliuliu  
    PRO
       16 小时 54 分钟前
    @bclerdx 就是用操作系统的 api 来画界面啊,而不是用浏览器去渲染页面
    PaulSamuelson
        26
    PaulSamuelson  
       16 小时 22 分钟前
    用 wails ,tarui 是为了节约硬盘,降低分发成本啊。
    好多页游都用这个技术方案了。
    试想一下,一个产品要让用户先下载个 200MB 再体验,直接跑一半。
    至于运行时的内存,web 跨端是这样的。
    mmdsun
        27
    mmdsun  
       16 小时 8 分钟前 via iPhone
    我一般都用任务管理器的详情页,右键点击表头,有个选择列可以展开。直接看不准。
    CHENJIAJIE
        28
    CHENJIAJIE  
       14 小时 52 分钟前
    @EngAPI 我从 clash for windows 换到 clash-verge-rev 后 cpu 长期 90%,webview2 占用在 20-30%之间
    jiames1969
        29
    jiames1969  
       14 小时 34 分钟前
    这个主题非常好,最近用 tauri + ai 写了个小软件,确实很小,但性能真的一般,而且 tauri 2.0 感觉还有点坑。。。
    说实在的,有类似小程序这种框架统一桌面端也不错。
    ninjaJ
        30
    ninjaJ  
       13 小时 42 分钟前
    @jiames1969 可以分享一下吗,我最近也在做一个小软件,对用户体验要求比较高,用 tauri2 做一半纠结要不要上原生
    lete
        31
    lete  
       13 小时 31 分钟前
    @jiames1969 #29 比 electron 块多了
    我也写了个小软件,UI 就一个设置页面,5 个设置功能左右吧,打包出来就 5MB 左右。
    https://github.com/cliprtc/cliprtc
    ku9527
        32
    ku9527  
       12 小时 56 分钟前
    @skuuhui 360 会把你这种行为定义为病毒,你自己用可以.给用户使用的话,你准备去教育用户你的程序不是病毒吗?
    ThinkZ
        33
    ThinkZ  
       12 小时 3 分钟前
    节约了什么呢?除了安装包显得小一些罢了。

    硬盘里的程序(kaspersky)为了保证程序的稳定性,不采用系统自带的 webview2,只在自己目录里再放一个 500MB+的 webview2.
    otakustay
        34
    otakustay  
       9 小时 11 分钟前
    @skuuhui 实际上我就是这样做的,还能电脑上起着躺床上 ipad 访问使用
    suruiran
        35
    suruiran  
       8 小时 55 分钟前
    你要是严格的这样比较那就是比 Electron 省内存,——前提是一样的功能。至少 Wails 的 go 后端要比 Node 后端省内存吧。

    使用 Wails 主要是打包体积和后端的执行效率吧。
    suruiran
        36
    suruiran  
       8 小时 53 分钟前
    @ThinkZ 但是你要是想要使用 Go/Rust 来做 Electorn 的后端,Wails 这些就是方便呀。
    xjzshttps
        37
    xjzshttps  
       6 小时 39 分钟前
    @jiames1969 #29
    flutter
    这个可以 windows 、linux 、macos 、android 等都可以跑,磁盘、内存占用我记得是比这种浏览器方案小得多。
    jqtmviyu
        38
    jqtmviyu  
       5 小时 24 分钟前
    主要功能交给 go 后端来做. web 前端只用来展示和设置, 平时关掉. 其实也可以搞成纯 go 不要 wails. 托盘打开浏览器对应的网址, 端口冲突就随机一个.
    billccn
        39
    billccn  
       3 小时 6 分钟前
    WebView2 相对 Electron 肯定还是省内存的,因为操作系统对于不同进程载入同一个 DLL 是共用缓存的,也就说开 10 个 WebView2 的程序,其中 Chromium 的部分只占一份。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   936 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    ♥ Do have faith in what you're doing.