Đến nội dung

Benchmark ​

Chi phí của một ứng dụng myzig so với mygo, dự án mà myzig được port từ đó, và Electron. Thời gian dựng khung hình của giao diện native so với mygo nằm ở phần leo đồi (hillclimb/README.md); kích thước nhị phân nằm ở Kiểm thử, kích thước và tính năng.

Bộ nhớ của một cửa sổ trang web trên Windows ​

Một cửa sổ mở about:blank, đo bộ nhớ của toàn bộ cây tiến trình của ứng dụng (ứng dụng và mọi tiến trình WebView2 hoặc Chromium mà nó khởi chạy), tính theo private bytes, lấy trung vị của năm lần chạy:

tiến trình (MiB)myzig 0.1.7mygoElectron 38
ứng dụng3.747.436.3
browser (WebView2 Manager)29.830.4nằm trong ứng dụng
GPU51.850.977.1
renderer (trang web)19.423.522.6
network service11.511.213.1
storage service7.37.3nằm trong browser
crash handler2.42.4không có
tổng127.2173.7149.0
số tiến trình774
trên ổ đĩamyzigmygoElectron
những gì ứng dụng mang theo1.2 MiB (hello.exe)6.8 MiB324 MiB (Chromium riêng)

Windows 10 19045, Core i5-1145G7, WebView2 Runtime 155, myzig build ReleaseSmall, mygo ở commit 9c05b11 build bằng Go 1.27 (-s -w). Các cửa sổ đều ẩn; trang myzig bị ẩn sẽ yêu cầu WebView2 dùng mức bộ nhớ thấp (Trang web). Với about:blank mức này tiết kiệm không đáng kể: khi giữ mức bình thường, như một cửa sổ đang hiển thị, tổng của myzig là 130.7 MiB.

Ý nghĩa:

  • Phần lớn bộ nhớ thuộc về engine trình duyệt, và myzig với mygo dùng chung một engine: các tiến trình WebView2 của hai bên chỉ chênh nhau vài MiB. Electron chạy Chromium riêng, ít tiến trình hơn (tiến trình chính kiêm luôn browser, storage cũng chạy trong đó) nhưng tiến trình GPU lớn hơn.
  • Phần của riêng myzig khoảng 4 MiB: file thực thi, bộ nhớ nó cấp phát và các DLL hệ thống nó nạp. Go runtime của mygo khoảng 47 MiB, tiến trình chính của Electron (Node và browser) khoảng 36 MiB.
  • Một trang thật sẽ cộng thêm vào renderer và tiến trình GPU phần mà DOM, script và hình ảnh của nó cần, ở framework nào cũng như nhau.

Vì sao Task Manager hiện nhiều tiến trình ​

WebView2 là Chromium, và Chromium chia công việc ra nhiều tiến trình để một lỗi crash hay một trang bị tấn công chỉ nằm trong tiến trình của nó:

trong Task Managerviệc nó làm
WebView2 Managertiến trình browser: khởi chạy và giám sát các tiến trình còn lại
WebView2 GPU Processghép lớp và vẽ bằng GPU
WebView2 Utility: Network Servicemọi request mạng
WebView2 Utility: Storage ServicelocalStorage, IndexedDB, cache
WebView2: tiêu đề trangrenderer: DOM và JavaScript của trang

Ứng dụng WebView2 nào cũng có các tiến trình này; myzig không thêm tiến trình nào. Tùy bản Windows và bản runtime, Task Manager có khi gom chúng dưới ứng dụng, có khi để riêng thành "Microsoft Edge WebView2" trong mục background processes, khiến ứng dụng trông như chỉ tốn vài MiB. Để so sánh các bản build, hãy cộng ứng dụng và mọi tiến trình msedgewebview2.exe của nó trong tab Details, hoặc chạy script bên dưới, script này đi theo cây tiến trình.

Dùng ít bộ nhớ hơn ​

Chromium nhận cờ qua biến môi trường WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS, đặt trước khi ứng dụng khởi chạy. Đo với frontend của ví dụ hello (mỗi cấu hình chạy một lần, nên sai số vài MiB):

cờsố tiến trìnhtổng (MiB)
không có7131
--in-process-gpu6120
--disable-gpu793
--disable-gpu --in-process-gpu --enable-features=NetworkServiceInProcess2580

--disable-gpu vẽ trang bằng CPU: ổn với form và bảng, chậm hơn với animation, danh sách cuộn dài, canvas và WebGL. Các cờ in-process gộp phần GPU hoặc mạng vào tiến trình browser, nên một lỗi crash ở đó sẽ kéo sập trang; chúng cũng là phần nội bộ của Chromium mà bản runtime sau có thể bỏ. Browser, renderer, storage service và crash handler thì luôn chạy.

Đo lại ​

hillclimb/webview-memory có ba ứng dụng và measure.ps1, script chạy lần lượt từng ứng dụng mà không hiện cửa sổ nào và in ra bảng ở trên. Kết quả theo ngày, kèm so sánh myzig 0.1.5 với 0.1.7, nằm trong hillclimb/notes.

Phát hành theo giấy phép MIT.