如何优化JavaScript脚本的性能(4)
作者:海啸 来源:海啸的地盘 发布时间:2008-02-19 21:47:00
标签:JavaScript,优化,性能
附录1
由于是以前做过的测试,测试代码已经不全,我补充了一部分如下:
var print;
if(typeof document != "undefined" ){
print = function(){
document.write(arguments[0]);
}
}else if(typeof WScript != "undefined" ){
print = function(){
WScript.Echo(arguments[0],arguments[1],arguments[2]);
}
}
function empty(){
}
function benchmark(f){
var i = 0;
var start = (new Date()).getTime();
while(i < pressure){
f(i++);
}
var end = (new Date()).getTime();
WScript.Echo(end-start);
}
/*
i=0
start = (new Date()).getTime();
while(i < 60000){
c = [i,i,i,i,i,i,i,i,i,i];
i++;
}
end = (new Date()).getTime();
WScript.Echo(end-start);
i=0
start = (new Date()).getTime();
while(i < 60000){
c = new Array(i,i,i,i,i,i,i,i,i,i);
i++;
}
var end = (new Date()).getTime();
WScript.Echo(end-start);
*/
function internCast(i){
return "" + i;
}
function StringCast(i){
return String(i)
}
function newStringCast(i){
return new String(i)
}
function toStringCast(i){
return i.toString();
}
function ParseInt(){
return parseInt(j);
}
function MathFloor(){
return Math.floor(j);
}
function Floor(){
return floor(j);
}
var pressure = 50000;
var a = "";
var floor = Math.floor;
j = 123.123;
print("-------------\nString Conversion Test");
print("The empty:", benchmark(empty));
print("intern:", benchmark(internCast));
print("String:");
benchmark(StringCast);
print("new String:");
benchmark(newStringCast);
print("toString:");
benchmark(toStringCast);
print("-------------\nFloat to Int Conversion Test");
print("parseInt");
benchmark(ParseInt);
print("Math.floor");
benchmark(MathFloor);
print("floor")
benchmark(Floor);
function newObject(){
return new Object();
}
function internObject(){
return {};
}
print("------------\nliteral Test");
print("runtime new object", benchmark(newObject));
print("literal object", benchmark(internObject));
附录2
for(var i=0;i<100;i++){
arr[i]=0;
}
代码2:
var i = 0;
while(i < 100){
arr[i++]=0;
}
代码3:
var i = 0;
while(i < 100){
arr[i]=0;
i++;
}
在firefox下测试这两段代码,结果是代码2优于代码1和3,而代码1一般优于代码3,有时会被代码3超过;而在IE 6.0下,测试压力较大的时候(如测试10000次以上)代码2和3则有时候优于代码1,有时候就会远远落后代码1,而在测试压力较小(如5000次),则代码2>代码3>代码1。
代码4:
var i = 0;
var a;
while(i < 100){
a = 0;
i++;
}
代码5:
var a;
for(var i=0;i<100;i++){
a = 0;
}
上面两段代码在Firefox和IE下测试结果都是性能接近的。
代码6:
var a;
var i=0;
while(i<100){
a=i;
i++;
}
代码7:
var a;
var i=0;
while(i<100){
a=i++;
}
代码8:
var a;
for(var i=0;i<100;i++){
a = i;
}
代码9:
var a;
for(var i=0;i<100;){
a = i++;
}
这四段代码在Firefox下6和8的性能接近,7和9的性能接近,而6, 8 < 7, 9;最后我们来看一下空循环
代码10:
for(var i=0;i<100;i++){ }
代码11:
var i;
while(i<100){ i++; }
最后的测试出现了神奇的结果,Firefox下代码10所花的时间与代码11所花的大约是24:1。所以它不具备参考价值,于是我没有放在一开始给大家看。


猜你喜欢
- (一)问题遗传算法求解正方形拼图游戏(二)代码#!/usr/bin/env python# -*- coding: utf-8 -*-fro
- 一、PyTorch批训练1. 概述PyTorch提供了一种将数据包装起来进行批训练的工具——DataLoader。使用的时候,只需要将我们的
- 本文实例讲述了Python 面向对象之封装、继承、多态操作。分享给大家供大家参考,具体如下:封装、继承、多态 是面向对象的3大特性为啥要封装
- 这篇文章主要介绍了Python和Sublime整合过程图示,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 1.电脑已经搭建python环境2.深入到需要传输的文件目录下,此处以分享 nemo-huiyuanfei 文件为例3.在路径栏输入 cmd
- 学习自然语言的最好方法就是溶入相应的语言环境在交流中学习,学习一种编程语言的最好方法就是看例程。为了帮助大家建立wml应用的第一印象,所以请
- 1.综述又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以
- pyecharts介绍pyecharts是python与echarts链接,一个用于生成Echarts图标的第三方库,pyecharts分为
- RateLimit 限流中间件为什么需要限流中间件在大数据量高并发访问时,经常会出现服务或接口面对大量的请求而导致数据库崩溃的情况,甚至引发
- AES加密方式有五种:ECB, CBC, CTR, CFB, OFB从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的p
- 0. 我们如何通过邮件系统完成远程控制电脑(关机、重启等)?实现思路:需要有两个邮箱:接收指令邮箱(A)发送指令邮箱(B)被控制的电脑(查看
- 如何用组件实现自动发送电子邮件?我想做一个能够自动发送电子邮件的程序,该如何做? 这就要用到w3 upl
- 本文实例讲述了Python实现的文本简单可逆加密算法。分享给大家供大家参考,具体如下:其实很简单,就是把一段文本每个字符都通过某种方式改变(
- 引言普遍意义上讲,生成器是一种特殊的迭代器,它可以在执行过程中暂停并在恢复执行时保留它的状态。而协程,则可以让一个函数在执行过程中暂停并在恢
- 这段时间用到了scons,这里总结下,也方便我以后查阅。一、安装sconsLinux环境(以CentOS为例)1、yum安装yum inst
- 在运维场景下,我们经常需要在服务器上用正则表达式来匹配IP地址。shell和其它编程语言一样,也可以使用正则分组捕获,不过不能使用 $1或\
- 什么是 Socket?Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网
- 下面给大家介绍python实现简易版的web服务器,具体内容详情大家通过本文学习吧!1、请自行了解HTTP协议https://www.jb5
- Pytorch四维Tensor转图片并保存最近在复现一篇 * 码的过程中,想要输出中间图片的结果图,通过debug发现在pytorch网络中
- 自己做了一个asp页面,用了一个td来显示留言本的最新消息;但是却无法控制其排版问题,因为该td的width确定,但是数据库中的文字却是未知