作者TonyQ (自立而後立人。)
看板Ajax
标题Re: [问题] 油猴脚本越来越肥了,求优化方案
时间Mon Jul 2 23:18:21 2012
※ 引述《ff760725 (信圆香,得永萌。)》之铭言:
: 我正在写一个将某网页游戏许多图片都替换掉的script
: 里面有很多像是这种的内容
: //--------------------------------------------------------------------
: //www.erepublik.com/en/economy/advanced-buildings
: //--------------------------------------------------------------------
: if (document.location.toString().indexOf("/economy/advanced-buildings")!==-1)
: {
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_100.png']").attr('src','http://i.imgur.com/qVEfJ.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_200.png']").attr('src','http://i.imgur.com/RLJEh.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_300.png']").attr('src','http://i.imgur.com/TeWP9.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_400.png']").attr('src','http://i.imgur.com/I3rRj.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_500.png']").attr('src','http://i.imgur.com/pAbTR.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /health_600.png']").attr('src','http://i.imgur.com/RGeQb.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /special_50.png']").attr('src','http://i.imgur.com/W34wz.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /special_100.png']").attr('src','http://i.imgur.com/DW37w.png');
: $(".listing_holder > .list_group > .listing > .area_pic > img[src=
: 'http://www.erepublik.com/images/modules/myland/buildings
: /special_200.png']").attr('src','http://i.imgur.com/V458I.png');
: };
: 但在不知不觉间随着要替换的图片越来越多,script也越来越肥
: 现在已经超过100kb了,而且在执行上也能感觉到有迟钝的情形发生...
: 请问有优化方案吗?
: 感谢 <(_ _)>
: 附上原script
: 虽然以上的最新一段还没上传到网上,但原理都是一样的
: http://synex520free.kilu.de/0_plugin/Touhou.user.js
这种写法又肥又没效率,
如果只是要换掉特定网址的图片,我会建议这样写
var replacedMap = {
"
http://www.erepublik.com/images/modules/myland/buildings/health_100.png":
'
http://i.imgur.com/qVEfJ.png' ,
"
http://www.erepublik.com/images/modules/myland/buildings/health_200.png":
'
http://i.imgur.com/RLJEh.png'
/* 以此类推 先建对照表 */
}
var images = document.images;
for(var i = 0,len = images.length ; i < len ;++i){
var replaced = replacedMap[images[i].src];
if ( replaced ){
images[i].src = replaced;
}
}
http://jsfiddle.net/WD88W/
如果说有特定 context 的话,还可以再快一点,
但是基本上改成这样应该就可以比你原本的效率再快个两倍了。
而且还根本都不需要用到 jQuery 。
--
Life's a struggle but beautiful.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.96.203
※ 编辑: TonyQ 来自: 114.25.96.203 (07/02 23:18)
1F:→ TonyQ:然後你程式码里面 contains 那段也超慢得,可以一样用建表 07/02 23:20
2F:→ TonyQ:法处理。 07/02 23:20
3F:→ ff760725:请问建表法是...?事实上我基本是程式盲,只是把现成的 07/02 23:30
4F:→ ff760725:拿来,用Chrome查元素之後填上去而已...可否请您开个头, 07/02 23:31
5F:→ ff760725:後面重复复制贴上的工作我来就好了 XDD 07/02 23:31
6F:→ no1kk:对照表,{'图A':'新A','图B':'新B'.....}以此类推,其他不 07/03 00:25
7F:→ no1kk:用改 07/03 00:25