看板 Ajax 關於我們 聯絡資訊
※ 引述《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)
TonyQ:然後你程式碼裡面 contains 那段也超慢得,可以一樣用建表 07/02 23:20
TonyQ:法處理。 07/02 23:20
ff760725:請問建表法是...?事實上我基本是程式盲,只是把現成的 07/02 23:30
ff760725:拿來,用Chrome查元素之後填上去而已...可否請您開個頭, 07/02 23:31
ff760725:後面重複複製貼上的工作我來就好了 XDD 07/02 23:31
no1kk:對照表,{'圖A':'新A','圖B':'新B'.....}以此類推,其他不 07/03 00:25
no1kk:用改 07/03 00:25