首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

超硬核|带你畅游在 Webpack 插件开发者的世界

调用 callback() 表示注册事件执行完成。...this.usedLibrary 它是一个 Set 对象,存储我们代码中使用到的外部依赖库。...换句话说比如我们的代码中存在这样一句: import Vue from 'vue' 此时,webpack 在解析这句代码碰到模块请求(vue),会在初始化解析之前调用我们注册的函数。...函数内部的逻辑其实并不复杂,在进行模块解析,我们注册监听函数,解析到 import 语句获得事件函数调用时传入的 source 值,判断当前引入模块是否存在 this.transformLibrary...同时不要忘记它是一个 Set 对象,所以内部是不会重复的。 注入 CDN 脚本 上边我们通过一系列模块分析插入的逻辑,已经完成了: 将匹配到的模块转化为外部依赖 externals 。

74930

Java虚拟机-03:new一个对象,虚拟机发生了什么?

本文聊一聊,new 一个对象,虚拟机中发生了什么。这里一共分为五个步骤。...1.检查类是否被加载 2.分配内存 3.初始化零值 4.对象头设置 5.执行init方法 1.检查类是否被加载 虚拟机遇到一条new指令,第一步,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用...这一块小的内存称之为本地线程分配缓冲区(Thread Local Allocation Buffer,TLAB),哪个线程需要分配内存,就在哪个线程的TLAB上分配,只有TLAB用完并分配新的TLAB才需要同步锁定...3.初始化零值 在内存分配完成之后,虚拟机需要将分配到的内存空间都初始化为零值,这里不包括对象头,如果使用TLAB这一工作过程,也可以提前至TLAB分配进行,这一步操作,保证了对象的实例字段在java...4.对象头设置 虚拟机要对对象进行一些必要的设置,比如,这个对象是哪个实例的,如何才能找到类的元数据信息,对象的哈希吗,对象的GC分代年龄等。这些信息存放在对象头中。

46020

lodash源码分析之List缓存

Hash 其实是用对象来做缓存,但是对象有一个局限,它的 key 只能是字符串或者 Symbol 类型,但是 Map 是支持各种类型的值来作为 key,因此 Hash 缓存无法完全模拟 Map 的行为,...遇到 key 为数组、对象等类型,Hash 就无能为力了。...__data__, key) > -1 } has 用来判断是否已经有缓存数据,如果缓存数据已经存在,则返回 true 。...在之前的文章中已经介绍过,assocIndexOf 检测的是对应 key 的 [key,value] 数组在二维数组中的索引,其行为跟 indexOf 一致,不存在于二维数组中,返回 -1 ,否则返回索引值...参考 Set 和 Map 数据结构 MDN: 使用对象 ECMAScript5.1中文版 + ECMAScript3 + ECMAScript(合集) License 署名-非商业性使用-禁止演绎 4.0

98180

lodash源码分析之List缓存

Hash 其实是用对象来做缓存,但是对象有一个局限,它的 key 只能是字符串或者 Symbol 类型,但是 Map 是支持各种类型的值来作为 key,因此 Hash 缓存无法完全模拟 Map 的行为,...遇到 key 为数组、对象等类型,Hash 就无能为力了。...__data__, key) > -1 } has 用来判断是否已经有缓存数据,如果缓存数据已经存在,则返回 true 。...在之前的文章中已经介绍过,assocIndexOf 检测的是对应 key 的 [key,value] 数组在二维数组中的索引,其行为跟 indexOf 一致,不存在于二维数组中,返回 -1 ,否则返回索引值...参考 Set 和 Map 数据结构 MDN: 使用对象 ECMAScript5.1中文版 + ECMAScript3 + ECMAScript(合集) License 署名-非商业性使用-禁止演绎 4.0

85360

lodash源码分析之Hash缓存

而在 javascript 中,最适合的无疑是对象了。 Hash 在 lodash 的 .internal 文件夹中,作为内部文件来使用。...lodash 会根据不同的数据类型选择不同的缓存方式,Hash 便是其中的一种方式,这种方式只能缓存 key 的类型符合对象键要求的数据。...Hash与Map 后面将会讲到,除了使用 Hash 方式缓存数据外,还会用到 Map,lodash 在设计 Hash 的数据管理接口,也与 Map 的接口一致,但是不会包含 Map 的遍历方法。...因为 undefined 在缓存中是以 __lodash_hash_undefined__ 来表示的,因此遇到值为 __lodash_hash_undefined__ ,返回 undefined 。...首先调用 has 方法来判断缓存是否存在,如果存在,用 delete 操作符将 __data__ 中对应的属性删除。

1K70

lodash源码分析之Hash缓存

