Maison interface Web js tutoriel eval的两组性能测试数据_javascript技巧

eval的两组性能测试数据_javascript技巧

May 16, 2016 pm 05:50 PM
eval 性能测试

@老赵 的一个微博“ 由eval生成的代码效率真的很差吗? http://t.cn/zWTUBEo 内含人身攻击,不喜勿入。”
引发了最近对eval火爆的讨论,教主 @Franky 和 灰大 @otakustay 也给了精彩的数据分析。
刚好之前也做过类似的测试,我也跟风凑个热闹,提供两组数据供大家参考。

更新1: 感谢灰大 @otakustay 的指导,为排除eval('')调用本身对结果的影响,增加一组新数据A3, B3。并对旧的全部数据重测。
更新2: 感谢莫大 @貘吃馍香 的强力拍砖,增加了1). A4, B4;A5,B5的eval覆盖后的测试数据; 2). A6,B6 eval别名;3). A7,B7 eval.call。

测试环境:
a. 机器:Intel(R) Corei7-2720 2.2Ghz (4核心8线程)、内存8Gb
b. OS:Windows 7 Enterprise SP1 64-bit
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 Console,开启这些工具会使时间倍增,很难在有效时间内得到该用例结果

用例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;
function func() {
var d = 2;
e = !c;
//eval("");
}
for (var i = 0; i func(i, i + 1, i + 2);
}
}();

用例A3:
为排除eval("")调用本身产生的影响,我们在外层函数中调用eval("")
复制代码 代码如下:

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

用例A4:
将eval()函数覆盖成普通的空函数
复制代码 代码如下:

function 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,
c = true;
function func() {
var d = 2;
e = !c;
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;
function func() {
var d = 2;
e = !c;
f("");
}
for (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 !function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

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

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

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

for (var i = 0; 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 !function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
eval("");
}();
}();
}

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

var f = function(){}
for (var i = 0; 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 !function() {
var a = 1,
b = 2,
c = true;
!function () {
var d = 2;
e = !c;
f("");
}();
}();
}

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

for (var i = 0; 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是被覆盖的空函数,在Scope Variables中都将会把所有的外部定义的变量等内容初始化到当前的Scope中。类似的,eval会对内联函数在运行时JS引擎的优化功能产生较大影响,降低执行效率。

4. 说点题外话,虽然没用IE10,而是IE9,在对eval的处理上,表现非常的优异。IE一直被开发人员诟病,但它的飞速成长也是值得肯定的,本例就是很好的一项证明。 

更详细的原因剖析下列文章描述已十分详细,不再累述。欢迎拍砖:)尤其是莫大... 

 @老赵          的 《由eval生成的代码效率真的很差吗?》 
 @Franky      的  《Eval科普》 
 @otakustay  的 《浅谈Eval的影响》 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Docker pour les tests de performances et les tests de stress des conteneurs Comment utiliser Docker pour les tests de performances et les tests de stress des conteneurs Nov 07, 2023 pm 04:53 PM

Comment utiliser Docker pour les tests de performances et les tests de stress des conteneurs nécessite des exemples de code spécifiques Introduction L'essor de la technologie de virtualisation des conteneurs a rendu le déploiement et le fonctionnement des applications plus flexibles et efficaces, et l'un des outils les plus populaires est Docker. En tant que plate-forme de conteneurisation légère, Docker offre un moyen pratique d'empaqueter, de distribuer et d'exécuter des applications, mais comment tester et évaluer les performances des conteneurs, en particulier les tests de contrainte dans des conditions de charge élevée, est une question qui préoccupe de nombreuses personnes. Cet article présentera

Que signifie eval en python ? Que signifie eval en python ? May 22, 2019 pm 03:18 PM

eval signifie « évaluation » et est une fonction intégrée à Python qui est utilisée pour exécuter une expression de chaîne et renvoyer le résultat du calcul de l'expression ; c'est-à-dire que lors de l'attribution d'une variable, la représentation à droite du signe égal est ; écrite sous le format d'une chaîne, La valeur de retour est le résultat de cette expression. Syntaxe "eval(expression[, globals[, locaux]])".

La différence entre les tests de performances et les tests unitaires en langage Go La différence entre les tests de performances et les tests unitaires en langage Go May 08, 2024 pm 03:09 PM

Les tests de performances évaluent les performances d'une application sous différentes charges, tandis que les tests unitaires vérifient l'exactitude d'une seule unité de code. Les tests de performances se concentrent sur la mesure du temps de réponse et du débit, tandis que les tests unitaires se concentrent sur la sortie des fonctions et la couverture du code. Les tests de performances simulent des environnements réels avec une charge et une concurrence élevées, tandis que les tests unitaires s'exécutent dans des conditions de faible charge et en série. L'objectif des tests de performances est d'identifier les goulots d'étranglement des performances et d'optimiser l'application, tandis que l'objectif des tests unitaires est de garantir l'exactitude et la robustesse du code.

