[performance improved] 擴充 jQuery selector,不使用 title attribute 存放資料,畫面顯示速度提升

Trouble:因每個 <td> 都設了 title attribute。所以 table:hover 改變底色,功能變鈍鈍的,延遲顯示。

Solution:擴充 jQuery selector ,不存資料在 title attribute。

 

分析問題:

因為我把每個 <td> 都 設了 title attribute , browser 會先顯示 title 才做 hover ,難怪 table:hover 會慢。

我之所以會把每個 <td> 都設 title ,因為我想使用 jQuery selector 的 *= $= ^=  對 title attribute 去做 contains , startsWith 和 endsWith。

解法1 : 把 title 內的資料改放在其他地方

W3C 跟我說可以用 data-*用法在這。 (HTML5 才支援)

我試了,發現我本機可以正常 run 但是放到 server 上就出錯!

什麼是「不明的名稱」? 而且還是在 jQuery.js 出錯。冏 ,我查不到相關資料。

不過可以確定的是,HTML 正常,jQuery 用到 $(selector).attr("data-blabla","blabla") 就出錯。

接著,我再上網查其他方法,發現 jQuery Templates plugin

我用了之後發現我不太適合用這種寫法,因為我的資料量大,每次都 appendTo() 會很慢。

所以這個解法目前無效。

不過最根本的解法還是直接對 .text() 做 selector,不要藏東藏西的。

解法2 : 直接對資料做 search 

對 .text() 做篩選動作的只有 :contains() 所以我們只好擴充它。

擴充 selector ,加入 starts-with 和 ends-with 的用法,針對 .text() 做篩選。 擴充程式碼在這。 

擴充語法可以看這個

我改寫以後,程式變超快的欸。 之前資料跑出來要花 7 秒 05 ,今天改完,變  4 秒 62 ,效能提升 35% !

心得:

1. 不要存大量資料在 title attribute  程式會變很慢

2. 必要時,擴充現有語法,提升效能