而在 javascript 中,最适合的无疑是对象了。 Hash 在 lodash 的 .internal 文件夹中,作为内部文件来使用。...lodash 会根据不同的数据类型选择不同的缓存方式,Hash 便是其中的一种方式,这种方式只能缓存 key 的类型符合对象键要求的数据。...Hash与Map 后面将会讲到,除了使用 Hash 方式缓存数据外,还会用到 Map,lodash 在设计 Hash 的数据管理接口,也与 Map 的接口一致,但是不会包含 Map 的遍历方法。...因为 undefined 在缓存中是以 __lodash_hash_undefined__ 来表示的,因此遇到值为 __lodash_hash_undefined__ ,返回 undefined 。...首先调用 has 方法来判断缓存是否存在,如果存在,用 delete 操作符将 __data__ 中对应的属性删除。

1.1K90

lodash源码分析之缓存方式的选择

——《至爱梵高·星空之谜》 本文为读 lodash 源码的第八篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新,gitbook地址:pocket-lodash...缓存方式的选择 从之前的分析可以看出, 缓存完全可以用 缓存或者 来代替,为什么 lodash 不干脆统一用一种缓存方式呢? 原因是在数据量较大对象的存取比 或者数组的性能要好。...因此,ladash 在能够用 缓存,都尽量使用 缓存,而能否使用 缓存的关键是 的类型。...我们都知道,对象的 如果不是字符串或者 类型,会转换成字符串的形式,因此如果缓存的数据中同时存在像数字 和字符串 ,数据都会储存在字符串 上。...set set(key, value) { const data = getMapData(this, key) const size = data.size data.set(key

1K90

lodash源码分析之缓存方式的选择

——《至爱梵高·星空之谜》 本文为读 lodash 源码的第八篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbook也会同步仓库的更新,gitbook地址:pocket-lodash...前言 在《lodash源码分析之Hash缓存》和《lodash源码分析之List缓存》介绍了 lodash 的两种缓存方式,这两种缓存方式都实现了和 Map 一致的数据管理接口,其中 List 缓存只在不支持...原因是在数据量较大对象的存取比 Map 或者数组的性能要好。 因此,ladash 在能够用 Hash 缓存,都尽量使用 Hash 缓存,而能否使用 Hash 缓存的关键是 key 的类型。...不能为 __proto__ 的原因是,大部分 JS 引擎都以这个属性来保存对象的原型。...我们都知道,对象的 key 如果不是字符串或者 Symbol 类型,会转换成字符串的形式,因此如果缓存的数据中同时存在像数字 1 和字符串 '1' ,数据都会储存在字符串 '1' 上。

1.1K90

前端原型链污染漏洞竟可以拿下服务器shell?

__proto__ 显式原型:所有函数拥有prototype属性,例如:func.prototype 原型对象:拥有prototype属性的对象,在定义函数被创建 原型链之间的关系可以参考图1.1:...图1.1 原型链关系图 1.2 原型链查找机制 一个变量在调用某方法或属性,如果当前变量并没有该方法或属性,就会在该变量所在的原型链中依次向上查找是否存在该方法或属性,如果有则调用,否则返回undefined...()); app.set('views', '....及时升级包版本:公司的研发体系中,安全运维参与整个过程,在打包等操作,会自动触发安全检测,其实就提醒了开发者可能存在有风险的三方包,这就需要大家及时升级对应的三方包到最新版,或者尝试替换更加安全的包。...在处理 json 字符串进行判断,过滤敏感键名。 使用 Object.create(null) 创建没有原型的对象

1K20

用前端原型链漏洞污染拿下了服务器

__proto__ 显式原型:所有函数拥有prototype属性,例如:func.prototype 原型对象:拥有prototype属性的对象,在定义函数被创建 原型链之间的关系可以参考图1.1:...图1.1 原型链关系图 1.2 原型链查找机制 一个变量在调用某方法或属性,如果当前变量并没有该方法或属性,就会在该变量所在的原型链中依次向上查找是否存在该方法或属性,如果有则调用,否则返回undefined...()); app.set('views', '....及时升级包版本:公司的研发体系中,安全运维参与整个过程,在打包等操作,会自动触发安全检测,其实就提醒了开发者可能存在有风险的三方包,这就需要大家及时升级对应的三方包到最新版,或者尝试替换更加安全的包。...在处理 json 字符串进行判断,过滤敏感键名。 使用 Object.create(null) 创建没有原型的对象

3.2K20

前端-5个小技巧让你写出更好的JS条件语句

/_ 发现无效条件尽早返回 _/ function test(fruit, quantity) {   const redFruits = ['apple', 'strawberry', 'cherry...注意观察下面的条件 2 语句,看看是如何做到这点的: /_ 发现无效条件尽早返回 _/ function test(fruit, quantity) {   const redFruits = ['...redFruits.includes(fruit)) return; // 条件 2: fruit 不是红色的时候,直接返回   console.log('red');   // 条件 3:必须是大量存在...当我们代码的逻辑链很长,并且希望某个条件不满足不再执行之后流程,这个技巧会很好用。 然而,并没有任何硬性规则要求你这么做。...undefined); // unknown test({ }); // unknown test({ name: 'apple', color: 'red' }); // apple 观察上面的例子,水果名称属性存在

95430
领券