Pratique de test et de réglage des performances d'équilibrage de charge Nginx Pratique de test et de réglage des performances d'équilibrage de charge Nginx Oct 15, 2023 pm 12:15 PM

Présentation des pratiques de test et de réglage des performances d'équilibrage de charge Nginx : en tant que serveur proxy inverse hautes performances, Nginx est souvent utilisé dans des scénarios d'application d'équilibrage de charge. Cet article explique comment effectuer des tests de performances de l'équilibrage de charge Nginx et améliorer ses performances grâce à des pratiques de réglage. Préparation du test de performances : avant d'effectuer le test de performances, nous devons préparer un ou plusieurs serveurs avec de bonnes performances, installer Nginx et configurer le proxy inverse et l'équilibrage de charge. Sélection de l'outil de test : afin de simuler des conditions de charge réelles, nous pouvons utiliser des

Comment implémenter l'optimisation sous-jacente MySQL : utilisation et analyse avancées des outils de test et de réglage des performances Comment implémenter l'optimisation sous-jacente MySQL : utilisation et analyse avancées des outils de test et de réglage des performances Nov 08, 2023 pm 03:27 PM

Comment réaliser une optimisation sous-jacente de MySQL : utilisation et analyse avancées des outils de test et de réglage des performances Introduction MySQL est un système de gestion de base de données relationnelle couramment utilisé dans diverses applications Web et grands systèmes logiciels. Afin de garantir l'efficacité opérationnelle et les performances du système, nous devons effectuer une optimisation sous-jacente de MySQL. Cet article décrit comment utiliser les outils de test et de réglage des performances pour une utilisation et une analyse avancées, et fournit des exemples de code spécifiques. 1. Sélection et utilisation des outils de test de performances Les outils de test de performances sont importants pour évaluer les performances du système et les goulots d'étranglement

Test de performances approfondi du Red Magic 9 Pro : il met fin prématurément à la compétition de performances Test de performances approfondi du Red Magic 9 Pro : il met fin prématurément à la compétition de performances Feb 03, 2024 pm 04:35 PM

Il faut dire que dans ce marché de la téléphonie mobile de plus en plus homogénéisé, le Red Magic constitue effectivement une existence tout à fait unique et insolite. Alors que toute la catégorie des téléphones de jeu est en difficulté en raison de l'amélioration du taux de consommation d'énergie de Qualcomm Snapdragon, les Diables Rouges ont toujours adhéré à leur propre ensemble de concepts de produits, avec un corps droit et une dissipation active de la chaleur, tout ce qu'ils veulent, c'est une version performante. . Alors que les téléphones mobiles phares de l'ensemble de l'industrie sont de plus en plus affaissés en raison de l'accumulation constante de modules d'imagerie, les Red Devils vous proposent en fait une conception de caméra arrière plate. Cela pourrait même être la première tendance dans l'ensemble de l'industrie de la téléphonie mobile dans le passé. quatre ou cinq ans. Le seul produit sur le marché. (Source : Red Devils) Le plus important est qu'en tant que maître de l'opinion des internautes, les Red Devils ont vraiment réussi à attirer un groupe de fans. Lorsque les sous-marques phares de plusieurs grands fabricants se vendent environ 3 000 yuans.

Comment désactiver eval en php sous Win Comment désactiver eval en php sous Win Oct 31, 2022 am 09:33 AM

Comment désactiver eval en PHP sous win : 1. Téléchargez « PHP_diseval_extension » ; 2. Recherchez le PHP actuellement utilisé par le serveur ; 3. Ouvrez le fichier de configuration PHP ; 4. Ajoutez le code « extension=diseval.so » ; Redémarrez le service.

Conseils de développement Vue : Comment effectuer des tests de performances et des réglages de performances Conseils de développement Vue : Comment effectuer des tests de performances et des réglages de performances Nov 22, 2023 pm 12:01 PM

Dans le développement de Vue, les performances sont une question très importante. Si nous parvenons à développer des applications offrant d’excellentes performances, l’expérience utilisateur et la compétitivité sur le marché s’en trouveront grandement améliorées. Pour y parvenir, nous devons effectuer des tests de performances et des réglages de performances. Cet article explique comment effectuer des tests de performances et un réglage des performances. 1. Tests de performances Les tests de performances sont la clé pour améliorer les performances des applications. Il peut détecter les facteurs à l’origine des problèmes de performances de l’application puis les optimiser. Pour effectuer des tests de performances, nous pouvons adopter les méthodes suivantes : 1. Test de référence Le test de référence est

See all articles