問題タブ [jsperf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - jQuery プラグインのパフォーマンスのテストと比較
jQuery プラグインは無数にあるため、同じことを行うプラグインが 2 つ以上見つかった場合は、最適なものを選択するようにしたいと考えています。
私は通常、パフォーマンスの最初の指標としてファイルサイズを使用しますが、これらのプラグインのパフォーマンスをテストして比較するために他にできることはないかと考えていました.
jsperf.com を使用できますか? そこに比較したいプラグインを投げます。結果はパフォーマンスの良い指標になるでしょうか?
他の提案はありますか?
ありがとう。
javascript - HTML5キャンバス衝突検出「globalCompositeOperation」のパフォーマンス
朝、
過去数か月間、私はHTML5 Canvas APIをいじくり回しており、それを行うのは非常に楽しいものでした。
私は、ゲーム開発のすべきこととすべきでないことを自分自身に教えるためだけに、いくつかの小さなゲームを徐々に作成してきました。私は基本的な衝突検出、つまり円とプラットフォーム間の衝突を実行できるようになりました(ほとんどの場合、かなり単純ですが、最初に機能させたときはかなりの成果のように感じました。実際に起こっています)。多くのシナリオで上記の方法を使用して十分な結果を得ることができ、この方法は明らかにリソースにかなりの費用がかかるため、ピクセル衝突検出がすべてのゲームに適しているわけではないことを私は知っています。
しかし、私はちょうど脳波を持っていました(おそらく他の誰かがこれを考えていて、私はフィールドのずっと下にいますが、私はそれをグーグルで検索しましたが何も見つかりませんでした)...だからここに行きます...
キャンバスの「globalCompositeOperation」機能を使用/利用することは可能でしょうか。私の最初の考えは、メソッドを「xor」に設定してから、キャンバス上のすべてのピクセルの透明度をチェックすることでした。ピクセルが見つかった場合は、衝突が発生している必要があります。右?明らかに、この時点で、問題のピクセルがどのオブジェクトによって占められているか、およびどのように反応するかを理解する必要がありますが、他の手法ではこれを行う必要があります。
それは、形状が重なっているときに解決するために、キャンバスがすでに舞台裏でこの衝突検出を行っているということですか?これを拡張することは可能でしょうか?
何か案は?
ゲイリー
c# - C# コードの速度テスト サイト?
「data.Length==0」と「data==string.Empty」のどちらがより効率的ですか?
この質問には、実行時間を説明する回答がありました。
Javascript の場合: http://jsperf.com/というサイトがあることは知っています。
C#サイトはどうですか?ありますか?
javascript - 再帰関数の奇妙なjsPerfの動作
jsPerfのテストケースに次のコードがあります。
これをコンソールにコピーして実行するとquicksort( arr )
、ソートされた配列が正しく返されることがわかります。
しかし、何らかの理由で、jsPerfのこのテストケースでは、私のクイックソート関数は単一の数値のみを返すようです(「PerparationCodeOutput」に見られるように)。また、おそらく必要以上に高速に実行されているようです。
何が起こっているのかについてのアイデアは誰でも大歓迎です。
javascript - javascript での for ループと forEach のパフォーマンスと jsperf の結果の信頼性
for ループと forEach のパフォーマンスを測定する jsperf の結果は信用できません。少なくとも私のマシンの chrome と firefox の結果は、jsperf で宣伝されているものとは完全に異なります。
http://jsperf.com/foreach-vs-loop (私のもの)
http://jsben.ch/#/BQhED (より一般的)
Ubuntu 11.10 を実行している私のラップトップでは、Firefox で次の結果が得られました。
残念ながら、Chrome は console.timeEnd() の結果を返しませんが、実行時間は同じで、Chrome の方が高速です。forEach は、Chrome の for ループよりもほぼ 10 倍高速であり、Firefox では 3 倍高速です。
Chrome では、およそ次の実行時間を取得しています。
Firefox および Chrome コンソールで実行したコードを次に示します。
100 万項目のテストを実行しても、同じパフォーマンスの違いがあります。私が何か欠けているかどうか教えてください。私が観察している実際の結果ではなく、jsperf の結果を信頼する必要がありますか? もちろん、私はブラウザで今ここで見ることができる実際の結果を信頼しています.
編集: @Blender との議論中に発見されたように、テスト シナリオは客観的ではありません。js オプティマイザーは forEach ループをアクションなしで最適化するように見えるため、実際のコードがある場合は実行時間が不明瞭になります。
javascript - 使い方 Array.push メソッド
教えてください、値を配列にプッシュするより速い方法は何ですか?
メソッドpush
と比較する簡単なテストを作成しました。a[a.length]=
push.js:
main.js:
そして、私は次の結果を得ました:
クロム:
サファリ:
ファイアフォックス:
より速いようArray.push
に思えますが、なぜ一部のライブラリがarray length
代わりに使用するのですか? そして、そのような方法のどのようなボーナスがありますか? Chrome が遅いのはなぜですか? 多分いくつかのより速い方法が存在しますか?
javascript - この window.innerheight のパフォーマンスが悪いのはなぜですか?
友人が気づいたテストケースをテストしています。彼は window.innerheight をループで使用していましたが、fps が大幅に低下しました。
テスト用に作成した jsperf へのリンクは次のとおりですhttp://jsperf.com/innerheight
私が思いつく唯一の説明は、これがゲッターであり、呼び出しごとに実際の高さを計算するということです。そうですか?これを確認できるドキュメントはありますか?
javascript - jsPerf で data-xyz を使用すると querySelectorAll が機能するのに、コードでは機能しないのはなぜですか?
jsperf
、querySelectorAll
およびdata-xyz
属性をいじっています。
これが私の現在の jsperf です: jqmData と属性セレクター
重要な部分はjs
テストにあります:
角括弧 [] を使用していないことに注意してください。それでも正常に動作し、他のすべてのセレクターをフラットに打ち負かします。1 ページに 200 以上の data-role 要素を追加しましたが、それでも高速に動作しました。
次に、ここで自分のテストページを試してみましたが(Firebugを参照)、残念ながら...角括弧なしで省略した場合、nodeListは空です。
質問:
ダミーの Web サイトではなくそこでセレクターが機能するように、jsperf が使用している魔法は何ですか?
javascript - my.class.jsがこれほど高速になる理由は何ですか?
私はmy.class.jsのソースコードを調べて、Firefoxでこれほど高速になる理由を調べてきました。クラスの作成に使用されるコードのスニペットは次のとおりです。
このextend
関数は、2番目のオブジェクトのプロパティを最初のオブジェクトにコピーするために使用されます(オプションで既存のプロパティをオーバーライドします)。
このextendClass
関数は、すべての静的プロパティをクラスにコピーし、すべてのパブリックプロパティをクラスのプロトタイプにコピーします。
これはすべて非常に簡単です。クラスを作成すると、指定したコンストラクター関数が返されます。
ただし、私の理解に勝るのは、このコンストラクターのインスタンスを作成する方が、 Vapor.jsで記述された同じコンストラクターのインスタンスを作成するよりも速く実行される方法です。
これは私が理解しようとしていることです:
- my.class.jsのようなライブラリのコンストラクターは、Firefoxで非常に多くのインスタンスをどのようにすばやく作成しますか?ライブラリのコンストラクターはすべて非常に似ています。実行時間も同じではないでしょうか?
- クラスの作成方法がインスタンス化の実行速度に影響するのはなぜですか?定義とインスタンス化は別々のプロセスではありませんか?
- my.class.jsはどこからこのスピードブーストを得ていますか?コンストラクターコードの実行を高速化する部分が見当たりません。実際、のような長いプロトタイプチェーンをトラバースすると、
MyFrenchGuy.Super.prototype.setAddress.call
大幅に遅くなるはずです。 - コンストラクター関数はJITコンパイルされていますか?もしそうなら、なぜ他のライブラリのコンストラクター関数もJITコンパイルされないのですか?
javascript - Object.create(null)を使用して空のオブジェクトを作成することの影響と利点
まず、簡単なjsperfテストケースを作成して、明らかな:構文
Object.create(null)
を使用してオブジェクトを作成するよりもはるかに遅いことを示しました。http://jsperf.com/js-object-creation-null-proto{}
しかし、この事実を考えると、前者のケースは、最適化とパフォーマンスに関して時々良い代替案になるでしょうか?言い換えれば、最も軽量なjsオブジェクトを操作することでパフォーマンスを十分に向上させることができるので、場合によってはそれを使用することが合理的な選択になりました。
たとえば、オブジェクトプロパティに頻繁にアクセスする場合や、forinループを多用する場合を指します。
Object
この方法は、標準のプロトタイプによってもたらされる標準のプロパティを所有していないこれらのオブジェクトを人々が手に入れる可能性があるライブラリで使用するにはリスクが高すぎますか?
また、最も軽量なjsオブジェクトを作成する別の(より迅速な)方法を知っていますか?
PS:簡単なテストケースを作成して、aを使用してObject.create(null)
プロパティにアクセスする方が。よりも少し速い場合を示しました{}
。
http://jsperf.com/js-object-creation-and-accessing-properties