Visual Studio Code エディタで点滅カーソルが CPU サイクルを消費する

Table of Contents

Visual Studio Code エディタで点滅カーソルが CPU サイクルを消費する

Microsoft は、Visual Studio Code を「最新の Web およびクラウド アプリケーションの構築とデバッグに最適化された」ソース コード エディターであると説明しています。

実際、VSCはCPUリソースの消費効率が非常に低いことが判明しています。開発者のJo Liss氏は、フォーカスが当たっているアイドル状態のVSCが、点滅するカーソルのレンダリングだけでCPU能力の13%を消費していることを発見しました。

Microsoft VSC graph

Liss 氏は、すべての VSC ウィンドウを閉じて新しいウィンドウを開き、空の無題のファイルを含む新しいタブを開いて、CPU アクティビティを確認することで問題を再現できると説明しています。

Liss 氏によると、Chrome や TextEdit のように点滅するカーソルを表示する他の macOS アプリケーションの場合、CPU の使用量はそれほど過剰にはならないという。

この問題は、カーソルを 500 ミリ秒ごとではなく 16.67 ミリ秒 (60 fps) ごとにレンダリングすることから発生します。

不要な電力消費を排除するには、アプリの settings.json ファイルに次の行を追加します。

"editor.cursorBlinking": "solid"

より永続的な修正はオープンソースの Chromium プロジェクトから提供される必要があるが、Microsoft は独自の解決策を計画している。

VSCは、JavaScript、HTML、CSSを使用してデスクトップアプリを作成するためのクロスプラットフォームフレームワークであるElectronをベースにしています。Slackなどの他のElectronベースのアプリでも、過剰なレンダリングによるCPU使用率の過剰という同様の問題が発生しているようです。

Electronアプリは、オープンソースブラウザプロジェクトであるChromiumと、ブラウザランタイムとしてNode.jsに依存しています。Microsoft VSC開発者のPeng Lyu氏がLiss氏の投稿への返信で指摘しているように、同様のChromiumの問題が報告されています。実際、Chromiumのアニメーション処理の非効率性は、少なくとも2014年まで遡ります。

マイクロソフトの広報担当者はメールで、できる限り丁寧な言い方でChromiumを非難した。「根本的な問題はChromiumにあります。ChromiumはElectron Shell(Visual Studio CodeやAtom、SlackなどのアプリでこのShellを使用しています)の一部です」と広報担当者は述べた。「GitHubの問題には、弊社チームとコミュニティの両方が詳細な分析を提供してくれました。そのスレッドには、即時の回避策と修正計画が記載されています。」

Google Chromeのプロダクトマネージャー、ポール・アイリッシュ氏は、Hacker Newsのスレッドに投稿し、「Chromeはレンダリングライフサイクル全体(スタイル、ペイント、レイヤー)を500ミリ秒間隔で実行すべきところを、16ミリ秒ごとに実行しています。Chromeのスタイルコンポーネントに取り組んでいるエンジニアならこの問題を解決できると確信していますが、少し手間がかかります。この問題の認知度が高まれば、修正の優先度も上がるでしょう」と述べています。

CPU使用率の過剰は比較的軽微な問題のように思えるかもしれませんが、テクノロジー業界の自画自賛的な継続的改善という文脈においては、大きな意味を持ちます。効率性の向上として称賛される新しいソフトウェア機能は、電力を浪費する古いソフトウェアの欠陥が何年も放置されていると、それほど魅力的には見えません。®

Discover More