ホームページ ウェブフロントエンド jsチュートリアル eval_javascript スキル用の 2 セットのパフォーマンス テスト データ

eval_javascript スキル用の 2 セットのパフォーマンス テスト データ

May 16, 2016 pm 05:50 PM
eval 性能試験

@老赵による Weibo の投稿「eval によって生成されたコードは本当に非効率ですか? http://t.cn/zWTUBEo 個人攻撃が含まれています。気に入らない場合は入力しないでください。
が最近の投稿を引き起こしました。」 eval についての白熱した議論 ディスカッションでは、リーダーの @Franky と Hui Da @otakustay も素晴らしいデータ分析を行いました。
私もたまたま以前に同様のテストを行ったことがあったので、それに倣って楽しみに参加し、参考のために 2 セットのデータを提供しました。

更新 1: @otakustay の指導のおかげで、結果に対する eval('') 呼び出し自体の影響を排除するために、新しいデータ セット A3 と B3 が追加されました。そして古いデータをすべて再テストします。
更新 2: Mo Da @貘吃荍香の強力な Paizhuan に感謝します。A4、B4、B6 の評価後のテスト データ 3)。 A7、B7 評価呼び出し。

テスト環境:
a. マシン: Intel(R) Corei7-2720 2.2Ghz (4 コア 8 スレッド)、メモリ 8Gb
b. OS: Windows 7 Enterprise SP1 64 ビット
c. ブラウザ:
b.1 Google Chrome 21.0.1180.79 m
b.2 Firefox 14.0.1
b.3 IE9.0.8112.16421
d. テスト方法
d. 1 各ユースケースは 5 回テストされ、最小限の時間がかかります。
d.2 Firebug または Chrome コンソールがテスト中にオンになっていなかったため、これらのツールをオンにすると時間が 2 倍になり、有効時間内にこのユースケースの結果を取得することが困難になります。

ユースケースA1:
関数内で空の eval("") をインライン化します

コードをコピー コードは次のとおりです:

