Discord thay thế Electron bằng Rust và GPUI để có ứng dụng desktop nhanh hơn, nhẹ hơn
Client mới dựa trên Rust của Discord khởi động nhanh đáng kể và sử dụng ít RAM hơn 70% so với phiên bản tiền nhiệm dùng Electron nhờ tận dụng framework GPUI.
Được dịch tự động từ bản gốc tiếng Anh.
Discord đã chứng minh một sự chuyển dịch kiến trúc lớn trong ứng dụng desktop Windows 11 của mình, từ bỏ framework Electron để chuyển sang một bản triển khai native được xây dựng bằng Rust. Trong một video so sánh trực tiếp do đồng sáng lập và CTO Stanislav Vishnevskiy chia sẻ, client mới đã tải giao diện và danh sách bạn bè trước khi ứng dụng Electron cũ hoàn tất chuỗi khởi động ban đầu. Sự chuyển đổi này làm nổi bật xu hướng ngày càng tăng giữa các ứng dụng hiệu năng cao: từ bỏ các engine web đóng gói sẵn để ưu tiên các ngôn ngữ cấp hệ thống.
Chuyện gì đã xảy ra
Buổi trình diễn liên quan đến hai chiếc Lenovo ThinkPad chạy Windows 11, nơi cả client Electron hiện tại và client mới dựa trên Rust đều được khởi động từ trạng thái lạnh (cold start). Video này, thu hút hàng triệu lượt xem, cho thấy ứng dụng Electron hiển thị một cửa sổ trống và mẹo tải trong vài giây. Ngược lại, client mới, được xác định là Discord Phoenix trong Task Manager, xuất hiện mờ dần trong vòng một giây và đã điền đầy đủ danh sách bạn bè trong khi phiên bản cũ vẫn đang khởi tạo. Nhân viên Discord xác nhận rằng không có instance nào chạy ngầm hoặc khởi động từ khay hệ thống, qua đó khẳng định sự khác biệt về tốc độ là kết quả của kiến trúc mới.
Ngoài thời gian khởi động, hiệu quả tài nguyên của client mới đánh dấu một cải tiến đáng kể. Phiên bản Rust chỉ tiêu thụ 290.2MB RAM trong khi hỗ trợ hai tài khoản đăng nhập đồng thời. Con số này tương đương mức giảm khoảng 70% so với mức sử dụng RAM ở chế độ chờ điển hình là 1GB của client Electron. Công ty lưu ý rằng các nỗ lực tối ưu hóa bản build Electron trước đây, chẳng hạn như nâng cấp lên Electron 42, chỉ mang lại cải thiện CPU nhỏ giọt nhưng phải đánh đổi bằng việc tăng nhẹ mức sử dụng bộ nhớ. Cách tiếp cận mới loại bỏ nhu cầu về màn hình "Starting" truyền thống, vì các bản cập nhật tự động chạy nền và quá trình bootstrap nhanh chóng khiến hộp thoại modal này trở nên lỗi thời.
Cơ chế hoạt động
Discord đã thay thế runtime Electron dựa trên Chromium bằng GPUI, một framework UI tăng tốc bởi GPU được viết bằng Rust. Khác với Electron, vốn đóng gói toàn bộ engine trình duyệt và môi trường Node.js cho mỗi instance ứng dụng, GPUI vẽ các phần tử giao diện trực tiếp trên GPU bằng chiến lược kết hợp giữa chế độ immediate và retained rendering. Điều này cho phép ứng dụng vượt qua chi phí phân tích HTML và CSS đối với các thành phần UI cốt lõi. Rust quản lý logic ứng dụng và bộ nhớ mà không cần garbage collector, cung cấp hiệu suất xác định và footprint bộ nhớ thấp hơn.
Kiến trúc này khác biệt so với các framework dựa trên Rust khác như Tauri, vốn vẫn phụ thuộc vào webview của hệ điều hành (chẳng hạn như WebView2 trên Windows) để hiển thị giao diện HTML. Bản triển khai của Discord tránh hoàn toàn các công nghệ web cho shell chính, mặc dù nó vẫn tiếp tục sử dụng webview hệ thống native cho các nội dung nhúng cụ thể như video YouTube và Activities. Cách tiếp cận lai này đảm bảo rằng các tích hợp web phức tạp vẫn hoạt động tốt trong khi giao diện người dùng chính hưởng lợi từ tốc độ render native. Cùng một codebase Rust cũng đang được điều chỉnh cho các nền tảng di động, thay thế React Native trên iOS và Android, và sẽ cung cấp logic cho client web thông qua WebAssembly.
Chi tiết chính
- Client Rust mới sử dụng khoảng 290.2MB RAM với hai tài khoản đang hoạt động, so với 1-2GB của phiên bản Electron.
- Thời gian khởi động được giảm đáng kể, với client mới tải danh sách bạn bè trước khi ứng dụng Electron hoàn tất animation khởi động.
- Discord sử dụng GPUI, một framework UI Rust từ những người tạo ra trình soạn thảo mã Zed, thay vì Tauri hay WinUI.
- Ứng dụng hỗ trợ đăng nhập đa tài khoản đồng thời mà không yêu cầu client phải đóng và khởi động lại giữa các lần chuyển đổi.
- Các bản cập nhật được xử lý chạy nền, loại bỏ nhu cầu về modal "Starting" kiểm tra cập nhật khi khởi động.
- Client mới lưu trữ token đăng nhập trong keyring hệ thống, chẳng hạn như Credential Manager trên Windows, để tăng cường bảo mật.
Tại sao điều này quan trọng
Đối với các kỹ sư phần mềm và trưởng nhóm kỹ thuật, cuộc di trú này xác thực tính khả thi của Rust và các framework UI tùy chỉnh dành cho các ứng dụng tiêu dùng quy mô lớn. Nó thách thức giả định lâu nay rằng Electron là cách duy nhất thực tế để duy trì sự tương thích đa nền tảng với một codebase duy nhất. Bằng cách chứng minh rằng một ứng dụng chat phức tạp, giàu tính năng có thể đạt được hiệu suất gần như native và mức sử dụng bộ nhớ thấp mà không hy sinh tốc độ phát triển, Discord cung cấp một khuôn mẫu cho các đội ngũ khác đang vật lộn với sự phình to của các wrapper desktop dựa trên web.
Sự chuyển dịch này cũng đáp ứng các áp lực rộng hơn trong ngành liên quan đến ràng buộc tài nguyên phần cứng. Với giá bộ nhớ tăng và các trung tâm dữ liệu đối mặt với hạn chế nguồn cung, thiết kế phần mềm hiệu quả đang trở thành một lợi thế cạnh tranh chứ không chỉ là một điểm tinh tế về mặt kỹ thuật. Các ứng dụng trước đây dựa vào sự dồi dào của RAM giá rẻ giờ đây buộc phải tối ưu hóa. Động thái của Discord báo hiệu rằng cả người dùng lẫn nhà phát triển đều đang đạt đến điểm tới hạn, nơi sự tiện lợi của công nghệ web không còn biện minh cho cái giá phải trả về hiệu năng, đặc biệt là đối với các công cụ giao tiếp luôn hoạt động.
Bạn có thể làm gì
- Đánh giá xem UI cốt lõi của ứng dụng desktop của bạn có thực sự cần render HTML/CSS hay nếu một framework tăng tốc bởi GPU native có thể giảm overhead.
- Nghiên cứu các toolkit UI dựa trên Rust như GPUI hoặc Iced nếu bạn muốn giảm footprint bộ nhớ và cải thiện thời gian khởi động.
- Profile mức sử dụng bộ nhớ của ứng dụng Electron hiện tại để xác định xem các instance Chromium đóng gói có đang tiêu thụ tài nguyên quá mức hay không.
- Cân nhắc triển khai cơ chế cập nhật chạy nền để loại bỏ các modal khởi động chặn luồng và cải thiện hiệu năng cảm nhận.
- Khám phá WebAssembly để chia sẻ logic kinh doanh giữa client web và native, cho phép một codebase thống nhất mà không cần render UI đồng nhất.
- Theo dõi bản phát hành công khai của client mới từ Discord để benchmark các mức tăng hiệu năng thực tế so với các chỉ số nội bộ của bạn.



