36

これはロングショットです - とにかく、JSプラグインを介してグラフィックスカードのパフォーマンスが低いか強いかを検出する方法はありますか?

クライアント用にパララックス サイトを構築しましたが、パフォーマンスの低いマシンでは動作が遅くなります。パフォーマンスを微調整して、全体的により適切に機能するようにすることもできますが、もちろんこれにより、パフォーマンスの高いマシンを使用するユーザーのエクスペリエンスが低下します。

ブラウザのバージョンも検出できましたが、同じブラウザが低パフォーマンスのマシンでも高パフォーマンスのマシンでも実行できるため、この状況では役に立ちません。

何か案は?

4

7 に答える 7

29

requestAnimationFrame (rAF) がこれに役立ちます。

rAFを使用してフレームレートを把握できます。詳細はこちら: requestAnimationFrame を使用して Canvas で FPS を計算します。つまり、フレーム間の時間差を計算し、それで 1 を割ります (例: 1/.0159s ~= 62fps )。

注: どの方法を選択しても、パフォーマンスは任意に決定されます。おそらく、毎秒 24 フレームを超えるものは「高性能」と見なすことができます。

于 2013-03-22T20:20:35.997 に答える
17

ユーザーに決めさせてみませんか?Youtube(および他の多くのビデオ共有サイト)は、再生品質のセレクターを実装しています。これで、選択可能な解像度のリストが表示された歯車のアイコンになりました。そのようなだろうHD| SDまたはHi-Fi| Lo-Fiセレクターは、アプリケーションのコンテキストで機能しますか(または意味がありますか)?

于 2013-03-13T20:49:18.687 に答える
3

ここで、「古い学校」のロード画面が役に立ちました。複雑なものを前景 (または非表示) にレンダリングできます。どの効果を有効または無効にするかを決定できます。

基本的には、これについて jcage が言及したものを使用し、フレームレートをテストします (つまりsetInterval、タイマーと組み合わせて使用​​します)。ただし、これは常に 100% 信頼できるとは限りません。なぜなら、彼らのマシンがそのインスタンスで三重らせん後方宙返り (またはより可能性の高いもの) を行うことを決定した場合、危険な読み取り値が得られるからです。関連するアニメーションによっては、エフェクトをリアルタイムでアップグレードおよびダウングレードすることもできますが、これは常にコーディングが難しく、状況を独自に分析すると、実際にはパフォーマンスが低下することがあります。

于 2013-03-13T18:04:10.213 に答える
1

ブラウザがwindow.requestAnimationFrameをサポートしているかどうかを確認することを検討してください。これは、新しいブラウザで実行していることを示します。または、jQuery.fx.intervalを確認することを検討してください。

次に、カスタム関数を実装して、使用可能な処理能力を測定できます。カスタムイージング関数を使用してみてください。この関数を.slideDown()などの関数で実行して、使用可能な計算能力を把握することができます。

javascriptでパフォーマンスをチェックする方法の詳細については、別の質問に対するこの回答を参照してください。

于 2013-03-13T17:52:31.247 に答える
1

ブラウザが超近代的でrequestAnimationFrameをサポートしている場合は、アニメーションのフレームレートをリアルタイムで計算し、低速のマシンのアニメーション設定を削除できますそれはIE10、Firefox 4、Chrome 10、Safari6です。

基本的に、requestAnimationFrame()コールバックで実行され、各ティック間で何ミリ秒が経過するかを追跡する「tick」関数を作成します。非常に多くのティックが登録されたら、それを平均して全体的なフレームレートを決定できます。ただし、これには2つの注意点があります。

  1. タブがバックグラウンドにある場合、requestAnimationFrameコールバックは一時停止されます。したがって、数秒から数分のフレーム間の単一の突然の遅延は、アニメーションが遅いことを意味するわけではありません。と:

  2. 各アニメーションフレームでJavaScriptゲージを実行するだけで、アニメーション全体の速度が少し遅くなります。悪影響を与えずにそのようなものを測定する方法はありません。ハイゼンベルグはろくでなしだということを忘れないでください。

古いブラウザの場合、フレームレートを確実に測定する方法がわかりません。setTimeout()を使用してシミュレートできる場合がありますが、それほど正確ではなく、パフォーマンスにさらに悪影響を与える可能性があります。

于 2013-03-19T05:31:24.060 に答える
1

Firefox には、サポートされていないグラフィック カードのリストが組み込まれています: https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers関連のヘルプ記事

ただし、WebGL 機能にアクセスするときに間接的にしかテストできません...

http://get.webgl.org/troubleshooting/では、問題が発生した場合に対応するブラウザー プロバイダーにアクセスできます。JS コードを確認すると、次の方法でテストされていることがわかります。

if (window.WebGLRenderingContext) {
    alert('Your browser does not support WebGL');
}

最新のグラフィック カードを使用している場合。

于 2013-03-13T16:34:59.077 に答える
1

これは、リスク/ベネフィットに基づく決定である可能性があります。ここで、重要ではあるが厳しい決断を下さなければならないと思います。

1) 2 つのバージョンを使用することにした場合は、次の作業に時間を費やす必要があります。

  • 高速で非侵入型のテストを見つけ出す
  • それを実装するのに時間を費やす
  • それを生産に投入する

そして、おそらく間違った実装で終わるでしょう。たとえば、私のコンピューターが 70 個のクロム タブ、1080p アニメの VLC、および IntellijIDEA を実行している瞬間などです。

私のMBP、2012年モデルが「遅い」コンピューターとして検出される可能性は、少なくとも今のところ高いです。

偽陽性は、把握するのが非常に困難です。

2) 1 つのバージョンを使用する場合、@Patrick が述べたように、HD と Lo-Fi のどちらかを選択する必要がありますが、これも私の意見では間違いです。

私が提案するのは、Google アナリティクスにアクセスして、ブラウザの分布を把握し (はい、誤解を招く可能性があることはわかっていますが、他のテストも同様です)、それに基づいて (大多数のユーザーが Chrome + 最新の IE/FF である場合) HD バージョンを使用しますが、最適化戦略を考え出すのに時間がかかります。

より良く、より速くできることは常にあります。古いラップトップを 1 台入手し、適切な FPS レートが得られるまで最適化します。それだけです。開発者はその決定を下す必要があります。それがあなたの義務です。

3) ブラウザのディストリビューションから、絶対に Lo-Fi バージョンを使用する必要があることがわかった場合は、「ダウングレード」する価値があると考えて、それが最後の手段である場合にのみ実装してください。

于 2013-03-24T20:19:08.833 に答える