返回列表 发帖

[版本发布] [原创]提高页面中JS脚本执行效率的插件

这个插件是自动运行的,不需要显示.
但是插件本身不能定义不显示,所以只能手动在"自定义状态栏"里删除这个插件的图标

测试:


使用本插件前:


使用本插件后:





插嘴 by 小絮
这个插件可以用过滤规则来实现:
  1. #ex#<\/head>([\r\n]+)###<script language="Javascript">/*@cc_on eval(function(props){var code=[];for(var i=0;i<props.length;i++){var prop=props;window['_'+prop]=window[prop];code.push(prop+'=_'+prop)}return 'var '+code.join(',');}('document top setInterval clearInterval setTimeout clearTimeout alert confirm prompt open close showModalDialog showModelessDialog'.split(' '))); @*/</script>$1</head>$1
复制代码

这样就可以不显示图标和解决刷新后无效的问题了。

再插一嘴 by 杂草
不好意思,改了一下,因为放在</head>之前才能起到最大作用。
注1:用过滤规则的方法,对本地网页无效,比如D:\test.htm。
注2:是不是应该捧一下我那篇“另类插件”...

改进 by 杂草
1.原来的过滤规则会导致某些网页不能正常显示,比如QQ空间,163.com无法写邮件等......
  在这之前用白名单方式暂时解决这条规则的冲突的,可以去掉相关的白名单了。
2.另加一条加速背景图的规则。
  IE对于<img>的图,会自动判断本地缓存,但是对于css中的background-image的背景图就每次都是重新下载。
  1. #ex#<\/head>([\r\n]+)###<script language="Javascript">try {document.execCommand("BackgroundImageCache", false, true);} catch(e) {}</script>$1</head>$1
复制代码


[ 本帖最后由 杂草 于 2009-2-20 21:23 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?加入 我们

xixi,终于有人google到这篇东西了

1.
对于var doc = document
doc是document对象的引用,而不是克隆,
所以这段代码只是占用很少量的内存.

2.
对于alert("aaa"),其实这是简写的,完整的代码是window.alert("aaa")
document.all.field1.value = "aaa"也是简写,完整的写法是window.document.all.field1.value = "aaa"
可以看到JS大量访问window对象(有一些类除外,比如Math, String, RegExp)
window这个对象太大了,访问起来很费劲,
所以把常用的window对象的属性和方法,在页面中定义一个引用型的变量,以加快调用.

3.
var document = window.document这种写法,用同名的变量覆盖window属性/方法,
不是必须的,也可以var doc = window.document
但是这种同名覆盖的写法,可以使这段代码当作外挂来使用,直接作用在原有的JS脚本上面.

4.
以上文字都是我瞎想的,因为实在无聊啊.哈哈......

TOP

再给出一个例子,以加深对window对象的印象

<script>
var s;

var date = new Date;
for (var i = 0; i < 100000; i++) s = "ss";
alert(new Date - date);  //79

date = new Date;
for (var i = 0; i < 100000; i++) window.s = "tt";
alert(new Date - date);   //735

alert(s);   //tt(注意:不是ss)
</script>

TOP

"页面加载"与"JS执行"是同一回事吗?
加速的是JS执行效率,不是页面下载速度.

TOP

那就要看TW加载自动插件,是在onload之前还是之后.

不过TW好象一直都有个问题,就是页面刷新后,自动插件并没有再次执行.

anyway,这个插件只是玩具性质,不必太过于迷信"xx加速"这种东东.

TOP

//优化循环
function outnum1(n, ln)
{
    var sn = n.toString();
    for (var i = sn.length; i < ln; i++) sn = "0" + sn;
    return sn;
}
alert(outnum1(123, 5));

//如果是填充"0",可以用10的n次方代替n个"0"相加
function outnum2(n, ln)
{
    var sn = n.toString();
    var i = Math.max(sn.length, ln);
    sn = "" + Math.pow(10, ln) + sn;
    return sn.substring(sn.length - i);
}
alert(outnum2(123, 5));

//如果可以的话,直接用pattern,省去每次调用都要进行加"0"的运算
function outnum3(n, patt)
{
    var sn = n.toString();
    var i = Math.max(sn.length, patt.length);
    sn = patt + sn;
    return sn.substring(sn.length - i);
}
alert(outnum3(123, "00000"));

TOP

var s;

var date = new Date;
for (var i = 0; i < 100000; i++) s = outnum1(123, 5);
alert(new Date - date);  //986

date = new Date;
for (var i = 0; i < 100000; i++) s = outnum2(123, 5);
alert(new Date - date);  //1656

date = new Date;
for (var i = 0; i < 100000; i++) s = outnum3(123, "00000");
alert(new Date - date);  //1375

我错了,看来Math.pow和String.substring也是很慢的,这也许是IE的内伤:JS引擎太慢.

而你原来的那个函数,用这种执行10万次来测速的话,根本就死机了.

[ 本帖最后由 杂草 于 2008-1-30 13:04 编辑 ]

TOP

改进了一下,见顶楼。

TOP

刚刚发现parent不能这样处理,否则很多页面的脚本会出现“权限不足”的错误。
所以我修改了顶楼的内容。

TOP

返回列表