小神童 5 天前#2 -
曾经花了几个月时间看完了jQuery1.6源码,谈谈关于jQuery源码:
- sizzle:选择器引擎,主要功能就是实现高版本浏览器里面的querySelectorAll这个API,同时为了页面性能,做了很多优化:a.大部分选择器从右到左处理; b.最左边存在id选择器,先求出来作为执行上下文,加快查找速度;c.ID、class、tag的使用顺序等等。这部分的内容占了30%的代码量,其中做了很多兼容性的工作。关于性能优化的思路可以借鉴,但是兼容性就算了,兼容性是项目经验的函数,没必要花费太多精力,尤其是js的兼容性
- cache:数据存储,jQuery里面的事件、动画、data最终都是将数据存储在这里面,方便数据的存储,在一定程度上避免了内存泄露
- 事件:为了方便地定义自定义事件、模拟事件代理、触发函数等功能,jQuery中所有的事件均是通过handle进行注册,然后通过dispatch方法进行分发,里面的回调函数是存储在$.cache里面。
- Deferred:用于异步处理,代码虽短,但是技巧性太强、晦涩难懂,并且是不遵循promise/A 规范的(新版本的jQuery已经遵循)
- ajax请求:对ajax请求进行了很多封装、拓展,同时与Deferred结合在一起完成异步操作,参数太多,很多代码均是在做参数处理,阅读起来没多大收获
- 动画解析:这部分是jQuery的另外一个亮点吧,毕竟DOM操作是jQuery的主打特色,动画参数涉及到起始状态、变化时间、变化速率函数等内容,代码不是很好阅读
总结:上述是jQuery的主要功能模块,总体来说jQuery代码晦涩、技巧性强,不适合新人阅读。随着前端技术的发展,jQuery、YUI等框架已经不适应业务发展,历史寿命即将完成。其中的很多设计思路也不是目前的痛点,里面的技巧性东西学了也没什么意思。