jQuery源码研究:选择器模块所用方法(1)

Sizzle模块第二篇。

顺序看下去,看模块所用的方法。

2、createCache()方法,创建一个受限的键值对类型缓存。返回的是一个函数,

function createCache(){
    var keys = [];
    function cache( key, value ){
        //向数组`keys`末尾添加元素时,返回新的长度。
        if( keys.push( key + ' ' ) > Expr.cacheLength ){
            //新的数组长度大于Expr.cacheLength时,删除数组当前首位的元素在对象cache中的缓存
            delete cache[ keys.shift() ];
        }
        //返回 缓存后的对象
        return ( cache[ key + ' ' ] = value );
    }
    //返回缓存方法
    return cache;
}

返回的cache函数,个中实现解释:Expr.cacheLength就自定义的长度,默认值为50

3、markFunction()标记一个特定的函数

function markFunction( fn ){
    fn[ expando ] = true;
    return fn;
}

fn函数添加一个唯一值的参数并返回。expando是一个字符串,expando = "sizzle" + 1 * new Date()

4、assert()方法,检测所用元素是否可用。看assert这个单词的含义即知,是一个断言方法。该方法主要用在检测元素是否可用方面。

function assert( fn ){
    var el = document.createElement( 'fieldest' );

    try {
        return !!fn(el);
    } catch(e) {
        return false;
    } finally {     // try catch语句无论有无异常都执行finally
        //从默认父节点删除自身
        if( el.parentNode ){
            el.parentNode.removeChild( el );
        }
        //在IE中释放内存 -- 兼容性
        el = null;
    }
}

本文分享自微信公众号 - 前端小二(frontendxiao2)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java识堂

线上CPU飚高(死循环,死锁...)?帮你迅速定位代码位置

buffers 和 cache 都是内存中存放的数据,不同的是,buffers 存放的是准备写入磁盘的数据,而 cache 存放的是从磁盘中读取的数据

9730
来自专栏Java识堂

Redis的n种妙用,不仅仅是缓存

redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zse...

9640
来自专栏Java建设者

MyBatis 二级缓存详解

我们在上一篇文章介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,一级缓存失效的原因是什么?MyBatis 只有一级缓存吗?来找找答案吧...

7820
来自专栏Tech爬虫(公众号php_pachong)

thinkphp如何关闭缓存

明确一点:除非你不用tp 的模板引擎。这里所谓的关闭编译缓存是指:有了缓存文件,也重新编译,不用以前生成好的。

12040
来自专栏Tech爬虫(公众号php_pachong)

访问网站首页 index.php,跟着执行流程走一遍

访问网站首页 index.php,跟着执行流程走一遍,细节不深究,碰到不太明白的变量,直接var_dump()输出看看: 1. index.php—...

13910
来自专栏我的前端路

web 深入视角:变态的静态资源缓存与更新

这是一个非常有趣的 非主流前端领域,这个领域要探索的是如何用工程手段解决前端开发和部署优化的综合问题,入行到现在一直在学习和实践中。 在我的印象中,facebo...

10400
来自专栏Tech爬虫(公众号php_pachong)

缓存技术 2

随着网络的发展,数据越来越多,从而导致运算压力越来越大。为了解决这一问题,就需要合理分配资源,充分利用已有资源,缓存的工作实际就是资源的合理分配。

8120
来自专栏Tech爬虫(公众号php_pachong)

ThinkPHP调试方法

一.调试模式 ThinkPHP 专门为开发过程而设置了调试模式,调试模式开启后,特别方便我们进行排 错和调整。但由于它执行效率会稍低,所以在正式部署项目的时候,...

9720
来自专栏Java识堂

如果有人问你数据库的原理,叫他看这篇文章-4

国内大佬翻译的文章,因为文章较长,不适合碎片化阅读,因此分为几篇文章来转载,满满的干货,外链在微信上不能显示,建议从第一篇文章开始看起

11120
来自专栏架构师

用NOSql给高并发系统加速

随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发、低延迟、高可用、高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对...

11720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励