緩存是jQuery中的又一核心設計,jQuery自身的很多東西都依賴于緩存,比如事件、一些中間變量、動畫等。同時他還為用戶提供接口了使用緩存的接口,方便用戶在元素節(jié)點上保存自己的數(shù)據(jù),并且?guī)椭脩艚鉀Q直接把數(shù)據(jù)保存到DOM元素是可能引起的內(nèi)存泄漏、命名沖突等問題。
同時,html5提出了一種通過屬性緩存元素數(shù)據(jù)的功能,就是data-*屬性,他可以以字符串的形式保存數(shù)據(jù),并且不會和元素固有屬性沖突。jQuery的緩存提供了訪問data-*的接口,與html5標準結合更加緊密,更加規(guī)范。
提問:jQuery不同版本的緩存實現(xiàn)原理是什么?
答:jQuery1.x與jQuery2.x、jQuery3.x是不同的。
jQuery1.x系列中,需要兼容ie6、ie7等早期的瀏覽器,在ie6、ie7這樣的瀏覽器中,根據(jù)艾倫的博客,我們可以知道DOM元素與js對象相互引用,是會引起瀏覽器的內(nèi)存泄漏問題。所以jQuery1.x中,最大的問題是要防止在ie6、ie7瀏覽器上出現(xiàn)內(nèi)存泄漏。為了避免DOM元素與js對象相互引用而造成的內(nèi)存泄漏,jQuery必須從設計解決對象循環(huán)引用的問題。所以jQuery1.x將需要緩存到元素上的數(shù)據(jù),統(tǒng)一保存到了一個公共存儲對象(jQuery.cache)中,jQuery.cache中的數(shù)據(jù)和緩存持有者之間再通過一uid關聯(lián)起來。這個uid是從1開始自增的一個數(shù),同時再生成一個key(jQuery.expando)將這個uid保存在緩存所有者對象上。這樣元素對象就不會直接引用緩存的對象了,從而不會出現(xiàn)因循環(huán)引用而引起的內(nèi)存泄漏。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26