Electronの秘密がmacOS 26のパフォーマンスを低下させる

Table of Contents

Electronの秘密がmacOS 26のパフォーマンスを低下させる

Electron チームは、新しくリリースされた macOS 26「Tahoe」でシステム全体の速度低下を引き起こしていたコードを修正しました。

Electronは、Webテクノロジーを用いたクロスプラットフォームアプリケーション開発のための広く利用されているフレームワークです。Electronを採用しているアプリケーションには、MicrosoftのVisual Studio Code、PostgreSQL管理用のpgAdmin、Podman Desktop、Slack、Cursor、AWS Kiro、Theia IDEなど、数多くあります。

先週コミットされた修正により、Cocoa API のプライベートメソッドのオーバーライドが削除されました_cornerMask。修正の作者によると、このメソッドはウィンドウの影を計算しますが、これをオーバーライドすると「WindowServer が影を繰り返し再計算して再描画する」ことになります。この問題が Tahoe のリリース後に初めて発生した理由は、このオーバーライドによって新しい最適化が機能しなくなったためと考えられます。

Electronのプライベートメソッドの呼び出しを削除するコミット

Electronのプライベートメソッドの呼び出しを削除するコミット

Apple の命名規則では、アンダースコア文字で始まるメソッドはプライベートであり、外部の開発者が使用することを想定していません。

ユーザーへの影響は、特に複数のElectronベースのアプリケーションを実行している場合、パフォーマンスの低下です。この問題に加え、ChromeやChromiumベースのアプリケーションでスクロール速度が遅くなる可能性があるパスワード自動入力に関する別の問題も発生しており、Tahoeの初期導入ユーザーの一部は不快な体験を経験しています。

Rust ベースの Zed エディタを使用している開発者も、AutoFill の変更に関連する Tahoe の問題に遭遇しています。原因は Chromium に影響を与えたのと同じ NSAutoFillHeuristicController というコンポーネントです。

Apple はここ数日で Tahoe を 26.01 にアップデートしており、これによりオートフィルの問題は改善されたと報告されていますが、Chromium に関しては完全には改善されていません。

  • JetBrainsはコードスニペットでAIモデルをトレーニングしたいと考えています
  • ゼッドは死んだんだ。ゼッドが死んだ?いや、待てよ。Windows版だ
  • Googleの開発者登録計画は「F-Droidプロジェクトを終わらせる」
  • Harness は AI エージェントを新しい DevOps タスクマスターとして提案します

Electron の問題は厄介です。チームはバージョン 36 以降(現在のバージョンは 39)に修正をバックポートしていますが、それでもアプリケーション開発者は修正されたバージョンを使用して再構築とデプロイを行う必要があります。Electron アプリとそのバージョンを一覧表示するスクリプトは、インストール済みのアプリケーションのうち Electron ベースのアプリケーションの数と、古いアプリケーションの数の両方を表示できるため、非常に役立つかもしれません。

人気アプリケーションを壊したAppleの責任なのか、それともプライベートメソッドを呼び出したElectronのような開発者の責任なのか?それは一概には言えません。例えばMicrosoftは、オペレーティングシステムのアップグレード時に特定のアプリケーションで問題が発生するのを回避するために、Windowsにコードを何度も組み込んできました。

「Electron の_cornerMaskオーバーライドは、コーナー スムージングに関する古い問題を修正するために行われた汚いハックでした」と、コードを更新した開発者は述べています。一方、別の開発者は、Apple が「このようなパフォーマンス ペナルティを伴うカスタムの方法でシャドウイングの問題に対処することを開発者に阻止するのは、せいぜい無責任です。私にとって、これは『ひどい QA』のカテゴリに入ります」と主張しています。

Electron と Chromium の両方の問題には回避策があり、その 1 つは macOS の自動入力を完全に無効にすることです。

もう 1 つの解決策は、macOS のアップグレードを数か月延期し、Apple がバグを修正し、開発者がアプリケーションを更新する時間を確保することです。®

Discover More