eval_javascript スキル用の 2 セットのパフォーマンス テスト データ
@老赵による 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);
}
}();
インライン関数の eval("") をコメントアウトします。 >
コードをコピー
関数 func() {
e = !c;
; 🎜>for (var i = 0; i func(i, i 1, i 2)
}
}(); >ユースケース A3:
は eval("" を除外します) 呼び出し自体の影響で、外部関数で eval("") を呼び出します
コードをコピーします
!function() {
コードをコピーします
コードは次のとおりです:
関数eval(){}
!function() {
var a = 1、
b = 2、
c = true;
function func() {
var d = 2 ;
e = !c;
for (var i = 0; i func(i, i 1, i 2);
}
コードをコピー
コードは次のとおりです:
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 を使用して
コードをコピー
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 |
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 の影響"

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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