Phiên bản macOS 26 Tahoe mới nhất của Apple đã gây ra một vấn đề hiệu suất nghiêm trọng ảnh hưởng đến các ứng dụng phổ biến như Discord , VS Code , Slack và các phần mềm khác dựa trên Electron . Người dùng báo cáo tình trạng giật lag và chậm trễ toàn hệ thống khi chạy các ứng dụng này, với việc sử dụng GPU tăng vọt đáng kể ngay cả khi thực hiện các tác vụ đơn giản như di chuyển cửa sổ hoặc cuộn trang.
Vấn đề này dường như xuất phát từ quyết định của Electron trong việc override một private API của macOS có tên _cornerMask
, được sử dụng để tạo các góc mượt mà cho vibrant views trong ứng dụng. Khi Apple thay đổi cách thức hoạt động của private API này trong macOS 26, nó đã tạo ra một tương tác không mong muốn khiến cho tiến trình WindowServer của hệ thống tiêu thụ quá nhiều tài nguyên GPU.
Các ứng dụng bị ảnh hưởng:
- Discord
- VS Code
- Slack
- Ferdium
- Bitwarden Desktop
- SiYuan
- DeltaChat
- Yandex Music
- Jitsi Meet
- Cursor IDE
Nguyên Nhân Gốc Rễ: Lạm Dụng Private API
Cuộc điều tra kỹ thuật cho thấy Electron đã override private API _cornerMask
của Apple để áp dụng các corner masks tùy chỉnh cho vibrant views. Việc override này đã can thiệp vào pipeline render shadow mới của macOS 26, khiến hệ thống phải quay về các phương pháp render kém hiệu quả. Vấn đề trở nên nghiêm trọng hơn khi nhiều ứng dụng Electron chạy đồng thời, với một số người dùng báo cáo việc sử dụng GPU nhảy lên 100% và quạt chạy ở tốc độ tối đa.
Private APIs là các hàm hệ thống nội bộ mà Apple đánh dấu là cấm các nhà phát triển sử dụng vì chúng có thể thay đổi mà không cần thông báo giữa các bản cập nhật hệ thống.
Tác động đến hiệu suất:
- Mức sử dụng GPU tăng vọt từ 0% lên 25% với một ứng dụng Electron
- Mức sử dụng GPU đạt 100% khi chạy nhiều ứng dụng Electron
- Giao diện người dùng toàn hệ thống bị lag và giật
- Tốc độ quạt tăng lên mức tối đa
- Các vấn đề được giải quyết khi thu nhỏ ứng dụng
Tranh Luận Cộng Đồng Về Trách Nhiệm
Cộng đồng nhà phát triển chia rẽ về việc ai phải chịu trách nhiệm cho vấn đề này. Một số cho rằng các nhà phát triển Electron không bao giờ nên sử dụng private APIs, vì Apple đã cảnh báo rõ ràng về việc này. Những người khác lại cho rằng Apple nên kiểm tra kỹ hơn bản cập nhật hệ điều hành của họ với các ứng dụng được sử dụng rộng rãi trước khi phát hành.
Tôi không hiểu điều gì đi qua đầu óc của nhà phát triển. Một phương thức được đánh dấu là private. Nó được ghi chú là không được sử dụng bởi các nhà phát triển. Tài liệu bổ sung còn nói rằng việc sử dụng nó có thể làm hỏng ứng dụng của bạn theo những cách kỳ lạ ngay bây giờ hoặc trong tương lai.
Tình huống này làm nổi bật một căng thẳng rộng lớn hơn trong phát triển phần mềm giữa việc tuân theo các hướng dẫn chính thức và đạt được chức năng mong muốn khi các public APIs không cung cấp giải pháp thích hợp.
Giải Pháp Tạm Thời
Một số bản sửa lỗi tạm thời đã xuất hiện từ cộng đồng. Đối với các ứng dụng dựa trên Chrome , người dùng có thể áp dụng một lệnh để vô hiệu hóa một số tính năng autofill dường như tương tác kém với vấn đề render. Tuy nhiên, giải pháp tạm thời này đi kèm với cảnh báo rằng nó có thể làm hỏng các chức năng khác trong tương lai.
Nhóm Electron đã thừa nhận vấn đề và đang làm việc trên một bản sửa lỗi thích hợp để loại bỏ việc override private API của họ trong khi vẫn duy trì giao diện trực quan mà người dùng mong đợi. Apple cũng đã được thông báo về vấn đề này thông qua hệ thống phản hồi của họ, mặc dù họ vẫn duy trì rằng trách nhiệm thuộc về các nhà phát triển đã chọn sử dụng các APIs không được hỗ trợ.
Chi tiết kỹ thuật:
- Nguyên nhân gốc: Electron ghi đè API riêng tư
_cornerMask
của AppKit - Hệ thống bị ảnh hưởng: macOS 26 Tahoe RC trên Apple Silicon (M1, M4)
- Phiên bản Electron: 37.3.1
- Cách khắc phục tạm thời:
defaults write com.google.Chrome NSAutoFillHeuristicControllerEnabled -bool false
Tác Động Đến Người Dùng Và Ứng Dụng
Sự suy giảm hiệu suất ảnh hưởng đến một số ứng dụng năng suất được sử dụng phổ biến nhất trên macOS . Người dùng với các mẫu MacBook Pro M1 và M4 báo cáo rằng ngay cả các tương tác hệ thống cơ bản cũng trở nên chậm chạp khi các ứng dụng như Discord hoặc VS Code đang mở và không được thu nhỏ. Thú vị là việc thu nhỏ các ứng dụng bị ảnh hưởng sẽ ngay lập tức giải quyết các vấn đề hiệu suất, cho thấy vấn đề liên quan cụ thể đến việc render cửa sổ đang hoạt động.
Tình huống này phục vụ như một lời nhắc nhở về những rủi ro liên quan đến việc sử dụng các tính năng hệ thống không được ghi chép, ngay cả khi chúng cung cấp chức năng dường như thiết yếu. Trong khi việc sử dụng private API của Electron nhằm cải thiện trải nghiệm trực quan, cuối cùng nó đã tạo ra một sự phụ thuộc mong manh bị phá vỡ khi Apple cập nhật kiến trúc hệ thống của họ.
Tham khảo: Electron-based apps cause a huge system-wide lag on macOS 26 #48311