天天看點

sizzle編譯函數

一個人去完成一件事情,如果派多個人去做的話,隻要配合默契,效率比一個人做肯定要高,效率提高,所需的時間就減少了。如果隻能一個人完成,那麼必須設法提高自己的勞動效率,這個提高可以是量的改變也可以是質的改變。我把這個量的改變稱為空間上的改變,也就是說空間和時間是可以互相轉換的。

按照解析原理與過濾器的原理一次用循環遞歸去比對查找,這樣的效率是很慢的,那麼sizzle從給1.8開始就引入了編譯的概念,就是空間換時間的算法通過緩存大量的閉包比對器進而提高重複的效率

閉包是js的特性,我們經常會用來作為私有變量的儲存處理,那麼sizzle就很好的利用了這一特性,把選擇器中每一個選擇原子都變成了函數的處理方法,然後通過閉包儲存着。在緩存在記憶體中去,這樣有重複使用的時候就會首先調用緩存。

Sizzle對于編譯這個最終的過濾器閉包是非常繞的,先通過簡單的例子去展示這個一個複雜的思路。

<a></a>

抛開僞類的處理,這裡就是一個簡化版的sizzle的流程

測試,進階浏覽器

本文轉自艾倫 Aaron部落格園部落格,原文連結:http://www.cnblogs.com/aaronjs/p/3972490.html,如需轉載請自行聯系原作者

上一篇: vrrp

繼續閱讀