
Windows 10 および 11 の Chromium で非常に奇妙な問題が発生しています。2 つの異なる Chromium ベースのブラウザー (Chrome と Brave) を試しましたが、どちらも同じ問題が発生します。
私のセットアップについて少し説明します: 4K モニター 1 台、1440p モニター 1 台、1080p モニター 1 台、Ryzen 3900X、RTX 3070、32GB の RAM。すべてのモニターは Windows で 100% DPI に設定されており、最新の Nvidia ドライバーを使用してネイティブ解像度で実行されます。
1080p モニターでブラウザを最大化し、Facebook の「誰かがコメントを入力しています」や通常の CSS アニメーションなどのアニメーションを再生すると、4K および 1440p モニターでのビデオ再生が完全に遅れ始め、ある時点でビデオが停止します (無限バッファリング)。タブを切り替えたり、1080p モニターのアニメーションが停止したりするとすぐに、ビデオの再生が再開されます。
もともと Windows 10 でこの問題が発生していましたが、SSD を完全に消去して Windows 11 をインストールすることにしました。Brave をインストールし、Chrome から設定をインポートしないことにしたので、完全なデフォルト インストールでした。しかし、まったく同じ問題が発生します。
chrome://flags でハードウェア アクセラレーションをオフにしてブラウザーを再起動すると、問題なく動作します。ビデオの再生は問題ありませんが、YouTube の 4K 60 FPS は時々途切れます。ブラウザーを最大化せずにウィンドウ内で実行すると、同様に問題なく動作します。
この時点で、いくつかの点が間違っている可能性があると疑っています。
- Chromium (私の知る限り、この問題は誰も報告していないので、可能性は低い)
- ハードウェア(CPU、GPU、マザーボード)
Windows を再インストールし、いくつかの異なる Nvidia ドライバーを試したので、不良ドライバーを排除できます。問題は Chromium の使用時にのみ発生するため、実際のハードウェアが原因ではないと思います。
私が試したことのリストは次のとおりです:
- 別のHDMIケーブル
- GPUの異なるポート
- モニターを別の1080pモニターと交換する
- Windowsを再インストールする
- すべてのモニターの解像度、リフレッシュレートなどを変更する
この問題を再現するには、1080p モニターでこのページ (CSS アニメーションを使用して回転する四角形) を開き、別のモニターで任意の YouTube ビデオを再生するだけです。https://codepen.io/teerapuch/pen/vLJXeR
私の携帯電話を使用して録画した例を見るには(PC の問題を排除するため)、次のリンクを参照してください。https://www.youtube.com/watch?v=ufsDsV6_HCg
アニメーションの再生中は、ビデオの再生が停止します。この投稿のタブ(アニメーションがないタブ)に切り替えると、ビデオの再生が再開されます。
この動作をデバッグするにはどこから始めればよいのでしょうか? イベント ビューアーにも、私が調べた他の場所にもエラーはありません。
答え1
結局、この問題はすべてモニターの問題だったことが判明しました。原因はまだわかりませんし、説明もできませんが、現在は修正されています。
古い 1080p モニターを捨てて、新しい 2560x1440 モニターに買い替えました。今ではすべてがスムーズに動作します。
この問題に遭遇した人のために、私はブラウザで基本的にすべての CSS アニメーションを無効にするユーザー スクリプト (TamperMonkey) を作成しました。1 秒ごとに新しいアニメーションがあるかどうかを確認し、アニメーションがある場合は削除します。一部のページは見栄えが悪くなりますが、私が経験した遅延に比べれば、それは良いトレードオフです。
// ==UserScript==
// @name Disable all animations
// @version 1.0
// @author mortenmoulder
// @include *
// @grant GM_addStyle
// @grant GM_addElement
// ==/UserScript==
//remove animations globally
GM_addStyle("* { animation-duration: 0s !important; animation-play-state: paused; }");
var ignoreElements = [];
//remove animations inside shadow DOM elements
function findShadowRoots(elements) {
for (var i = 0; i < elements.length; i++) {
if(elements[i].shadowRoot) {
if(ignoreElements.includes(elements[i].shadowRoot) == false) {
GM_addElement(elements[i].shadowRoot, 'style', { textContent: '* { animation-duration: 0s !important; animation-play-state: paused;' });
ignoreElements.push(elements[i].shadowRoot);
}
findShadowRoots(elements[i].shadowRoot.querySelectorAll("*"));
}
}
}
//remove animations every 1 second
setInterval(() => {
var allNodes = document.querySelectorAll('*');
findShadowRoots(allNodes);
}, 1000);