แอป Electron ทำให้ระบบ macOS 26 ช้าลงทั้งระบบเนื่องจากการแทนที่ Private API

ทีมชุมชน BigGo
แอป Electron ทำให้ระบบ macOS 26 ช้าลงทั้งระบบเนื่องจากการแทนที่ Private API

การเปิดตัว macOS 26 Tahoe เวอร์ชันล่าสุดของ Apple ได้นำมาซึ่งปัญหาด้านประสิทธิภาพที่สำคัญซึ่งส่งผลกระทบต่อแอปพลิเคชันยอดนิยมอย่าง Discord, VS Code, Slack และซอฟต์แวร์อื่นๆ ที่ใช้ Electron ผู้ใช้รายงานว่าระบบกระตุกและช้าลงทั้งระบบเมื่อแอปพลิเคชันเหล่านี้ทำงาน โดยการใช้งาน GPU เพิ่มขึ้นอย่างมากแม้ในงานง่ายๆ เช่น การเลื่อนหน้าต่างหรือการเลื่อนหน้า

ปัญหาดูเหมือนจะเกิดจากการตัดสินใจของ Electron ที่จะแทนที่ private API ของ macOS ที่เรียกว่า _cornerMask ซึ่งใช้สำหรับสร้างมุมที่เรียบสำหรับ vibrant views ในแอปพลิเคชัน เมื่อ Apple เปลี่ยนวิธีการทำงานของ private API นี้ใน macOS 26 ได้สร้างปฏิสัมพันธ์ที่ไม่คาดคิดซึ่งทำให้กระบวนการ WindowServer ของระบบใช้ทรัพยากร GPU มากเกินไป

แอปพลิเคชันที่ได้รับผลกระทบ:

  • Discord
  • VS Code
  • Slack
  • Ferdium
  • Bitwarden Desktop
  • SiYuan
  • DeltaChat
  • Yandex Music
  • Jitsi Meet
  • Cursor IDE

สาเหตุหลัก: การใช้ Private API ในทางที่ผิด

การตรวจสอบทางเทคนิคเผยให้เห็นว่า Electron กำลังแทนที่ private API _cornerMask ของ Apple เพื่อใช้ corner masks แบบกำหนดเองกับ vibrant views การแทนที่นี้รบกวนไปป์ไลน์การเรนเดอร์เงาใหม่ของ macOS 26 ทำให้ระบบต้องใช้วิธีการเรนเดอร์ที่ไม่มีประสิทธิภาพ ปัญหาจะรุนแรงขึ้นเมื่อมีแอปพลิเคชัน Electron หลายตัวทำงานพร้อมกัน โดยผู้ใช้บางคนรายงานว่าการใช้งาน GPU เพิ่มขึ้นถึง 100% และพัดลมหมุนด้วยความเร็วสูงสุด

Private APIs เป็นฟังก์ชันระบบภายในที่ Apple กำหนดให้เป็นพื้นที่ต้องห้ามสำหรับนักพัฒนา เนื่องจากสามารถเปลี่ยนแปลงได้โดยไม่แจ้งให้ทราบล่วงหน้าระหว่างการอัปเดตระบบ

ผลกระทบต่อประสิทธิภาพ:

  • การใช้งาน GPU เพิ่มขึ้นจาก 0% เป็น 25% เมื่อเปิดแอป Electron หนึ่งตัว
  • การใช้งาน GPU ขึ้นถึง 100% เมื่อเปิดแอป Electron หลายตัวพร้อมกัน
  • ระบบ UI ทั้งหมดช้าลงและกระตุก
  • ความเร็วพัดลมเพิ่มขึ้นสูงสุด
  • ปัญหาจะหายไปเมื่อย่อแอปลง

การถกเถียงในชุมชนเกี่ยวกับความรับผิดชอบ

ชุมชนนักพัฒนาแบ่งออกเป็นสองฝ่ายเกี่ยวกับผู้ที่ต้องรับผิดชอบต่อปัญหานี้ บางคนโต้แย้งว่านักพัฒนา Electron ไม่ควรใช้ private APIs เลย เนื่องจาก Apple เตือนอย่างชัดเจนเกี่ยวกับการปฏิบัตินี้ คนอื่นๆ โต้แย้งว่า Apple ควรทดสอบการอัปเดตระบบปฏิบัติการของตนกับแอปพลิเคชันที่ใช้กันอย่างแพร่หลายให้ดีกว่านี้ก่อนเปิดตัว

