
Electron và NW.js là hai framework đã có chỗ đứng vững chắc để xây dựng ứng dụng máy tính đa nền tảng bằng công nghệ web. Cả hai đều kết hợp Chromium và Node.js, cho phép nhà phát triển tạo ứng dụng bằng HTML, CSS, JavaScript và các framework frontend quen thuộc như React, Vue và Angular.
Thực tế, NW.js là framework ra đời trước. Ban đầu có tên là node-webkit, dự án bắt đầu vào năm 2011 và được công bố rộng rãi vào năm 2012. Electron ra đời sau, vào năm 2013, ban đầu do GitHub phát triển cho trình soạn thảo mã Atom. Dù xuất hiện muộn hơn, Electron cuối cùng đã trở thành framework được sử dụng rộng rãi hơn cho các ứng dụng máy tính phổ biến.
Ngày nay, Electron là nền tảng của những ứng dụng lớn như Visual Studio Code, Slack, Discord, Notion và Figma. Framework này cũng được hưởng lợi từ sự tham gia của các công ty công nghệ lớn và cơ chế quản trị thông qua OpenJS Foundation. Tại WebCatalog, chúng tôi đã chọn Electron làm nền tảng cho các ứng dụng máy tính đa nền tảng của mình.
Trong khi đó, NW.js có mức độ hiện diện công khai nhỏ hơn nhiều trong nhóm ứng dụng năng suất và kinh doanh lớn. Việc framework này tiếp tục được sử dụng thể hiện rõ nhất trong ngành game, bao gồm game độc lập và các tựa game được xây dựng bằng RPG Maker.
Vậy hai framework này khác nhau như thế nào, và nhà phát triển nên chọn framework nào?
Tổng quan về Electron và NW.js
Cả hai framework đều cho phép nhà phát triển xây dựng ứng dụng máy tính bằng công nghệ web, nhưng có cách tiếp cận khác nhau đối với kiến trúc ứng dụng, khả năng tích hợp gốc và bảo mật.
| Đặc điểm | Electron | NW.js |
|---|---|---|
| Lần đầu ra mắt | 2013 | 2011–2012 |
| Đơn vị phát triển ban đầu | GitHub | Trung tâm Công nghệ Nguồn mở Intel |
| Quản trị và hệ sinh thái | OpenJS Foundation, với các doanh nghiệp lớn đóng góp | Do cộng đồng duy trì, có nguồn gốc từ Intel |
| Bộ máy trình duyệt | Chromium | Chromium |
| Môi trường thực thi JavaScript | Node.js | Node.js |
| Nền tảng máy tính | macOS, Windows, Linux | macOS, Windows, Linux |
| Kiến trúc | Tiến trình chính và các tiến trình kết xuất | Kiến trúc Chromium tích hợp trực tiếp Node.js |
| Truy cập Node.js | Tiến trình chính và cơ chế tích hợp có kiểm soát trong tiến trình kết xuất | Truy cập trực tiếp từ các trang ứng dụng đủ điều kiện |
| Dung lượng ứng dụng | Tương đối lớn | Tương đối lớn |
| Hiệu năng | Phụ thuộc vào ứng dụng | Phụ thuộc vào ứng dụng |
| Bảo mật | Cơ chế sandbox, cách ly ngữ cảnh, IPC | Quyền truy cập Node có thể cấu hình và cách ly khung |
| Mức độ sử dụng | Được sử dụng rộng rãi trong các ứng dụng máy tính phổ biến | Hệ sinh thái nhỏ hơn, được sử dụng đáng kể trong game |
| Hỗ trợ thiết bị di động | Không hỗ trợ chính thức | Không hỗ trợ chính thức |
Những khác biệt quan trọng nhất không nằm ở hiệu năng hay dung lượng ứng dụng. Cả hai framework đều đóng gói kèm Chromium và Node.js, nên nhu cầu tài nguyên nhìn chung tương đương nhau. Thay vào đó, những khác biệt lớn liên quan đến kiến trúc, ranh giới bảo mật, công cụ phát triển và sự hỗ trợ từ hệ sinh thái.
Lịch sử: NW.js ra đời trước, nhưng Electron trở nên phổ biến hơn
NW.js là một trong những dự án đầu tiên chứng minh rằng nhà phát triển có thể kết hợp Node.js với công nghệ trình duyệt để tạo ứng dụng máy tính. Ban đầu có tên là node-webkit, dự án xuất phát từ Trung tâm Công nghệ Nguồn mở của Intel, bắt đầu được phát triển vào năm 2011 và có các bản phát hành công khai vào năm 2012.
Ý tưởng cốt lõi của nó rất đơn giản: cho phép JavaScript chạy trong môi trường giống trình duyệt truy cập trực tiếp các mô-đun Node.js. Nhờ vậy, nhà phát triển có thể tạo ứng dụng máy tính bằng công nghệ web quen thuộc mà không cần xây dựng giao diện gốc theo cách truyền thống.
Electron ra đời vào năm 2013 với tên gọi Atom Shell. GitHub phát triển nó làm nền tảng cho trình soạn thảo mã Atom, được đưa vào giai đoạn beta công khai vào năm 2014. Electron được thiết kế như một lựa chọn thay thế cho các framework ứng dụng máy tính dựa trên web có sẵn lúc bấy giờ, bao gồm node-webkit và Chromium Embedded Framework.
Dù cả hai framework đều hướng đến mục tiêu giúp nhà phát triển web dễ dàng xây dựng ứng dụng máy tính, Electron áp dụng một kiến trúc khác, tách biệt chức năng cấp ứng dụng khỏi nội dung web. Cách tiếp cận này ngày càng hấp dẫn khi các nhà phát triển bắt đầu xây dựng những ứng dụng phức tạp hơn.
Sau đó, Electron được các công ty khởi nghiệp và công ty công nghệ lớn sử dụng. GitHub, Slack, Microsoft và các tổ chức khác đã đóng góp vào quá trình phát triển cũng như hệ sinh thái của nó. Năm 2019, Electron gia nhập OpenJS Foundation, chuyển từ quyền sở hữu của GitHub sang một tổ chức nguồn mở trung lập.
Ngày nay, Electron hoạt động theo một mô hình quản trị đã được thiết lập, với các nhóm công tác phụ trách bảo mật, phát hành, API, nâng cấp Chromium và Node.js, cùng nhiều lĩnh vực khác. Các kỹ sư thuộc những tổ chức như Microsoft và Slack đã tham gia duy trì và quản trị dự án.
NW.js cũng có nguồn gốc từ doanh nghiệp, do được tạo ra tại Intel. Tuy nhiên, hệ sinh thái hiện tại của nó nhỏ hơn và không có mức độ tham gia công khai rộng rãi tương đương từ các công ty phần mềm máy tính lớn.
Lịch sử này cho thấy một điểm khác biệt quan trọng: ra đời trước không bảo đảm vị thế dẫn đầu lâu dài. NW.js đã góp phần định hình ý tưởng xây dựng ứng dụng máy tính bằng Chromium và Node.js, nhưng Electron thu hút được một hệ sinh thái rộng lớn hơn gồm các nhà phát triển, người duy trì và đơn vị sử dụng thương mại.
Để tìm hiểu thêm, hãy xem bài nhìn lại 10 năm của Electron, việc Electron gia nhập OpenJS Foundation và lịch sử dự án node-webkit.
Kiến trúc: Tiến trình chính và tích hợp trực tiếp Node.js
Electron sử dụng kiến trúc đa tiến trình kế thừa từ Chromium. Mỗi ứng dụng Electron có một tiến trình chính chịu trách nhiệm quản lý cửa sổ, các sự kiện trong vòng đời ứng dụng, tích hợp với hệ điều hành và những chức năng có đặc quyền. Nội dung web chạy trong các tiến trình kết xuất riêng biệt, giao tiếp với tiến trình chính thông qua cơ chế giao tiếp liên tiến trình (IPC).
Điều này tạo ra sự phân biệt giữa logic ứng dụng và mã giao diện người dùng. Tiến trình kết xuất thường hoạt động giống môi trường trình duyệt thông thường, còn tiến trình chính xử lý các thao tác cần truy cập Node.js hoặc API gốc. Electron cũng cung cấp các tập lệnh preload và API contextBridge, cho phép nhà phát triển cung cấp một số chức năng được chọn cho tiến trình kết xuất mà không cấp quyền truy cập Node.js không giới hạn.
NW.js có cách tiếp cận khác. Nó được thiết kế để cung cấp chức năng Node.js trực tiếp trong ứng dụng web. Trong một trang ứng dụng đủ điều kiện, nhà phát triển có thể truy cập các mô-đun Node.js bằng những API JavaScript quen thuộc mà không cần thiết lập giao diện IPC riêng cho từng thao tác.
Ví dụ, một ứng dụng NW.js được đóng gói cục bộ có thể sử dụng Node.js trực tiếp từ tập lệnh chạy trong trang của nó:
const fs = require('node:fs');
const content = fs.readFileSync('notes.txt', 'utf8');
document.body.textContent = content;
Sự đơn giản này là một trong những ưu điểm đặc trưng của NW.js. Nhà phát triển có thể kết hợp API trình duyệt và chức năng Node.js mà không nhất thiết phải tách mã thành các lớp ứng dụng riêng biệt. NW.js cũng hỗ trợ các ngữ cảnh JavaScript riêng biệt và chế độ ngữ cảnh kết hợp, mang lại sự linh hoạt trong cách chức năng của trình duyệt và Node.js tương tác với nhau.
Electron nhìn chung khuyến khích sự tách biệt rõ ràng hơn. Để đọc một tệp từ tiến trình kết xuất, một ứng dụng Electron được xây dựng theo cách bảo mật thông thường sẽ cung cấp một thao tác giới hạn thông qua tập lệnh preload và xử lý việc truy cập hệ thống tệp trong tiến trình chính.
Cách tiếp cận đó đòi hỏi thêm mã, nhưng làm rõ hơn ranh giới giữa chức năng ứng dụng có đặc quyền và nội dung web. Đối với ứng dụng phức tạp, sự tách biệt này có thể cải thiện khả năng bảo trì và giúp các trách nhiệm về bảo mật dễ hiểu hơn.
Không có kiến trúc nào tốt hơn trong mọi trường hợp. NW.js có thể tạo cảm giác đơn giản hơn với ứng dụng nhỏ hoặc dự án hưởng lợi từ việc tích hợp trực tiếp Node.js. Electron cung cấp một cấu trúc có thể đặc biệt hữu ích khi ứng dụng ngày càng phức tạp.
Hiệu năng, mức sử dụng bộ nhớ và dung lượng ứng dụng
Vì cả Electron và NW.js đều đóng gói kèm Chromium và Node.js, không framework nào có lợi thế kiến trúc cố hữu tương đương với sự khác biệt về dung lượng giữa Electron và Tauri.
Ngay cả một ứng dụng đơn giản được xây dựng bằng một trong hai framework cũng cần phân phối kèm một môi trường thực thi có dung lượng đáng kể. Cả hai framework cũng có thể tạo nhiều tiến trình Chromium, làm tăng mức tiêu thụ bộ nhớ nhưng giúp cách ly các tác vụ và cải thiện khả năng phản hồi.
Việc NW.js tích hợp trực tiếp Node.js với môi trường trình duyệt có thể giảm nhu cầu sử dụng IPC trong một số thao tác. Tùy cấu hình ngữ cảnh, mã JavaScript có thể tương tác trực tiếp với chức năng Node.js, giúp một số thao tác đơn giản hơn và có khả năng giảm chi phí giao tiếp.
Electron tách các thao tác có đặc quyền khỏi mã kết xuất, nên cần đến IPC khi giao tiếp qua ranh giới tiến trình. Tuy nhiên, điều này không có nghĩa Electron vốn chậm hơn. Chi phí bổ sung có thể không đáng kể với các tương tác giao diện người dùng thông thường, và sự tách biệt có thể giúp giữ các tác vụ backend tốn tài nguyên ở ngoài tiến trình kết xuất.
Trong thực tế, hiệu năng ứng dụng phụ thuộc rất nhiều vào cách nhà phát triển sử dụng Chromium, quản lý tiến trình nền, triển khai việc kết xuất và xử lý trạng thái ứng dụng.
Để so sánh có ý nghĩa, nhà phát triển nên đánh giá:
- Thời gian khởi động: Ứng dụng sẵn sàng cho tương tác nhanh đến mức nào.
- Mức sử dụng bộ nhớ: Cả khi không hoạt động lẫn khi xử lý khối lượng công việc thực tế.
- Mức sử dụng CPU: Lượng tài nguyên tiêu thụ trong quá trình kết xuất và thực hiện các tác vụ nền.
- Dung lượng ứng dụng: Dung lượng tải xuống và yêu cầu lưu trữ sau khi cài đặt.
- Khả năng phản hồi: Giao diện hoạt động tốt đến mức nào trong các tác vụ tốn nhiều tài nguyên.
Không nên khẳng định framework nào nhanh hơn một cách tuyệt đối nếu chưa đo lường trên một ứng dụng có tính đại diện. Khác biệt về phiên bản Chromium, cấu hình bản dựng, mô-đun gốc và kiến trúc ứng dụng đều có thể ảnh hưởng đến kết quả đo hiệu năng.
Với các nhà phát triển chủ yếu muốn giảm dung lượng ứng dụng, việc chuyển từ Electron sang NW.js khó có thể mang lại mức tiết kiệm đáng kể như khi chuyển sang một framework sử dụng webview của hệ thống.
Bảo mật: Những cách tiếp cận khác nhau đối với quyền truy cập chức năng gốc
Bảo mật là một trong những khác biệt quan trọng nhất giữa Electron và NW.js, đặc biệt với các ứng dụng hiển thị website từ xa hoặc nội dung không đáng tin cậy khác.
Electron cung cấp nhiều cơ chế bảo mật, bao gồm sandbox của Chromium, cách ly ngữ cảnh và khả năng tắt tích hợp Node.js trong các tiến trình kết xuất. Các phiên bản Electron hiện đại bật sẵn những biện pháp bảo vệ quan trọng, và tài liệu bảo mật của dự án đặc biệt khuyến nghị tách các API gốc có đặc quyền khỏi nội dung từ xa.
NW.js cho phép truy cập Node.js trực tiếp hơn từ các trang ứng dụng đủ điều kiện. Điều này có thể đơn giản hóa việc phát triển, nhưng cũng đòi hỏi cân nhắc cẩn thận nội dung nào được cấp những đặc quyền đó.
NW.js phân biệt giữa khung thông thường và khung được bật Node. Nó cũng hỗ trợ các thiết lập như node-remote để kiểm soát URL từ xa nào có thể truy cập chức năng Node.js. Thành phần webview của nó có thể hiển thị nội dung khách trong một tiến trình riêng mà không tự động cấp cho nội dung đó các đặc quyền của ứng dụng.
| Khía cạnh bảo mật | Electron | NW.js |
|---|---|---|
| Quyền truy cập Node.js có đặc quyền | Chủ yếu qua tiến trình chính và các cầu nối có kiểm soát | Có sẵn trực tiếp trong các ngữ cảnh ứng dụng đủ điều kiện |
| Cách ly nội dung từ xa | Các tiến trình kết xuất và nội dung web trong sandbox | Khung thông thường và webview được cách ly |
| Cung cấp API gốc | IPC và contextBridge | Các ngữ cảnh Node và quyền truy cập có thể cấu hình |
| Sandbox của Chromium | Được hỗ trợ với thiết lập mặc định an toàn | Phụ thuộc vào loại khung và cấu hình |
| Trách nhiệm của nhà phát triển | Kiểm tra IPC, điều hướng, quyền và các API được cung cấp | Kiểm soát khung có đặc quyền, quyền truy cập Node và nội dung từ xa |
Không nên mặc nhiên coi Electron hay NW.js là một trình duyệt đa dụng an toàn. Các ứng dụng hiển thị website bất kỳ của bên thứ ba cần có những biện pháp kiểm soát bảo mật bổ sung, bất kể sử dụng framework nào.
Với ứng dụng được phát triển hoàn toàn xoay quanh nội dung cục bộ đáng tin cậy, khả năng tích hợp trực tiếp của NW.js có thể rất tiện lợi. Với ứng dụng cần tách biệt chặt chẽ giữa mã có đặc quyền và nội dung web không đáng tin cậy, kiến trúc của Electron có thể giúp làm rõ các ranh giới đó.
Cuối cùng, bảo mật phụ thuộc vào thiết kế ứng dụng, cấu hình, quản lý các thành phần phụ thuộc và tốc độ nhà phát triển áp dụng các bản cập nhật bảo mật.
Mức độ sử dụng: Electron chiếm ưu thế trong các ứng dụng máy tính phổ biến
Một trong những khác biệt đáng kể nhất giữa Electron và NW.js là mức độ được các nhà phát triển phần mềm máy tính sử dụng.
Dù là dự án ra đời sau, Electron đã khẳng định vị thế là một framework phổ biến cho các ứng dụng máy tính được đưa vào sử dụng thực tế. Nó được áp dụng trong nhiều lĩnh vực: công cụ phát triển, nền tảng giao tiếp, phần mềm năng suất, ứng dụng thiết kế và tiện ích kinh doanh.
Một số ví dụ nổi tiếng gồm:
| Công ty | Ứng dụng Electron |
|---|---|
| Microsoft | Visual Studio Code |
| Salesforce | Slack |
| Discord | Discord |
| Notion | Notion |
| Figma | Figma |
| GitHub | GitHub Desktop |
| Signal | Signal Desktop |
| Postman | Postman |
Những sản phẩm này cho thấy Electron có thể hỗ trợ các ứng dụng máy tính tinh vi được hàng triệu người sử dụng. Việc được sử dụng rộng rãi cũng góp phần tạo nên một hệ sinh thái phong phú gồm các thư viện, tài liệu, công cụ gỡ lỗi và giải pháp đóng gói.
Sự tham gia của doanh nghiệp là một lợi thế khác. Electron ban đầu do GitHub phát triển, sau đó thu hút đóng góp từ các kỹ sư tại những công ty công nghệ lớn. Cơ chế quản trị thông qua OpenJS Foundation cung cấp một cơ cấu tổ chức cho việc cộng tác, duy trì bảo mật, quản lý phát hành và phát triển dài hạn.
Điều này không có nghĩa mọi công ty sử dụng Electron đều đóng góp trực tiếp cho framework, cũng không bảo đảm Electron sẽ luôn được duy trì tốt hơn. Tuy nhiên, một framework được sử dụng rộng rãi với nhiều bên liên quan thương mại đa dạng có thể hưởng lợi từ nguồn đầu tư kỹ thuật chung và kinh nghiệm vận hành thực tế.
NW.js có bức tranh sử dụng khác. Dù đã được dùng để xây dựng ứng dụng máy tính, tương đối ít ứng dụng năng suất hoặc kinh doanh hiện đại nổi bật công khai xác nhận NW.js là framework của mình. Nhiều ứng dụng thường được nhắc đến trong các danh sách giới thiệu NW.js là những dự án cũ, khiến các danh sách đó ít hữu ích hơn khi đánh giá mức độ sử dụng hiện tại.
Điều này không có nghĩa NW.js đã bị bỏ rơi hoặc không còn được sử dụng. Nó vẫn tiếp tục có các bản phát hành tích hợp phiên bản Chromium và Node.js mới. Tuy nhiên, hệ sinh thái có thể quan sát được của nó nhỏ hơn đáng kể so với Electron trong lĩnh vực phần mềm máy tính phổ biến.
Với nhà phát triển đang chọn framework cho một ứng dụng thương mại mới, khác biệt này rất quan trọng. Hệ sinh thái lớn hơn thường giúp dễ tìm giải pháp có sẵn, tuyển nhà phát triển có kinh nghiệm phù hợp và giải quyết vấn đề trong quá trình vận hành thực tế.
Sự phổ biến không khiến Electron vượt trội về kỹ thuật ở mọi khía cạnh, nhưng mức độ sử dụng rộng rãi hơn và sự tham gia của doanh nghiệp là những lợi thế thực tế không nên bỏ qua.
Bạn có thể khám phá thêm ví dụ trong danh mục ứng dụng Electron chính thức.
Nơi NW.js vẫn phổ biến: Game độc lập
Dù NW.js không hiện diện rộng rãi trong các ứng dụng năng suất hiện đại lớn, nó vẫn giữ vị trí đáng chú ý trong phát triển game, đặc biệt là trong cộng đồng nhà phát triển độc lập.
Một lý do là khả năng tích hợp với các công cụ phát triển game như RPG Maker MV. Game được tạo bằng RPG Maker MV có thể sử dụng NW.js làm môi trường thực thi trên máy tính, cho phép game dựa trên HTML5 và JavaScript chạy dưới dạng ứng dụng độc lập.
Điều này có nghĩa nhà phát triển có thể sử dụng NW.js một cách gián tiếp thông qua bộ máy làm game, thay vì chủ động chọn nó làm framework ứng dụng máy tính đa dụng.
Cũng có bằng chứng độc lập cho thấy NW.js tiếp tục xuất hiện trong các game mới phát hành. SteamDB theo dõi các game sử dụng NW.js bằng cách tự động kiểm tra dấu hiệu nhận diện công nghệ trong các tệp được phân phối. Cơ sở dữ liệu này bao gồm các game phát hành trong năm 2025 và 2026, cung cấp bằng chứng về việc NW.js vẫn được sử dụng thay vì phụ thuộc hoàn toàn vào những danh sách giới thiệu ứng dụng có thể đã lỗi thời.
Các ví dụ có liên quan đến NW.js bao gồm:
| Game | Thể loại | Phát hành trên Steam |
|---|---|---|
| Look Outside | Nhập vai kinh dị | Tháng 3 năm 2025 |
| OMORI | Nhập vai | Tháng 12 năm 2020 |
| CrossCode | Nhập vai hành động | Tháng 9 năm 2018 |
| Fear & Hunger | Nhập vai kinh dị | Tháng 12 năm 2018 |
| Ib | Phiêu lưu kinh dị | Tháng 4 năm 2022 |
| Saihate Station | Phiêu lưu | Tháng 3 năm 2025 |
| Sheepy: A Short Adventure | Đi cảnh | Tháng 2 năm 2024 |
Nguồn: Khả năng phát hiện công nghệ NW.js của SteamDB.
SteamDB tự động nhận diện công nghệ từ các tệp game, nên từng kết quả phát hiện có thể có sai sót hoặc chỉ phản ánh một thành phần phụ thuộc đi kèm, thay vì môi trường thực thi được nhà phát triển chủ động lựa chọn. Sự hiện diện của NW.js cũng không xác định được game sử dụng phiên bản framework nào hay nhà phát triển có tích cực duy trì phiên bản đó hay không.
Tuy vậy, những ví dụ này cho thấy NW.js vẫn là một phần của hệ sinh thái phát triển game hiện đại.
Điều này tạo nên một sự khác biệt thú vị giữa hai framework. Electron hiện diện rất rõ trong các ứng dụng máy tính phổ biến, đặc biệt là công cụ năng suất và phát triển. NW.js ít hiện diện hơn trong những nhóm đó nhưng vẫn tiếp tục xuất hiện trong các game do nhà phát triển độc lập tạo ra.
Với nhà phát triển xây dựng phần mềm kinh doanh, công cụ giao tiếp hoặc ứng dụng năng suất phức tạp, hệ sinh thái Electron có thể phù hợp hơn. Với nhà phát triển làm việc cùng RPG Maker hoặc duy trì game được xây dựng dựa trên NW.js, framework lâu đời hơn này vẫn là một lựa chọn đã được kiểm chứng và thiết thực.
Trải nghiệm phát triển, công cụ và bảo trì dài hạn
Cả hai framework đều hỗ trợ công nghệ frontend hiện đại và các gói Node.js, giúp nhà phát triển quen với phát triển web dễ tiếp cận. Tuy nhiên, Electron có hệ sinh thái lớn hơn đáng kể, tập trung vào phần mềm máy tính đa dụng.
NW.js cung cấp mô hình phát triển tương đối đơn giản. Một ứng dụng đơn giản có thể được định nghĩa bằng tệp khai báo package.json và một điểm vào HTML. Nhà phát triển có thể truy cập trực tiếp các mô-đun Node.js từ những trang ứng dụng đủ điều kiện và sử dụng API của NW.js để quản lý cửa sổ, menu, khay hệ thống cùng các chức năng máy tính khác.
Electron thường đòi hỏi nhiều cấu trúc ban đầu hơn. Nhà phát triển tạo điểm vào cho tiến trình chính, cấu hình cửa sổ ứng dụng và quản lý giao tiếp giữa tiến trình chính với các tiến trình kết xuất. Điều này có thể tạo cảm giác phức tạp hơn với ứng dụng nhỏ, nhưng cũng khuyến khích nhà phát triển tổ chức chức năng ứng dụng thành các lớp riêng biệt.
Electron được hưởng lợi từ những công cụ đã có chỗ đứng như Electron Forge và electron-builder, cung cấp giải pháp đóng gói, ký, phân phối và cập nhật ứng dụng. Mức độ sử dụng rộng rãi cũng đồng nghĩa nhà phát triển có thể tìm thấy nhiều ví dụ và thảo luận cộng đồng hơn về các vấn đề nâng cao trong phát triển ứng dụng máy tính.
NW.js cung cấp công cụ đóng gói như nw-builder và hỗ trợ đóng gói thủ công. Nó cũng cung cấp các API có nguồn gốc từ kiến trúc ứng dụng và tiện ích mở rộng của Chromium, có thể hấp dẫn với những dự án vốn đã sử dụng các API đó.
Cả hai framework đều yêu cầu nhà phát triển xử lý khác biệt giữa các hệ điều hành, ký mã, khả năng tương thích của mô-đun gốc và cập nhật ứng dụng. Không framework nào loại bỏ được sự phức tạp của việc phân phối phần mềm máy tính dùng trong thực tế.
Quy mô và thành phần của hệ sinh thái trở nên đặc biệt quan trọng đối với bảo trì dài hạn. Các nhóm xây dựng ứng dụng thương mại có thể cần giải pháp cho việc ký mã, tự động cập nhật, báo cáo sự cố, khả năng tiếp cận, tích hợp gốc và các lỗi riêng của từng nền tảng.
Việc Electron được các công ty phần mềm lớn sử dụng rộng rãi hơn giúp dễ tìm những phương pháp đã được kiểm chứng và giải pháp có thể tái sử dụng cho nhiều yêu cầu này. NW.js vẫn có đủ năng lực, nhưng nhà phát triển có thể tìm thấy ít ví dụ hoặc giải pháp tích hợp còn được duy trì hơn cho các chức năng máy tính chuyên biệt.
Với dự án dự kiến được duy trì trong nhiều năm, độ trưởng thành của hệ sinh thái và nguồn đầu tư liên tục xứng đáng được cân nhắc ngang với API của framework hay kết quả đo hiệu năng.
Vì sao WebCatalog chọn Electron
Tại WebCatalog, chúng tôi chọn Electron vì kiến trúc của nó rất phù hợp với yêu cầu của các sản phẩm. WebCatalog cho phép người dùng biến website thành ứng dụng máy tính, quản lý nhiều tài khoản độc lập và sắp xếp các ứng dụng trên macOS, Windows và Linux.
Khác với nhà phát triển xây dựng ứng dụng máy tính thông thường có frontend hoàn toàn do họ kiểm soát, chúng tôi cần hỗ trợ các website do hàng nghìn nhà phát triển khác nhau tạo ra. Những website này có thể dựa vào các hệ thống xác thực, cơ chế lưu trữ, API trình duyệt, tính năng đa phương tiện và ứng dụng JavaScript phức tạp khác nhau.
Cả Electron và NW.js đều sử dụng Chromium, nên mang lại lợi thế tương tự về khả năng tương thích của bộ máy trình duyệt. Với chúng tôi, điểm khác biệt nằm ở mức độ kiểm soát mà framework cung cấp đối với cửa sổ ứng dụng, phiên trình duyệt, điều hướng, quyền và việc tách biệt mã ứng dụng có đặc quyền khỏi nội dung từ xa.
Electron cung cấp một bộ API trưởng thành cho những yêu cầu này. Các giao diện BrowserWindow, webContents và session cho phép chúng tôi quản lý hành vi trình duyệt ở cấp tương đối thấp. Các phân vùng phiên được lưu bền vững đặc biệt quan trọng vì chúng cho phép người dùng duy trì đăng nhập nhiều tài khoản trên cùng một website mà không dùng chung cookie và dữ liệu phiên khác.
NW.js cũng hỗ trợ webview nhúng, quản lý cookie và phân vùng lưu trữ, nên những khả năng này không phải độc quyền của Electron. Tuy nhiên, tiến trình ứng dụng chuyên biệt và các API quản lý trình duyệt đã được kiểm chứng của Electron cung cấp một kiến trúc phù hợp với nhu cầu của chúng tôi.
Bảo mật là một yếu tố quan trọng khác. Vì WebCatalog hiển thị các website của bên thứ ba mà chúng tôi không kiểm soát, chúng tôi cần tách biệt cẩn thận nội dung từ xa khỏi chức năng ứng dụng có đặc quyền. Mô hình tiến trình, cơ chế cách ly ngữ cảnh và IPC của Electron giúp chúng tôi duy trì sự tách biệt đó, dù chúng tôi vẫn phải tự triển khai và duy trì các biện pháp kiểm soát bảo mật phù hợp.
Cuối cùng, hệ sinh thái Electron giúp việc phát triển và bảo trì đa nền tảng trở nên khả thi hơn. Các ứng dụng của chúng tôi cần chạy trên macOS, Windows và Linux, đồng thời hỗ trợ tính năng riêng của từng nền tảng, đóng gói, ký và cập nhật. Công cụ, tài liệu và mức độ sử dụng rộng rãi trong thực tế của Electron tạo nền tảng vững chắc cho công việc này.
Chúng tôi cũng đánh giá cao hệ sinh thái phát triển dài hạn của Electron. Sự tham gia của các công ty công nghệ lớn và cơ chế quản trị thông qua OpenJS Foundation giúp chúng tôi tin tưởng hơn vào khả năng tiếp cận nguồn lực kỹ thuật, hoạt động duy trì bảo mật và sự hỗ trợ từ cộng đồng khi sản phẩm phát triển.
Chúng tôi nhận thức được những nhược điểm của Electron, đặc biệt là dung lượng ứng dụng và nhu cầu tài nguyên. Thay vì thay thế framework, chúng tôi tiếp tục tìm cách giảm các chi phí không cần thiết. Chẳng hạn, chúng tôi đã triển khai bản sao APFS để giảm dung lượng ổ đĩa mà các ứng dụng Mac được tạo ra sử dụng.
Quyết định của chúng tôi không xuất phát từ quan niệm rằng NW.js không thể hỗ trợ phần mềm tinh vi. Cả hai framework đều mang lại tính nhất quán của Chromium mà chúng tôi coi trọng. Với WebCatalog, kiến trúc, các biện pháp kiểm soát bảo mật, mức độ sử dụng phổ biến rộng rãi hơn và hệ sinh thái kỹ thuật vững chắc khiến Electron phù hợp hơn.
Những trường hợp NW.js vẫn phù hợp
Dù Electron có hệ sinh thái lớn hơn, NW.js vẫn giữ một số lợi thế đáng kể mà nhà phát triển nên cân nhắc.
Tính năng đặc trưng nhất của nó là khả năng truy cập trực tiếp Node.js từ những ngữ cảnh trình duyệt đủ điều kiện. Với nhà phát triển đang chuyển một ứng dụng web hiện có thành ứng dụng máy tính, đây có thể là cách thuận tiện để bổ sung khả năng truy cập hệ thống tệp, tích hợp hệ điều hành và các chức năng gốc khác mà không cần thiết kế một lớp giao tiếp riêng.
NW.js có thể là lựa chọn tốt khi:
- Xây dựng game bằng chuỗi công cụ hiện có dựa trên NW.js. Nhà phát triển sử dụng RPG Maker MV hoặc duy trì dự án phụ thuộc vào NW.js có thể không có nhiều lý do để đổi framework.
- Cần tích hợp trực tiếp Node.js. Ứng dụng có thể hưởng lợi từ việc truy cập trực tiếp chức năng Node.js ngay trong giao diện đáng tin cậy của mình.
- Ứng dụng tương đối đơn giản. Một dự án nhỏ có thể không cần đến sự tách biệt rõ ràng hơn giữa logic tiến trình chính và logic kết xuất của Electron.
- Dự án đã sử dụng NW.js. Việc chuyển sang Electron có thể mang lại ít lợi ích nếu ứng dụng hiện tại ổn định và được duy trì tốt.
- Một số API ứng dụng Chromium cụ thể đóng vai trò quan trọng. NW.js cung cấp quyền truy cập các API Chrome được hỗ trợ, có thể hữu ích cho một số ứng dụng nhất định.
NW.js cũng vẫn được duy trì tích cực. Các bản cập nhật Chromium liên tục cho thấy nó tiếp tục phát triển cùng nền tảng trình duyệt.
Với nhà phát triển đang duy trì ứng dụng hoặc game NW.js hiện có, việc chuyển sang Electron đòi hỏi đánh giá những khác biệt về kiến trúc, thay đổi trong đóng gói và yêu cầu tương thích. Trừ khi có lợi ích kỹ thuật hoặc kinh doanh rõ ràng, tiếp tục sử dụng framework hiện tại có thể là phương án thực tế hơn.
Electron và NW.js: Bạn nên chọn framework nào?
Cả hai framework đều có khả năng xây dựng ứng dụng máy tính đa nền tảng. Với dự án mới, lựa chọn phần lớn phụ thuộc vào cách nhà phát triển muốn tổ chức mã và hệ sinh thái nào đáp ứng tốt nhất các yêu cầu của họ.
| Ưu tiên của bạn | Lựa chọn khởi đầu phù hợp hơn | Lý do |
|---|---|---|
| Ứng dụng máy tính lớn, phức tạp | Electron | Kiến trúc và hệ sinh thái đã được kiểm chứng |
| Phần mềm năng suất hoặc kinh doanh phổ biến | Electron | Được sử dụng rộng rãi hơn nhiều trong các nhóm này |
| Hệ sinh thái dài hạn và sự tham gia của doanh nghiệp | Electron | OpenJS Foundation và các đơn vị đóng góp lớn trong ngành |
| Game được xây dựng bằng RPG Maker MV | NW.js | Khả năng tích hợp và chuỗi công cụ đã có sẵn |
| Truy cập trực tiếp Node.js từ các trang ứng dụng | NW.js | Đặc điểm kiến trúc cốt lõi |
| Tách biệt rõ ràng giao diện và mã có đặc quyền | Electron | Mô hình tiến trình chính/kết xuất và IPC |
| Bộ công cụ đóng gói và phân phối phong phú | Electron | Hệ sinh thái công cụ trưởng thành |
| Ứng dụng NW.js hiện có | NW.js | Tránh việc chuyển đổi không cần thiết |
| Tính nhất quán của Chromium trên các nền tảng máy tính | Cả hai đều phù hợp | Cả hai đều đóng gói kèm Chromium |
| Dung lượng ứng dụng tối thiểu | Không bên nào có lợi thế rõ ràng | Cả hai đều đóng gói kèm Chromium và Node.js |
| Quản lý phiên trình duyệt và cửa sổ | Electron | Các API chuyên biệt, trưởng thành |
| Tài nguyên và ví dụ cộng đồng phong phú | Electron | Được sử dụng rộng rãi hơn trong các ứng dụng phổ biến |
Với phần lớn các nhóm bắt đầu một dự án ứng dụng máy tính mới có quy mô đáng kể, Electron là lựa chọn mặc định vững chắc hơn. Kiến trúc, hệ sinh thái, hướng dẫn bảo mật, sự tham gia của doanh nghiệp và mức độ sử dụng rộng rãi trong thực tế khiến nó trở thành một framework thiết thực cho phát triển dài hạn.
NW.js vẫn đáng cân nhắc cho dự án hưởng lợi từ việc tích hợp trực tiếp Node.js, quy trình phát triển game vốn đã phụ thuộc vào nó hoặc cơ sở mã NW.js hiện có. Nó có thể đơn giản hơn trong một số trường hợp sử dụng, và nền tảng Chromium mang lại khả năng tương thích rộng với nền tảng web.
Nhà phát triển cũng nên nhớ rằng không framework nào đặc biệt nhẹ. Nếu dung lượng ứng dụng nhỏ và mức tiêu thụ tài nguyên cơ bản thấp là mối quan tâm chính, những lựa chọn thay thế như Tauri có thể đáng cân nhắc.
Lời kết
Electron và NW.js có nhiều điểm tương đồng hơn là khác biệt. Cả hai kết hợp Chromium và Node.js để nhà phát triển xây dựng ứng dụng máy tính đa nền tảng bằng công nghệ web quen thuộc. Cả hai đều hỗ trợ các framework JavaScript hiện đại, tích hợp gốc với hệ điều hành và những trải nghiệm ứng dụng máy tính tinh vi.
NW.js ra đời trước, giới thiệu cách tiếp cận kết hợp Node.js với công nghệ web từ trước khi Electron xuất hiện. Tuy nhiên, sau đó Electron trở thành framework được sử dụng rộng rãi hơn cho các ứng dụng máy tính phổ biến, nhờ khoản đầu tư ban đầu của GitHub, đóng góp từ những công ty công nghệ lớn và cơ chế quản trị thông qua OpenJS Foundation.
Mô hình sử dụng của hai framework khác nhau rõ rệt. Electron là nền tảng của những ứng dụng năng suất, giao tiếp và phát triển phổ biến được hàng triệu người sử dụng. NW.js ít hiện diện hơn trong thị trường đó, nhưng vẫn giữ vị trí đáng kể trong game độc lập, bao gồm các tựa game dựa trên RPG Maker và những game mới phát hành gần đây.
Tại WebCatalog, chúng tôi lựa chọn cùng framework với nhiều nhà phát triển phần mềm máy tính lớn. Electron cung cấp tính nhất quán của Chromium, khả năng quản lý trình duyệt, kiến trúc bảo mật và công cụ đa nền tảng cần thiết để hỗ trợ nhiều loại ứng dụng web trên macOS, Windows và Linux.
NW.js không lỗi thời, và việc nó tiếp tục được sử dụng trong phát triển game cho thấy nó vẫn hữu ích. Nhưng với nhà phát triển bắt đầu một ứng dụng máy tính đa dụng mới, hệ sinh thái rộng hơn, công cụ đã được kiểm chứng, sự tham gia của doanh nghiệp và cộng đồng lớn hơn khiến Electron trở thành lựa chọn mặc định thực tế hơn.
Cuối cùng, lựa chọn tốt hơn phụ thuộc vào yêu cầu của ứng dụng, kinh nghiệm của nhóm phát triển và chi phí duy trì phần mềm trong dài hạn.


