首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jQuery选择器Sizzle原理分析(下)

拥有号称当时业界最快的DOM选择器Sizzle,那么为什么他能自称是最快呢?让我们来分析一下Sizzle.js的源码,了解他的设计精妙之处。...如果有种子集合直接到编译过程 3....进入到编译过程 这里面需要讲解下为何要进行筛选的工作,前面也说过,目的就是为了尽量缩小查询范围,首先缩小上下文范围,然后缩小种子集合范围,因为从右向左查询的过程更快,所以我们是从后面开始搜索种子集合,搜索到之后...正常看起来是这样的,我们对每个种子进行边解析边分析的过程符合要求,但是Sizzle做了更进一步的处理,通过空间换时间的方式,提高了查询性能,他采用了一种叫先编译后执行的过程。...从缓存查询是否已经编译过,有的话直接拿出来 2. 判断是否tokenize过,没有的话,补一下 3.

77120

「理论」jQuery选择器Sizzle原理分析(上)

拥有号称当时业界最快的DOM选择器Sizzle,那么为什么他能自称是最快呢?让我们来分析一下Sizzle.js的源码,了解他的设计精妙之处。...四、Sizzle框架设计思路分析 Sizzle快具体在哪些原因呢,主要从几个角度来分析 1....通过创建编译函数,通过空间换时间的方式,来提高相同选择符的查询性能,每个选择符查询之后都会被词法分析,然后创建为过滤函数,只要对种子集合执行过滤函数即可,后面会详细介绍。...将剩下的选择符进行编译保存,然后执行编译函数得到结果。...这里有几个细节说明一下,tokenize函数实现的过程是很多编译器实现的一种方式,比如js代码在执行之前也是从字符串需要进行词法分析,编译优化再执行的过程,通过tokenize可以让机器能理解我们的数据

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    编译原理

    编译,其实就是把源代码变成目标代码的过程。如果源代码编译后要在操作系统上运行,那目标代码就是汇编代码,我们再通过汇编和链接的过程形成可执行文件,然后通过加载器加载到操作系统里执行。...如果编译后是在解释器里执行,那目标代码就可以不是汇编代码,而是一种解释器可以理解的中间形式的代码即可。...编译器翻译源代码,也需要经过多个处理步骤 词法分析(Lexical Analysis) 在编译之前,源代码只是一长串字符而已,这显然不利于编译器理解程序的含义。...带有标注信息的 AST 在语义分析阶段,编译器会做语义理解和语义检查这两方面的工作。词法分析、语法分析和语义分析,统称编译器的前端,它完成的是对源代码的理解工作。...是程序员写的代码不是最优的,而编译器会帮你做纠正 生成目标代码 第一,是要选择合适的指令,生成性能最高的代码。

    2.1K81

    编译原理

    编译原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的计算机 科学家,他们在计算机科学理论、数据库等很多领域都做出了杰出贡献。...《编译原理》 是编译领域无可替代的经典著作,被广大计算机专业人士誉为“龙书”。...《编译原理》一 直被世界各地的著名高等院校和科研机构(如贝尔实验室、哥伦比亚大学、普 林斯顿大学和斯坦福大学等)广泛用作本科生和研究生编译原理与技术课程的 教材,《编译原理》对我国计算机教育界也具有重大影响...书中深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制 导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在 最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,而且每章都

    77720

    编译原理整理

    3、编译原理 所有高级语言的建立,最终都是要将其转化成机器语言,这是一个翻译的过程,我们称之为编译。...编译原理的"翻译"能力只能作用在形式语言上。所谓形式语言就是不能有特定的意义,比如"大唐李世民","机器猫",这些我们人可以理解,但是机器是不理解的,这就是一些特定的意义。...什么是编译器 ? 编译器将源程序编译成目标程序。编译成的目标程序才可以接受输出,产出输出,其代表为C语言 ? 什么是解释器 ? 解释器同时接受源程序和输入,执行并返回输出。...即时编译器(Just-in-time compiler) 一种提高效率的方法,中间代码不是直接执行,而是先被编译成机器码再执行。其代表为现在的Java。...交叉编译 ? 在一个平台上编译产生多个平台的可执行代码。 我们现在来模拟一门新的语言,让其转化为Java。

    60630

    再看编译原理

    编译编译器也是个程序,可以阅读某一种语言(源语言)编写的程序,并把该程序翻译为一个等价的,用另一种语言(目标语言)编写的程序。...即,输入源程序,输出目标程序的程序,能够把源程序映射为语义等价的目标程序: 编译器 源程序 -------> 目标程序 源程序一般是可读性较好的字符串,目标程序则有多种形式: 机器码,例如...C语言编译得到可执行的二进制程序 中间字节码,例如Java编译得到面向JVM的.class文件 字符串,例如经Babel转过的JavaScript代码 其实就是翻译,比如从字符串编译到机器码,就是把人能理解的代码语言翻译成机器能...: 解释器 源程序 & 用户输入 -------> 输出 运行时解释执行,所以解释型语言的运行效率一般要低于编译型语言 编译过程 分为两部分: 分析:把源程序拆分成多个部分...实际实现中,这些环节并不一定都有清晰的边界,而是尽量一趟完成多道工序,以提高性能 参考资料 《编译原理》(龙书 第二版) http://infolab.stanford.edu/~ullman/dragon

    88340

    java编译原理

    4.Java编译原理 1.javac是什么? (1)javac是一种编译器,能够将一种语言规范转换成另一种用语言规范,通常编译器是将便于人们理解的语言规范成机器容易理解的语言规范。...的任务就是将java源代码语言转换成jvm能够识别的语言,然后jvm将jvm语言再转化成当前机器能够识别的语言(这样使得对开发者屏蔽与机器相关的细节,并且使得语言的执行与平台无关) 2.javac编译器的基本结构...),最后得到一个注解过后的抽象语法树 通过字节码生成器将经过注解的抽象语法树生成字节码 (2)Javac的四大模块:词法分析器、语法分析器、语义分析器和代码生成器 3.javac工作原理分析...在编译的时候,class文件中是通过叫做”符号引用”的方式来实现的”。)

    1.8K20

    iOS编译原理

    主要内容: 理解C、C++以及OC的关系 编译型语言与解释型语言 编译器LLVM与CLang 理解iOS编译流程 预处理 编译 汇编 链接 一、理解C、C++以及OC的关系 1.C语言 C语言是一门面向过程的计算机编程语言...,并通过嵌入类和虚函数来模拟实现; OC在编译阶段降低了编译要求提高了灵活性,而C++则是提高了编译要求,在编译过程中就发现更多的潜在错误,在运行前改正,降低了灵活性; 以下面的代码为例,在编译期间,...Objective-C属于编译型语言,这是为了保证iPhone的执行效率; 1.编译型语言 程序运行前,必须先通过编译器生成机器码,机器码直接通过CPU执行,运行时不需要重新翻译; 程序执行效率高,但依赖编译器...,运行后也可以随时增加和更新代码来改变程序逻辑; 代表语言:Javascript、Python等; 编译原理-语言的分类 三、编译器LLVM与CLang 1.编译器 概念:把一种编程语言(原始语言)转换为另一种编程语言...、编译、汇编、链接四个关键阶段,具体的流程如下图: 编译原理-编译流程 2.准备测试文件 以OC语言为例,详细分析代码的编译流程,准备一个main.m文件的内容如下: #import <Foundation

    1.6K20

    编译原理基础

    GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。 原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。...简单来说,gcc 指的是 GCC 中的 GNU C Compiler(C 编译器);g++ 是 G++ 中的 GNU C++ Compiler(C++ 编译器),但实际上 gcc 和 g++ 都不是编译器...,也不是编译器的集合,它们只是一种驱动器,根据参数中的文件类型,调用对应的 GNU 编译器,所以更准确的说法是:gcc 调用了 C compiler, g++ 调用了C++ compiler。...gcc 在编译 c 文件时,可使用的预定义宏是比较少的。...它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设置以及非官方语言的扩展。

    87610

    编译原理:第一章 编译原理引论

    一、编译程序和解释程序 1.1 定义 编译程序最初的定义是把一种高级语言设计的源程序(面向人的)翻译成另一种等价的低级程序设计语言(面向硬件的)即机器语言或汇编语 1.2 程序执行方式 程序设计语言源程序的执行基本有两种方式...1.3 编译程序和解释程序的区别 主要区别在于是否生成目标程序,运行时的存储分配。...image-20210903105011271.png 1.4 高级语言程序的处理过程 image-20210903105656311.png 二、编译过程和编译程序的结构(重点) 2.1 编译过程概述...(动态) 报告出错信息和位置 处理和恢复 2.2 编译程序结构 image-20210908142606225.png 2.3 编译阶段的组合 2.3.1 前段和后端的概念 有时,...将编译过程分成前段和后端两部分,方便移植 image-20210908143012148.png 前端:完成分析工作(与机器无关),词法分析 语法分析 语义分析。

    56410

    看懂编译原理:优化范围 & 原理

    优化目标原理分别是什么? 可以分为本地优化,全局优化,过程间优化 本地优化是_**针对基本快进行的(针对顺序的执行顺序)优化。...可以看到这三个范围越来越大:一个函数里面的一个基本快,一个函数里的多个基本快,多个函数 常见的本地优化场景有哪些,原理和做法是什么?...有些基本快分支一直不会运行,删除 公共子表达式删除:对于同一个表达式的变量,可以直接使用结果删除不必要的重复计算 删除无用变量和无用表达式(这里的无用表达式指的和上面不一样,这里特殊指代无用变量的表达式) 原理和做法是什么...删除不可达基本快和子表达式还有常熟折叠,代数优化的原理 是顺序遍历程序指令。...做法就是顺序遍历指令(如一图的子表达式删除和拷贝传播技术) 活跃性分析:删除无用变量和无用变量的计算表达式的原理是利用变量的活跃度分析进行检测。

    19010

    编译器的结构|编译原理

    正文之前,附上一点关于昨天编译器和解释器的思考: 编译器和解释器之间的区别是什么? 编译器相对于解释器的优点是什么?解释器相对于编译器的优点是什么?...在一个语言处理系统中,编译器产生汇编语言而不是机器语言的好处是什么?...把一种高级语言翻译成另一种高级语言的编译器称为源到源(source to source )的翻译器,编译器使用C语言作为目标语言有什么好处? 描述一下汇编器所要完成的一些任务。...今天的内容是冠以编译器的结构。...综合部分: 综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序,分析部分经常被称为编译器的前端,而综合部分称为后端。 ? 一个编译器的各个步骤 ? 一个赋值语句的翻译 ?

    1K20

    编译原理(1)总结

    本科是网络工程,由于没有学>这门课,打算两个月把国科大的编译原理梳理完,把其中我认为的精髓概括一下,三天一篇,作为笔记。...编译程序还有以下分类: 诊断编译程序(Diagnostic Complier,帮助程序员排错) 优化编译程序(Optimizing Complier,提高目标代码执行效率) 交叉编译程序(Cross Complier...) 两个概念: 宿主机(运行编译程序的机器) 目标机(运行目标源程序的机器) 一般来说,宿主机和目标机是同一类型机器,如果不同,则叫做交叉编译程序,如在Windwos交叉编译可在Linux上运行的程序...2020-11-30-00-31-52.png 二、为什么要学习编译原理 理解计算系统 设计计算系统 训练计算思维 抽象 自动化 问题分解 递归 权衡 保护、冗余、容错、纠错和恢复 利用启发式推理来寻求解答...三、编译过程   编译程序是怎样把高级语言(如C++)翻译成低级语言的(如机器指令)的?

    41911

    webpack之编译原理

    webpack 的作用是根据入口文件将源代码编译(构建、打包)成最终代码。...中间经过webpack打包,打包的过程就是编译 整个过程大致分为三个步骤:初始化、编译(最重要)、输出 「初始化」 在初始化这个阶段webpack会将CLI参数、配置文件、默认配置进行融合,形成一个最终的配置对象...以上就是webpack编译过程,做这一切最终的目的就是形成一个模块记录表。 下面有个简图,经过上述编译过程之后会在chunk中通过入口文件加载形成多个模块,每个模块记录了转换之后的代码。...「总过程」 当敲下webpack打包命令之后,文件开始初始化,各个参数进行融合,形成一个最终的配置对象,然后把配置对象交给编译器进行编译, 通过入口模块找到互相依赖模块形成模块列表,接下来webpack...如果没有配置则使用main id:通常指chunk的唯一编号,如果在开发环境下构建,和chunkname相同;如果是生产环境下构建,则使用一个从0开始的数字进行编号 最后 若本文对于 webpack编译原理

    56510
    领券