Re: [問題] 大量事件綁定

看板Ajax作者 (小殘)時間11年前 (2013/06/08 07:32), 編輯推噓4(4013)
留言17則, 3人參與, 最新討論串2/2 (看更多)
大量註冊事件的確會慢, 例如你的網頁有幾千幾萬個<a>, 你逐一找出並註冊事件可能會花上一段時間, 然而, 如果你要做的事件其實都是同一個動作, 你可以在上層元素註冊事件, 例如<body>, 並判斷事件觸發者是不是<a>, 再執行該動作即可 這個處理方法的條件是, 事件傳遞都會經過同樣的上層元素, 以及事件內容都相同 ※ 引述《gn00742754 (西門貓)》之銘言: : 我有一個頁面, : 要處理非常多的邏輯, : 剛開始載入非常慢, : 我本來以為或許是很多邏輯運算沒寫好, : 導致載入速度緩慢, : 後來稍微測試一下, : 在整個網頁操作的時候速度還算正常, : 只有剛開始載入非常緩慢, : 我發現到主要時間都花在註冊事件上(delegate、on), : 請問有什麼方法可以改進嗎? : 目前有想到一個作法是使用setTimeout, : 慢慢地註冊事件, : 還是說會有更好的解法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.155.23

06/08 10:44, , 1F
就算有幾千幾萬個a 除非你用迴圈每個a都弄綁一個全新
06/08 10:44, 1F

06/08 10:45, , 2F
的function....不然吃的資源還是可以忽略吧
06/08 10:45, 2F

06/08 10:45, , 3F
另外原po已經說他使用delegate、on了
06/08 10:45, 3F

06/08 10:46, , 4F
"以逐一找出綁上事件"這動作來看 "逐一找出"較佔資源
06/08 10:46, 4F

06/08 10:55, , 5F

06/08 10:55, , 6F
給一萬個a綁click事件 在我的瀏覽器上只跑0.3秒
06/08 10:55, 6F

06/08 10:59, , 7F
如果先把一萬個a找出來再綁事件...只花0.05秒左右
06/08 10:59, 7F

06/08 10:59, , 8F
總而言之 單純"綁事件"這個動作 不會是效能瓶頸
06/08 10:59, 8F

06/08 11:03, , 9F
06/08 11:03, 9F

06/08 14:00, , 10F
在PC上面的確是不會很慢,在行動裝置上才有感覺
06/08 14:00, 10F

06/08 14:04, , 11F
你的例子在我的電腦上執行時間約1秒,其實還是花不少時間
06/08 14:04, 11F

06/08 15:51, , 12F
請看console計的時間 前面要先製造一萬個a啊....
06/08 15:51, 12F

06/08 17:25, , 13F
console加起來1秒 沒錯啊 單位不是ms?
06/08 17:25, 13F

06/08 18:25, , 14F
這就奇怪了 瀏覽器是? 怎麼會差這麼多XDDD
06/08 18:25, 14F

06/08 18:25, , 15F
應該這麼說吧,如果這件事情慢,一定還有別的比他更慢..
06/08 18:25, 15F

06/08 18:27, , 16F
我以前都是再跟幾萬個 widget 打交道的 XD
06/08 18:27, 16F

06/08 20:53, , 17F
我之前在android遇過速度很慢,改進後快千倍以上
06/08 20:53, 17F
文章代碼(AID): #1Hicro1i (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1Hicro1i (Ajax)