ฉันไม่เข้าใจว่าอะไรผ่านเข้าไปในใจของนักพัฒนา เมธอดถูกทำเครื่องหมายว่าเป็น private มีเอกสารระบุว่าไม่ควรใช้โดยนักพัฒนา เอกสารเพิ่มเติมบอกว่าการใช้งานอาจทำให้แอปพลิเคชันของคุณเสียหายในรูปแบบแปลกๆ ในปัจจุบันหรืออนาคต

สถานการณ์นี้เน้นย้ำถึงความตึงเครียดที่กว้างขึ้นในการพัฒนาซอฟต์แวร์ระหว่างการปฏิบัติตามแนวทางอย่างเป็นทางการและการบรรลุฟังก์ชันการทำงานที่ต้องการเมื่อ public APIs ไม่ได้ให้โซลูชันที่เพียงพอ

วิธีแก้ไขชั่วคราวและโซลูชัน

มีการแก้ไขชั่วคราวหลายวิธีที่เกิดขึ้นจากชุมชน สำหรับแอปพลิเคชันที่ใช้ Chrome ผู้ใช้สามารถใช้คำสั่งเพื่อปิดใช้งานฟีเจอร์ autofill บางอย่างที่ดูเหมือนจะมีปฏิสัมพันธ์ที่ไม่ดีกับปัญหาการเรนเดอร์ อย่างไรก็ตาม วิธีแก้ไขนี้มาพร้อมกับคำเตือนว่าอาจทำให้ฟังก์ชันการทำงานอื่นๆ เสียหายในอนาคต

ทีม Electron ได้ยอมรับปัญหาและกำลังทำงานเพื่อแก้ไขอย่างเหมาะสมที่จะลบการแทนที่ private API ของพวกเขาในขณะที่ยังคงรักษารูปลักษณ์ที่ผู้ใช้คาดหวัง Apple ก็ได้รับทราบปัญหาผ่านระบบ feedback ของพวกเขาแล้ว แม้ว่าพวกเขาจะยืนยันว่าความรับผิดชอบอยู่ที่นักพัฒนาที่เลือกใช้ APIs ที่ไม่ได้รับการสนับสนุน

รายละเอียดทางเทคนิค:

  • สาเหตุหลัก: Electron แทนที่ API ส่วนตัว _cornerMask ของ AppKit
  • ระบบที่ได้รับผลกระทบ: macOS 26 Tahoe RC บน Apple Silicon (M1, M4)
  • เวอร์ชัน Electron: 37.3.1
  • วิธีแก้ไขชั่วคราว: defaults write com.google.Chrome NSAutoFillHeuristicControllerEnabled -bool false

ผลกระทบต่อผู้ใช้และแอปพลิเคชัน

การลดลงของประสิทธิภาพส่งผลกระทบต่อแอปพลิเคชันเพื่อการทำงานที่ใช้กันมากที่สุดบน macOS ผู้ใช้ที่มี MacBook Pro รุ่น M1 และ M4 รายงานว่าแม้แต่การโต้ตอบระบบพื้นฐานก็กลายเป็นเรื่องช้าๆ เมื่อแอปพลิเคชันอย่าง Discord หรือ VS Code เปิดอยู่และไม่ได้ย่อเก็บ น่าสนใจที่การย่อเก็บแอปพลิเคชันที่ได้รับผลกระทบจะแก้ไขปัญหาประสิทธิภาพทันที ซึ่งบ่งชี้ว่าปัญหาเกี่ยวข้องโดยเฉพาะกับการเรนเดอร์หน้าต่างที่ทำงานอยู่

สถานการณ์นี้เป็นเครื่องเตือนใจถึงความเสี่ยงที่เกี่ยวข้องกับการใช้ฟีเจอร์ระบบที่ไม่มีเอกสาร แม้ว่าจะให้ฟังก์ชันการทำงานที่ดูเหมือนจำเป็นก็ตาม ในขณะที่การใช้ private API ของ Electron มีจุดประสงค์เพื่อปรับปรุงประสบการณ์ทางภาพ แต่ในท้ายที่สุดกลับสร้างการพึ่งพาที่เปราะบางซึ่งพังเมื่อ Apple อัปเดตสถาปัตยกรรมระบบของพวกเขา

อ้างอิง: Electron-based apps cause a huge system-wide lag on macOS 26 #48311