!function () {
var a = 1,
b = 2,
c = true;
function func() {
var d = 2 ;
e = !c;
eval("");
for (var i = 0; i func(i, i 1, i 2);
}
}();

ユースケース A2:
インライン関数の eval("") をコメントアウトします。 >

コードをコピー
コードは次のとおりです: !function() { var a = 1,
b = 2,
c = true;
関数 func() {
e = !c;
; 🎜>for (var i = 0; i func(i, i 1, i 2)
}
}(); >ユースケース A3:
は eval("" を除外します) 呼び出し自体の影響で、外部関数で eval("") を呼び出します




コードをコピーします

コードは次のとおりです:


!function() {
var a = 1, b = 2, c = true ; 関数 func() { var d = 2; e = !c; for (var i = 0; i eval("");
func(i, i 1, i 2 ; >
コードをコピーします


コードは次のとおりです:


関数eval(){}
!function() {
var a = 1、
b = 2、
c = true;
function func() {
var d = 2 ;
e = !c;
eval("");
for (var i = 0; i func(i, i 1, i 2);
}
}(); ユースケース A5: これも eval ではなく、別の空の関数 f


コードをコピー


コードは次のとおりです:


function f(){}
!function () {
var a = 1,
b = 2,
関数 func() {
var d = 2; 🎜>f("");
for (var i = 0; i func(i, i 1, i 2); >}();


ユースケース A6:
eval を別の変数 f に代入し、f を呼び出します
コードをコピーします コードは次のとおりです:

var f = eval;
!function() {
var a = 1,
b = 2、
c = true;
関数 func() {
e = ! c; (var i = 0; i func(i, i 1, i 2)
}
}(); A7:

eval.call を使用して



コードをコピー

コードは次のとおりです: !function() { var a = 1, b = 2, c = true;
function func() {
var d = 2; >e = !c;
eval.call(null, '');
for (var i = 0; i func(i, i 1) , i 2);
}
}();

A组测试结果: 

A1 A2 A3 A4 A5 A6 A7 A1 : A2 A1 : A3 A1 : A4 A4 : A5
Chrome 1612ms 8ms 1244ms 897ms 7ms 718ms 680ms 201.5 1.3 1.8 128.1
Firefox 2468ms 69ms 732ms 2928ms 134ms 5033ms 4984ms 35.8 3.4 0.8 21.9
IE 1207ms 23ms 233ms 1147ms 37ms 148ms 224ms 52.5 5.2 1.0 31.0
用例B1:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B2:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
//eval("");
}();
}();
}

用例B3:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
}();
}();
eval("");
}

用例B4:
复制代码 代码如下:

var eval = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

用例B5:
复制代码 代码如下:

var f = function(){}
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B6:
复制代码 代码如下:

var f = eval;
for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

用例B7:
复制代码 代码如下:

for (var i = 0; i < 2999999; i++) {
!function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval.call(null, '');
}();
}();
}

B组测试结果:
B1 B2 B3 B4 B5 B6 B7 B1 : B3 B1 : B2 B1 : B4 B4 : B5
Chrome 1569ms 134ms 1093ms 1022ms 173ms 830ms 916ms 11.7 1.4 1.5 5.9
Firefox 5334ms 1017ms 5503ms 5280ms 1171ms 6797ms 6883ms 5.2 1.0 1.0 4.5
IE 3933ms 560ms 680ms 4118ms 583ms 745ms 854ms 7.0 5.8 1.0 111.3

結論 ( は本文中の CASE に限定されます):

1. eval 自体の呼び出しを繰り返すと、空の eval("");

の場合でも非常に時間がかかります。

2. eval はインライン関数の実行効率に影響を与えますが、これは特定の環境やコードによって異なります。

3. グループ A であってもグループ B であっても、どちらのブラウザでも 2 と 5 の速度が優れていることがわかります。例のインライン関数の eval がどのように呼び出されても (eval が空の関数で上書きされても)、動作効率に大きな影響を与えることがわかります。推論は (ブラック ボックス推論、非権威、おそらく単なる推測)、eval がインライン関数で見つかった限り、たとえ eval がオーバーライドされた空関数であっても、すべての外部定義変数とその他の内容はスコープで初期化されるということです。現在のスコープへの変数。同様に、eval はインライン関数の実行時に JS エンジンの最適化機能に大きな影響を与え、実行効率を低下させます。

4. 余談ですが、IE10は使用していませんが、IE9を使用していますが、eval処理のパフォーマンスは非常に優れています。 IE は常に開発者から批判されてきましたが、その急速な成長は評価に値します。この例はその良い証拠です。

理由の詳細な分析については、次の記事で詳しく説明されているため、繰り返しません。ようこそ:) 特にMo Da...

@老赵《eval によって生成されたコードは本当に非効率ですか? 》
@Franky「ポピュラー・サイエンス・オン・エヴァル」
@otakustay「A Brief Talk on Eval」 Eval の影響"

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

コンテナーのパフォーマンス テストとストレス テストに Docker を使用する方法 コンテナーのパフォーマンス テストとストレス テストに Docker を使用する方法 Nov 07, 2023 pm 04:53 PM

コンテナーのパフォーマンス テストとストレス テストに Docker を使用する方法には、特定のコード サンプルが必要です。はじめにコンテナー仮想化テクノロジの台頭により、アプリケーションのデプロイメントと運用がより柔軟かつ効率的になりました。最も人気のあるツールの 1 つは Docker です。軽量のコンテナ化プラットフォームとして、Docker はアプリケーションをパッケージ化、配布、実行するための便利な方法を提供しますが、コンテナーのパフォーマンス、特に高負荷条件でのストレス テストをどのようにテストして評価するかは、多くの人が懸念している問題です。この記事で紹介するのは

Pythonのevalとはどういう意味ですか? Pythonのevalとはどういう意味ですか? May 22, 2019 pm 03:18 PM

eval は「評価」を意味し、文字列式を実行してその式の計算結果を返すために使用される Python の組み込み関数です。つまり、変数を代入する場合、等号の右側の表現は次のようになります。文字列形式で記述され、戻り値はこの式の結果です。構文「eval(expression[, globals[, locals]])」。

Go 言語でのパフォーマンス テストと単体テストの違い Go 言語でのパフォーマンス テストと単体テストの違い May 08, 2024 pm 03:09 PM

パフォーマンス テストでは、さまざまな負荷の下でアプリケーションのパフォーマンスを評価します。一方、単体テストでは、単一のコード単位の正確性を検証します。パフォーマンス テストは応答時間とスループットの測定に重点を置き、単体テストは関数の出力とコード カバレッジに重点を置きます。パフォーマンス テストは高負荷と同時実行性のある現実の環境をシミュレートしますが、単体テストは低負荷とシリアル条件で実行されます。パフォーマンス テストの目標は、パフォーマンスのボトルネックを特定し、アプリケーションを最適化することですが、単体テストの目標は、コードの正確さと堅牢性を確認することです。

Nginx 負荷分散パフォーマンスのテストとチューニングの実践 Nginx 負荷分散パフォーマンスのテストとチューニングの実践 Oct 15, 2023 pm 12:15 PM

Nginx 負荷分散のパフォーマンス テストと調整方法の概要: Nginx は、高性能リバース プロキシ サーバーとして、負荷分散アプリケーション シナリオでよく使用されます。この記事では、Nginx 負荷分散のパフォーマンス テストを実行し、チューニングの実践を通じてパフォーマンスを向上させる方法を紹介します。パフォーマンス テストの準備: パフォーマンス テストを実行する前に、良好なパフォーマンスを備えた 1 つ以上のサーバーを準備し、Nginx をインストールし、リバース プロキシと負荷分散を構成する必要があります。テストツールの選択: 実際の負荷条件をシミュレートするには、一般的なツールを使用できます。

MySQL の基盤となる最適化を実装する方法: パフォーマンス テストおよびチューニング ツールの高度な使用と分析 MySQL の基盤となる最適化を実装する方法: パフォーマンス テストおよびチューニング ツールの高度な使用と分析 Nov 08, 2023 pm 03:27 PM

MySQL の根本的な最適化を実現する方法: パフォーマンス テストおよびチューニング ツールの高度な使用と分析 はじめに MySQL は、さまざまな Web アプリケーションや大規模なソフトウェア システムで広く使用されている、一般的に使用されるリレーショナル データベース管理システムです。システムの動作効率とパフォーマンスを確保するには、MySQL の基盤となる最適化を実行する必要があります。この記事では、パフォーマンス テストおよびチューニング ツールを使用して高度な使用法と分析を行う方法について説明し、具体的なコード例を示します。 1. パフォーマンス テスト ツールの選択と使用 パフォーマンス テスト ツールは、システムのパフォーマンスとボトルネックを評価するために重要です

Red Magic 9 Pro の詳細なパフォーマンス テスト: パフォーマンス コンテストを早期に終了します Red Magic 9 Pro の詳細なパフォーマンス テスト: パフォーマンス コンテストを早期に終了します Feb 03, 2024 pm 04:35 PM

均質化が進む携帯電話市場において、レッドマジックは実にユニークで珍しい存在であると言わざるを得ません。 Qualcomm Snapdragon のエネルギー消費率の向上により、ゲーミングフォン カテゴリ全体が苦戦している中、Red Devil はストレートなボディとアクティブ冷却を備えた独自の製品コンセプトを常に堅持しており、求めているのはパフォーマンスのリリースだけです。業界の主力携帯電話全体が画像モジュールの絶え間ない蓄積によりますます低迷しつつある中、Red Devils は実際にフラットな背面カメラ設計を提供しています。これは過去の携帯電話業界全体の最初のトレンドである可能性さえあります。 4、5 年かかる、市場で唯一の製品です。 (出典:Red Devils) 最も重要なことは、Red Devils がネチズンの意見の達人として、多くのファンを魅了することに本当に成功しているということです。複数の大手メーカーの主力サブブランドが約 3,000 元で販売されている場合、これは

Vue 開発のアドバイス: パフォーマンス テストとパフォーマンス チューニングの実行方法 Vue 開発のアドバイス: パフォーマンス テストとパフォーマンス チューニングの実行方法 Nov 22, 2023 pm 12:01 PM

Vue 開発では、パフォーマンスは非常に重要な問題です。優れたパフォーマンスのアプリケーションを開発できれば、ユーザーエクスペリエンスと市場競争力は大幅に向上します。これを達成するには、パフォーマンス テストとパフォーマンス チューニングを実行する必要があります。この記事では、パフォーマンステストとパフォーマンスチューニングを実行する方法を紹介します。 1. パフォーマンス テスト パフォーマンス テストは、アプリケーションのパフォーマンスを向上させるための鍵です。アプリケーションのパフォーマンス上の問題を引き起こす要因を検出し、それらを最適化します。性能テストを行うには、以下の方法が考えられます。 1. ベンチマークテスト ベンチマークテストは、

Java 開発: パフォーマンス テストとベンチマークに JMH を使用する方法 Java 開発: パフォーマンス テストとベンチマークに JMH を使用する方法 Sep 20, 2023 pm 02:00 PM

Java 開発: パフォーマンス テストとベンチマークに JMH を使用する方法 はじめに: Java 開発プロセスでは、多くの場合、コードのパフォーマンスと効率をテストする必要があります。コードのパフォーマンスを正確に評価するには、Java 開発者向けに特別に設計されたパフォーマンス テストおよびベンチマーク ツールである JMH (Java Microbenchmark Harness) ツールを使用できます。この記事では、パフォーマンス テストとベンチマークに JMH を使用する方法を紹介し、いくつかの具体的なコード例を示します。 1. 何を

See all articles