
Electron và Chromium Embedded Framework (CEF) là hai công nghệ đã được khẳng định để đưa Chromium vào các ứng dụng máy tính. Cả hai đều cho phép nhà phát triển xây dựng phần mềm hiển thị các trang web và giao diện web hiện đại trên macOS, Windows và Linux. Tuy nhiên, chúng phục vụ những mục đích khác nhau về căn bản.
Electron là một framework ứng dụng máy tính hoàn chỉnh, kết hợp Chromium, Node.js và các API gốc của hệ điều hành. Nhà phát triển có thể xây dựng toàn bộ ứng dụng bằng JavaScript, TypeScript, HTML và CSS mà không cần nhiều kinh nghiệm lập trình mã gốc. Ngược lại, CEF là một framework để nhúng Chromium vào các ứng dụng hiện có hoặc ứng dụng mới, thường được viết bằng C++ hoặc các ngôn ngữ lập trình mã gốc khác.
Cả hai công nghệ đều được sử dụng rộng rãi trong các phần mềm đang được triển khai thực tế. Electron là nền tảng cho những ứng dụng như Visual Studio Code, Slack, Discord và Notion, còn CEF được sử dụng trong các sản phẩm như Spotify, Steam và OBS Studio. Tại WebCatalog, chúng tôi đã chọn Electron để xây dựng các ứng dụng máy tính đa nền tảng của mình.
Vậy chúng khác nhau ở đâu, và khi nào nên chọn công nghệ này thay vì công nghệ kia?
Tổng quan về Electron và CEF
Mặc dù Electron và CEF đều sử dụng Chromium, chúng khác biệt đáng kể về kiến trúc, trải nghiệm phát triển và mục đích ứng dụng.
| Tính năng | Electron | Chromium Embedded Framework (CEF) |
|---|---|---|
| Ra mắt lần đầu | 2013 | 2008 |
| Mục đích chính | Xây dựng ứng dụng máy tính hoàn chỉnh | Nhúng Chromium vào các ứng dụng khác |
| Công cụ trình duyệt | Chromium | Chromium |
| Ngôn ngữ chính | JavaScript, TypeScript | C, C++, cùng các lớp liên kết ngôn ngữ của bên thứ ba |
| Tích hợp sẵn Node.js | Có | Không |
| Tích hợp với mã gốc | API của Electron và các mô-đun mã gốc của Node.js | Tích hợp trực tiếp với mã gốc |
| Cấu trúc ứng dụng | Tiến trình chính và các tiến trình kết xuất | Ứng dụng chủ cùng các tiến trình con của Chromium |
| Kết xuất ngoài màn hình | Có thể thực hiện thông qua các giải pháp tùy chỉnh | Có API hỗ trợ tích hợp sẵn |
| Kích thước ứng dụng | Thường lớn | Phụ thuộc vào cách tích hợp, nhưng bản thân Chromium có kích thước đáng kể |
| Hiệu năng | Phụ thuộc vào ứng dụng | Phụ thuộc vào ứng dụng và cách tích hợp |
| Hỗ trợ đa nền tảng | macOS, Windows, Linux | macOS, Windows, Linux |
| Hệ sinh thái đóng gói | Electron Forge, electron-builder | Thường do ứng dụng chủ quản lý |
| Phù hợp nhất cho | Ứng dụng máy tính dựa trên JavaScript | Ứng dụng gốc cần nhúng nội dung web |
Điểm khác biệt quan trọng nhất là Electron cung cấp một framework ứng dụng, còn CEF cung cấp một framework nhúng trình duyệt. Chúng không nhất thiết có thể thay thế trực tiếp cho nhau vì hoạt động ở các mức trừu tượng khác nhau.
Kiến trúc: Framework hoàn chỉnh và trình duyệt nhúng
Electron kết hợp Chromium và Node.js thành một môi trường thực thi ứng dụng thống nhất. Nhà phát triển tạo một tiến trình chính để quản lý các cửa sổ ứng dụng, sự kiện vòng đời và chức năng gốc, trong khi các tiến trình kết xuất xử lý giao diện dựa trên web.
Kiến trúc này cho phép nhà phát triển viết phần lớn ứng dụng bằng các công cụ JavaScript và TypeScript quen thuộc. Electron cung cấp API để tạo cửa sổ, quản lý phiên trình duyệt, xử lý menu, hiển thị thông báo, truy cập hộp thoại hệ thống và tích hợp với hệ điều hành.
CEF có cách tiếp cận khác. Thay vì cung cấp một framework ứng dụng máy tính hoàn chỉnh, CEF cho phép nhà phát triển tích hợp Chromium vào một ứng dụng do chính họ xây dựng và kiểm soát.
Ví dụ, một nhà phát triển đang xây dựng ứng dụng gốc bằng C++ có thể dùng CEF để hiển thị nội dung web bên trong cửa sổ ứng dụng hiện có. Giao diện xung quanh, vòng đời ứng dụng, các dịch vụ nền và những chức năng gốc khác vẫn do nhà phát triển kiểm soát.
CEF cung cấp API để quản lý các thực thể trình duyệt, điều hướng, tải tài nguyên, thực thi JavaScript và giao tiếp giữa trình duyệt với ứng dụng gốc. CEF cũng sử dụng kiến trúc đa tiến trình của Chromium, với các tiến trình riêng cho hoạt động kết xuất và những chức năng trình duyệt khác.
Sự khác biệt này ảnh hưởng đến cách nhà phát triển tổ chức ứng dụng. Với Electron, ứng dụng thường được xây dựng xoay quanh Chromium và Node.js. Với CEF, Chromium thường chỉ là một thành phần trong một ứng dụng lớn hơn.
CEF cũng có thể được dùng để xây dựng các ứng dụng có giao diện chủ yếu dựa trên web, nhưng nhà phát triển phải tự triển khai nhiều phần hạ tầng ứng dụng xung quanh hơn.
Một chi tiết lịch sử thú vị là các phiên bản đầu của Electron và NW.js từng sử dụng CEF. Sau đó, Electron chuyển sang tích hợp trực tiếp hơn với Chromium vì lớp trừu tượng của CEF khiến một số tính năng, đặc biệt là tích hợp sâu với Node.js, trở nên khó triển khai.
Đối với những nhà phát triển muốn có một framework hoàn chỉnh để xây dựng ứng dụng máy tính bằng công nghệ web, Electron thường mang lại điểm khởi đầu đơn giản hơn. Với những nhà phát triển đã có ứng dụng gốc và muốn bổ sung chức năng web, CEF có thể là lựa chọn tự nhiên hơn.
Trải nghiệm phát triển: JavaScript và phát triển ứng dụng gốc
Một trong những ưu điểm lớn nhất của Electron là tính dễ tiếp cận. Nhà phát triển quen với việc phát triển web hiện đại có thể tận dụng kỹ năng sẵn có để xây dựng ứng dụng máy tính mà không cần học C++ hay các framework giao diện người dùng dành riêng cho từng nền tảng.
Việc tích hợp Node.js giúp Electron tiếp cận một hệ sinh thái gói phần mềm lớn phục vụ thao tác với hệ thống tệp, kết nối mạng, cơ sở dữ liệu, tiến trình nền và các chức năng khác. Các công nghệ frontend phổ biến như React, Vue, Svelte và Angular có thể được sử dụng mà không cần thay đổi đáng kể về kiến trúc.
CEF được thiết kế chủ yếu xoay quanh các API C và C++. Mặc dù có các lớp liên kết của bên thứ ba cho những ngôn ngữ như C#, Java, Python và Delphi, nhà phát triển vẫn cần hiểu kiến trúc của ứng dụng gốc cũng như các yêu cầu của CEF về tiến trình, luồng và vòng đời.
Với một nhóm đang duy trì ứng dụng gốc, đây có thể là ưu điểm thay vì nhược điểm. CEF cho phép nhà phát triển đưa giao diện web hiện đại vào ứng dụng mà không phải viết lại mã gốc hiện có hay chuyển sang một framework ứng dụng hoàn toàn mới.
Tuy nhiên, với một nhóm tập trung vào JavaScript đang bắt đầu xây dựng ứng dụng máy tính mới, CEF thường đòi hỏi nhiều công việc thiết lập và tích hợp mã gốc hơn.
Sự khác biệt còn nằm ở công cụ hỗ trợ. Electron được hưởng lợi từ các công cụ đã hoàn thiện như Electron Forge và electron-builder, giúp đơn giản hóa việc đóng gói, ký mã, phân phối và cập nhật ứng dụng. CEF cung cấp các bản phân phối nhị phân và ví dụ, nhưng nhà phát triển thường phải tự chịu trách nhiệm tích hợp framework vào hệ thống biên dịch và triển khai của mình.
Điều này không có nghĩa CEF kém khả năng hơn. Nó chỉ phản ánh mục đích của CEF là một thành phần có thể nhúng, thay vì một nền tảng phát triển ứng dụng hoàn chỉnh.
Hiệu năng, mức sử dụng bộ nhớ và kích thước ứng dụng
Vì cả Electron và CEF đều sử dụng Chromium, không công nghệ nào tự động loại bỏ phần tài nguyên tiêu tốn thêm khi chạy một công cụ trình duyệt hiện đại.
Cả hai công nghệ đều có thể sử dụng nhiều tiến trình cho hoạt động kết xuất, tăng tốc GPU, kết nối mạng và các chức năng trình duyệt khác. Mức tiêu thụ bộ nhớ và mức sử dụng CPU phụ thuộc nhiều vào nội dung được hiển thị, số lượng thực thể trình duyệt đang hoạt động và cách ứng dụng quản lý tài nguyên.
CEF có thể mang lại tính linh hoạt cao hơn khi được tích hợp vào một ứng dụng gốc hiện có. Nhà phát triển có thể chỉ sử dụng Chromium cho những phần giao diện cần công nghệ web, đồng thời triển khai các chức năng khác trực tiếp bằng mã gốc.
Ví dụ, một ứng dụng đồ họa có thể dùng CEF cho bảng cài đặt hoặc giao diện web nhúng, trong khi vẫn giữ công cụ kết xuất, hoạt động xử lý tài liệu và các chức năng nhạy cảm với hiệu năng khác ở dạng mã gốc.
Ứng dụng Electron cũng có thể thực thi mã gốc thông qua các tiện ích bổ sung của Node.js, tiến trình bên ngoài hoặc mô-đun mã gốc. Tuy nhiên, kiến trúc của Electron nhìn chung hướng đến việc xây dựng bản thân ứng dụng bằng công nghệ web.
Một khả năng đặc biệt hữu ích của CEF là kết xuất ngoài màn hình. Thay vì hiển thị nội dung web trong một cửa sổ trình duyệt truyền thống, CEF có thể kết xuất nội dung vào các bộ đệm để ứng dụng chủ tự xử lý và hiển thị. Điều này có giá trị với những ứng dụng như công cụ phát triển trò chơi, phần mềm phát trực tiếp và các công cụ có hệ thống kết xuất tùy chỉnh.
Electron có thể hỗ trợ các quy trình kết xuất chuyên biệt thông qua những tích hợp bổ sung, nhưng CEF cung cấp tính năng kết xuất ngoài màn hình như một phần đã hoàn thiện trong API nhúng của mình.
Đối với nhà phát triển đang đánh giá hiệu năng, những chỉ số hữu ích nhất bao gồm:
- Thời gian khởi động: Ứng dụng sẵn sàng sử dụng nhanh đến mức nào.
- Mức sử dụng bộ nhớ: Mức tiêu thụ tài nguyên với nội dung trình duyệt và chức năng gốc có tính đại diện.
- Mức sử dụng CPU: Hiệu năng trong quá trình kết xuất, điều hướng và thực hiện các tác vụ nền.
- Kích thước ứng dụng: Dung lượng tải xuống và dung lượng đĩa sau khi cài đặt.
- Yêu cầu kết xuất: Ứng dụng cần cửa sổ thông thường hay cần kết xuất ngoài màn hình tùy chỉnh.
Cũng cần phân biệt CEF với các framework sử dụng webview hệ thống. CEF đi kèm Chromium thay vì phụ thuộc vào công cụ trình duyệt do hệ điều hành cài đặt. Vì vậy, chuyển từ Electron sang CEF không tự động tạo ra một ứng dụng có kích thước nhỏ hơn đáng kể.
Những nhà phát triển ưu tiên gói ứng dụng nhỏ hơn có thể cân nhắc các giải pháp thay thế như Tauri, vốn sử dụng webview do hệ thống cung cấp.
Không nên khẳng định Electron hay CEF chắc chắn nhanh hơn nếu chưa đo kiểm một cách triển khai thực tế.
Bảo mật và cập nhật trình duyệt
Cả Electron và CEF đều dựa vào kiến trúc trình duyệt và các cơ chế bảo mật của Chromium, nhưng nhà phát triển chịu trách nhiệm cấu hình ứng dụng cho phù hợp.
Electron cung cấp các tính năng như cơ chế sandbox cho tiến trình kết xuất, cô lập ngữ cảnh và giao tiếp dựa trên IPC giữa các chức năng ứng dụng có đặc quyền với nội dung web. Tài liệu bảo mật của Electron khuyến nghị hạn chế quyền truy cập Node.js, kiểm tra kỹ các thông điệp IPC và coi nội dung tải từ xa là không đáng tin cậy.
CEF cũng hỗ trợ kiến trúc đa tiến trình và cơ chế cô lập bảo mật của Chromium. Tuy nhiên, vì CEF được tích hợp vào một ứng dụng do nhà phát triển kiểm soát, ứng dụng chủ chịu trách nhiệm quyết định những tính năng trình duyệt, quyền truy cập và khả năng gốc nào được phép cung cấp.
CEF hỗ trợ liên kết JavaScript và giao tiếp với mã gốc, cho phép nhà phát triển kết nối nội dung web với các chức năng ứng dụng. Những giao diện này phải được thiết kế cẩn thận, đặc biệt khi hiển thị trang web của bên thứ ba.
| Yếu tố bảo mật | Electron | CEF |
|---|---|---|
| Cơ chế sandbox của Chromium | Có hỗ trợ | Có hỗ trợ |
| Quyền truy cập đặc quyền vào chức năng gốc | API của Node.js và Electron | API gốc của ứng dụng chủ |
| Giao tiếp từ JavaScript đến mã gốc | Script preload và IPC | Liên kết V8 và truyền thông điệp giữa các tiến trình |
| Cô lập nội dung từ xa | Sandbox cho tiến trình kết xuất và cô lập ngữ cảnh | Cô lập tiến trình của Chromium và các biện pháp kiểm soát của ứng dụng chủ |
| Cập nhật bảo mật trình duyệt | Nâng cấp phiên bản Electron | Nâng cấp phiên bản CEF |
| Trách nhiệm bảo mật ứng dụng | Nhà phát triển ứng dụng | Nhà phát triển ứng dụng |
Một yếu tố quan trọng khác là việc duy trì trình duyệt. Cả Electron và CEF thường phân phối môi trường thực thi Chromium riêng, vì vậy nhà phát triển phải phát hành bản cập nhật ứng dụng khi có các bản vá bảo mật.
CEF cung cấp các nhánh phát hành bám theo Chromium và các bản phân phối nhị phân giúp đơn giản hóa quy trình này. Tương tự, Electron duy trì các bản phát hành tích hợp bản cập nhật của Chromium và Node.js.
Không cách tiếp cận nào loại bỏ hoàn toàn nhu cầu bảo trì liên tục. Các ứng dụng sử dụng phiên bản Chromium cũ có thể vẫn chịu rủi ro từ những lỗ hổng đã được khắc phục trong dự án gốc.
Với các nhóm xây dựng phần mềm có thể hiển thị bất kỳ trang web nào, việc duy trì bảo mật cần được coi là một phần thiết yếu trong vòng đời ứng dụng, thay vì một công việc chỉ làm thỉnh thoảng.
Mức độ ứng dụng: Những ứng dụng lớn sử dụng Electron và CEF
Cả Electron và CEF đều được sử dụng rộng rãi trong các sản phẩm thực tế, nhưng cách chúng được sử dụng có sự khác biệt.
Electron đặc biệt phổ biến trong các ứng dụng máy tính thông dụng phục vụ năng suất làm việc, giao tiếp và phát triển phần mềm. Microsoft sử dụng Electron cho Visual Studio Code, còn những sản phẩm Electron nổi tiếng khác bao gồm Slack, Discord, Notion, Figma, Signal Desktop và GitHub Desktop.
CEF cũng được các công ty phần mềm lớn sử dụng, đặc biệt khi tích hợp giao diện web vào những ứng dụng đã có kiến trúc mã gốc.
Một số ví dụ gồm:
| Ứng dụng | Công nghệ | Mục đích sử dụng điển hình |
|---|---|---|
| Visual Studio Code | Electron | Trình soạn thảo mã đa nền tảng |
| Slack | Electron | Giao tiếp nhóm |
| Discord | Electron | Nền tảng giao tiếp và cộng đồng |
| Notion | Electron | Ghi chú và nâng cao năng suất |
| Figma Desktop | Electron | Ứng dụng thiết kế |
| Spotify Desktop | CEF | Giao diện dựa trên web trong ứng dụng máy tính |
| Steam | CEF | Các giao diện web nhúng trong ứng dụng máy tính |
| OBS Studio | CEF | Nguồn trình duyệt, lớp phủ và bảng trình duyệt dạng dock |
Spotify là một trường hợp sử dụng CEF được ghi nhận đặc biệt rõ ràng. Trang mã nguồn mở chính thức của Spotify công bố các phiên bản CEF và Chromium tương ứng với những bản phát hành Spotify Desktop.
OBS Studio là một ví dụ rõ ràng khác cho thấy lý do nhà phát triển chọn CEF. Tích hợp obs-browser sử dụng CEF để cung cấp các nguồn trình duyệt, cho phép người dùng hiển thị lớp phủ dựa trên web và những nội dung khác trong các cảnh phát trực tiếp. CEF là một thành phần của OBS Studio, chứ không phải framework được dùng để xây dựng toàn bộ ứng dụng.
Steam cũng sử dụng các thành phần web nhúng dựa trên Chromium trong ứng dụng máy tính, tích hợp giao diện web với hạ tầng ứng dụng gốc rộng lớn hơn của mình.
Những ví dụ này minh họa sự khác biệt giữa hai công nghệ. Electron thường được dùng để xây dựng toàn bộ ứng dụng máy tính, trong khi CEF thường được dùng để bổ sung chức năng web vào các ứng dụng vốn đã có nhiều thành phần mã gốc.
Không nên xem CEF là một giải pháp thay thế ít được biết đến hoặc lỗi thời. CEF ra đời năm 2008, trước Electron, và đã được sử dụng rộng rãi trong phần mềm thương mại suốt nhiều năm. Lịch sử lâu dài cùng việc tiếp tục được sử dụng trong các sản phẩm lớn cho thấy nhúng Chromium vẫn là một cách tiếp cận quan trọng trong phát triển ứng dụng máy tính.
Trong khi đó, Electron đã xây dựng được một hệ sinh thái đặc biệt mạnh xoay quanh các ứng dụng máy tính dựa trên JavaScript. Mức độ sử dụng rộng rãi, bộ công cụ hoàn thiện và sự tham gia của các công ty công nghệ lớn khiến Electron trở nên hấp dẫn với những nhóm xây dựng sản phẩm mới bằng công nghệ web.
Hai framework có những thế mạnh khác nhau vì hướng đến các yêu cầu kiến trúc khác nhau.
Vì sao chúng tôi chọn Electron tại WebCatalog
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 vì nó rất phù hợp với yêu cầu của sản phẩm.
WebCatalog cho phép người dùng biến trang web 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. Phần mềm của chúng tôi cần hỗ trợ những trang web do hàng nghìn nhà phát triển khác nhau tạo ra, với các hệ thống xác thực, cơ chế lưu trữ, API trình duyệt và framework JavaScript khác nhau.
Cả Electron và CEF đều cung cấp môi trường thực thi Chromium nhất quán, điều rất quan trọng đối với khả năng tương thích. Khác với các framework dựa trên webview hệ thống, chúng cho phép chúng tôi sử dụng một phiên bản Chromium xác định trên mọi nền tảng máy tính được hỗ trợ.
Tuy nhiên, WebCatalog không phải chủ yếu là một ứng dụng gốc cần thêm thành phần trình duyệt nhúng. Chức năng trình duyệt là yếu tố cốt lõi của sản phẩm. Chúng tôi cần khả năng kiểm soát sâu đối với cửa sổ, phiên, bộ nhớ lưu trữ, quyền truy cập, điều hướng và hành vi vòng đời ứng dụng.
Electron cung cấp các API hoàn thiện 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 xây dựng chức năng tương tự trình duyệt bằng JavaScript và TypeScript. Các phân vùng phiên được lưu bền vững đặc biệt quan trọng vì cho phép người dùng duy trì các phiên đăng nhập độc lập cho nhiều tài khoản trên cùng một trang web.
CEF cũng cung cấp API để quản lý các thực thể trình duyệt, yêu cầu, bộ nhớ lưu trữ và tích hợp với mã gốc. Về nguyên tắc, nhiều khả năng tương tự cũng có thể được triển khai bằng CEF. Tuy nhiên, làm như vậy sẽ đòi hỏi chúng tôi tự xây dựng và duy trì nhiều hạ tầng mã gốc hơn.
Việc Electron tích hợp Node.js cũng phù hợp với bộ công nghệ kỹ thuật của chúng tôi. Chúng tôi có thể triển khai phần lớn logic ứng dụng máy tính bằng TypeScript, chia sẻ mã giữa các sản phẩm và tận dụng hệ sinh thái JavaScript.
Phát triển đa nền tảng cũng là một yếu tố cần cân nhắc. WebCatalog hỗ trợ macOS, Windows và Linux, bao gồm việc đóng gói ứng dụng, tích hợp và hành vi hệ thống đặc thù của từng nền tảng. Các API và công cụ phân phối đã hoàn thiện của Electron giúp giảm lượng mã gốc mà chúng tôi cần duy trì.
Chúng tôi nhận thức được rằng Electron làm phát sinh chi phí tài nguyên. Việc đóng gói kèm Chromium làm tăng kích thước ứng dụng, và các ứng dụng dựa trên trình duyệt cần được quản lý tài nguyên cẩn thận. Thay vì thay thế Electron, chúng tôi tập trung cải thiện cách sử dụng nó.
Ví dụ, chúng tôi đã áp dụng bản sao APFS để giảm dung lượng đĩa cho các ứng dụng Mac được tạo ra, giảm dữ liệu lưu trữ dư thừa mà không phải từ bỏ khả năng tương thích của Chromium.
Quyết định của chúng tôi không có nghĩa Electron tốt hơn CEF trong mọi trường hợp. Nếu WebCatalog chủ yếu là một ứng dụng gốc với một vài giao diện web nhúng, CEF có thể là lựa chọn xuất sắc. Nhưng vì sản phẩm của chúng tôi về căn bản được xây dựng xoay quanh các ứng dụng web và chức năng trình duyệt, Electron mang lại một nền tảng giúp phát triển hiệu quả hơn và dễ bảo trì hơn.
Những trường hợp CEF có lợi thế
Mặc dù Electron là lựa chọn ưu tiên của chúng tôi tại WebCatalog, CEF vẫn có những ưu điểm quan trọng đối với các ứng dụng cần tích hợp sâu hơn với phần mềm gốc.
CEF đặc biệt hấp dẫn khi nhà phát triển đã có một ứng dụng C++ ổn định và muốn bổ sung giao diện web hiện đại mà không thay thế kiến trúc hiện có.
Khả năng hỗ trợ kết xuất ngoài màn hình là một ưu điểm đáng kể khác. Những ứng dụng như phần mềm phát trực tiếp và công cụ phát triển trò chơi có thể cần kết xuất nội dung web trực tiếp vào các quy trình xử lý đồ họa tùy chỉnh thay vì cửa sổ ứng dụng máy tính thông thường. CEF cung cấp các API đã hoàn thiện cho những trường hợp sử dụng này.
CEF cũng trao cho nhà phát triển quyền kiểm soát sâu đối với việc tích hợp trình duyệt. Họ có thể tùy chỉnh cách xử lý yêu cầu, điều hướng, liên kết JavaScript, tải tài nguyên và cách các thực thể trình duyệt tương tác với các thành phần của ứng dụng gốc.
Với những nhóm có chuyên môn vững về phát triển ứng dụng gốc, tính linh hoạt này có thể quan trọng hơn sự tiện lợi của Electron.
CEF đáng để cân nhắc khi:
- Bổ sung giao diện web vào một ứng dụng gốc hiện có. Nhà phát triển có thể giữ nguyên kiến trúc ứng dụng hiện tại và nhúng Chromium ở những nơi cần thiết.
- Xây dựng phần mềm có yêu cầu kết xuất tùy chỉnh. Kết xuất ngoài màn hình cho phép tích hợp nội dung web vào các quy trình xử lý đồ họa và giao diện chuyên biệt.
- Tích hợp sâu với chức năng gốc bằng C++. CEF cung cấp các API gốc và cho phép kiểm soát chi tiết hành vi của trình duyệt.
- Duy trì một ứng dụng CEF đã ổn định. Chuyển sang Electron có thể dẫn đến những thay đổi lớn về kiến trúc mà không mang lại lợi ích đáng kể.
- Kết hợp giao diện gốc và giao diện web. Nhà phát triển có thể sử dụng Chromium cho một số phần nhất định của ứng dụng, đồng thời giữ lại các thành phần giao diện gốc ở những phần khác.
CEF đòi hỏi nhà phát triển chịu trách nhiệm nhiều hơn về hạ tầng ứng dụng. Họ có thể cần tự triển khai việc đóng gói, cập nhật, quản lý cửa sổ và tích hợp đặc thù cho từng nền tảng.
Với những nhóm đã có đủ năng lực duy trì ứng dụng gốc, điều này có thể hoàn toàn hợp lý. Nhưng với các nhóm tập trung vào web đang xây dựng một sản phẩm máy tính mới, nó có thể tạo ra sự phức tạp không cần thiết.
Electron và CEF: Bạn nên chọn công nghệ nào?
Cả hai công nghệ đều đã trưởng thành, đang được phát triển tích cực và có khả năng hỗ trợ những phần mềm máy tính phức tạp. Lựa chọn phù hợp hơn chủ yếu phụ thuộc vào việc bạn đang xây dựng một ứng dụng máy tính mới xoay quanh công nghệ web hay nhúng chức năng web vào một ứng dụng gốc hiện có.
| Ưu tiên của bạn | Điểm khởi đầu phù hợp hơn | Lý do |
|---|---|---|
| Ứng dụng máy tính mới sử dụng JavaScript hoặc TypeScript | Electron | Framework ứng dụng hoàn chỉnh |
| Ứng dụng gốc C++ hiện có | CEF | Tích hợp vào kiến trúc mã gốc |
| Giảm thiểu việc phát triển mã gốc | Electron | API Node.js và JavaScript |
| Nhúng nội dung web vào cửa sổ gốc | CEF | Được thiết kế riêng cho việc nhúng |
| Kết xuất ngoài màn hình và quy trình xử lý đồ họa tùy chỉnh | CEF | API kết xuất chuyên dụng |
| Công cụ đóng gói và cập nhật ứng dụng máy tính toàn diện | Electron | Hệ sinh thái phân phối hoàn thiện |
| Tích hợp trực tiếp với mã C++ gốc | CEF | Giao diện C và C++ gốc |
| Chromium nhất quán 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 |
| Quản lý phiên trình duyệt phức tạp | Cả hai đều phù hợp | Cả hai đều cung cấp khả năng quản lý trình duyệt |
| Gói ứng dụng nhỏ | Không bên nào có lợi thế vốn có | Cả hai đều phân phối Chromium |
| Đội ngũ kỹ thuật JavaScript sẵn có | Electron | Bộ công nghệ phát triển quen thuộc |
| Sản phẩm dựa trên CEF hiện có | CEF | Tránh việc chuyển đổi không cần thiết |
Với phần lớn nhà phát triển web đang bắt đầu xây dựng một ứng dụng máy tính đa nền tảng mới, Electron thường là lựa chọn thực tế hơn. Nó cung cấp kiến trúc ứng dụng, khả năng tích hợp với hệ điều hành, công cụ phát triển và hệ sinh thái phân phối cần thiết để xây dựng một sản phẩm hoàn chỉnh mà không phải phát triển mọi thứ từ đầu.
CEF thường là phương án tốt hơn cho những nhà phát triển đã có ứng dụng gốc hoặc cần khả năng nhúng trình duyệt chuyên biệt. Tính linh hoạt và khả năng tích hợp trực tiếp với mã gốc khiến CEF đặc biệt hữu ích cho những phần mềm như công cụ phát triển trò chơi, công cụ phát trực tiếp, ứng dụng công nghiệp và các sản phẩm gốc phức tạp có giao diện web nhúng.
Không công nghệ nào vốn dĩ nhanh hơn hay an toàn hơn. Những đặc tính đó phụ thuộc nhiều vào ứng dụng, kiến trúc và chất lượng triển khai.
Lời kết
Electron và Chromium Embedded Framework dùng chung công nghệ trình duyệt nền tảng, nhưng giải quyết những vấn đề khác nhau.
Electron được thiết kế để giúp nhà phát triển web dễ dàng tiếp cận việc phát triển ứng dụng máy tính. Nó kết hợp Chromium, Node.js và các API gốc dành cho ứng dụng máy tính thành một framework cho phép các nhóm xây dựng ứng dụng phức tạp bằng JavaScript và TypeScript.
CEF được thiết kế để nhúng Chromium vào các ứng dụng khác. Nó cung cấp khả năng kiểm soát ở mức thấp hơn đối với việc tích hợp trình duyệt và đặc biệt có giá trị với các ứng dụng gốc cần giao diện dựa trên web hoặc khả năng kết xuất chuyên biệt.
Cả hai đều đã chứng minh giá trị của mình trong những phần mềm lớn đang được sử dụng thực tế. Electron là nền tảng cho các ứng dụng như Visual Studio Code, Slack, Discord và Notion, còn CEF được sử dụng trong các sản phẩm như Spotify, Steam và OBS Studio.
Tại WebCatalog, chúng tôi đã chọn Electron vì các sản phẩm của mình về căn bản được xây dựng xoay quanh chức năng trình duyệt. Môi trường thực thi Chromium nhất quán, các API quản lý trình duyệt hoàn thiện và hệ sinh thái JavaScript cho phép chúng tôi phát triển và duy trì hiệu quả các ứng dụng máy tính đa nền tảng.
CEF vẫn là một lựa chọn xuất sắc cho những nhà phát triển làm việc với ứng dụng gốc, đặc biệt khi Chromium cần được nhúng vào kiến trúc hiện có thay vì đóng vai trò nền tảng cho toàn bộ sản phẩm.
Quyết định cuối cùng phụ thuộc vào thứ bạn đang xây dựng. Nếu muốn tạo một ứng dụng máy tính hoàn chỉnh bằng công nghệ web, Electron thường là điểm khởi đầu tốt hơn. Nếu muốn bổ sung Chromium vào một ứng dụng gốc, CEF có khả năng là công cụ phù hợp hơn.


