Skip to content

Commit 58ecf75

Browse files
committed
feat: 整理 webpack 相关文章
1 parent ef6bc58 commit 58ecf75

14 files changed

+459
-211
lines changed

.editorconfig

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
indent_size = 2
7+
indent_style = space
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true

README.md

+4-5
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ npm run lint:fix
4848
- [js 事件](https://yhlben.github.io/blog/js-event.html)
4949
- [js 表单](https://yhlben.github.io/blog/js-form.html)
5050
- [js 跨文档消息传递和拖放 api](https://yhlben.github.io/blog/js-html5-program.html)
51-
- [es5 继承](https://yhlben.github.io/blog/js-inherit.html)
52-
- [es6 继承](https://yhlben.github.io/blog/js-inherit-es6.html)
51+
- [js 实现继承](https://yhlben.github.io/blog/js-inherit.html)
5352
- [es6 module](https://yhlben.github.io/blog/js-module.html)
5453
- [jsBridge 总结](https://yhlben.github.io/blog/js-jsBridge.html)
5554
- [函数尾递归优化](https://yhlben.github.io/blog/js-recursion.html)
@@ -92,9 +91,9 @@ npm run lint:fix
9291
#### | 前端工程化 相关
9392

9493
- [nodejs 使用总结](https://yhlben.github.io/blog/project-node.html)
95-
- [webpack 整体流程分析](https://yhlben.github.io/blog/project-webpack-entry.html)
96-
- [webpack 打包 modules 流程分析](https://yhlben.github.io/blog/project-webpack-flow.html)
97-
- [webpack 使用总结](https://yhlben.github.io/blog/project-webpack.html)
94+
- [Webpack 系列(一)使用总结](https://yhlben.github.io/blog/project-webpack.html)
95+
- [Webpack 系列(二)手写模块打包代码](https://yhlben.github.io/blog/project-webpack-flow.html)
96+
- [Webpack 系列(三)打包 modules 流程分析](https://yhlben.github.io/blog/project-webpack-entry.html)
9897
- [commitlint 使用总结](https://yhlben.github.io/blog/project-commitlint.html)
9998
- [前端测试](https://yhlben.github.io/blog/project-test.html)
10099
- [怎样选择图片格式?](https://yhlben.github.io/blog/project-image.html)

docs/.vuepress/config.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ module.exports = {
3333
"css-useful",
3434
'js-this',
3535
'project-commitlint',
36-
// 'project-webpack-entry',
37-
'project-webpack-flow',
3836
'operation-web-login',
3937
'library-react-hooks',
4038
'js-operator-priority',
4139
"other-tools",
4240
"other-vscode",
41+
'project-webpack-entry',
42+
'project-webpack-flow',
4343
"project-webpack",
4444
"library-react",
4545
"library-vue",
@@ -53,7 +53,6 @@ module.exports = {
5353
"frontend",
5454
"css-devicePixelRatio",
5555
"js-module",
56-
"js-inherit-es6",
5756
"js-inherit",
5857
"js-form",
5958
"js-html5-program",

docs/blog/frontend.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
- 预处理器 less,sass,stylus,css-next
2222
- 后处理器,postcss 插件,autofixer 等
2323
- css modules
24+
- css in js
2425

2526
## javascript 方向
2627

@@ -61,9 +62,8 @@
6162
- 微信小程序
6263
- 支付宝小程序
6364
- 百度小程序
64-
- 头条小程序
65-
- 抖音小程序
66-
- 多端统一框架:taro
65+
- 字节跳动小程序
66+
- 多端统一框架:taro,chameleon
6767

6868
### ajax 请求
6969

docs/blog/js-inherit-es6.md

-32
This file was deleted.

docs/blog/js-inherit.md

+63-31
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
1-
# ES5 继承
2-
3-
## 原型链
4-
5-
重写原型对象,代之以一个数新类型实例。
6-
7-
> 问题:引用类型所有实例共享,无法向超类型传参,会影响其他子元素。
8-
9-
## 借用构造函数
10-
11-
子类型构造函数内部调用超类型构造函数,call,apply。
12-
13-
> 问题:函数复用无从谈起
14-
15-
## 组合继承
16-
17-
使用原型链实现对原型属性和方法的继承,用构造函数类实现对实例属性的继承。
18-
19-
> 缺点:执行 2 次
20-
21-
## 原型继承
22-
23-
Object.create()
24-
25-
> 返回新对象,原型指向传入对象。
26-
27-
## 寄生式继承
28-
29-
在 Object.create()的基础上,增加自定义属性和方法来增强对象。
30-
31-
## 寄生组合式继承
1+
# JS 实现继承
2+
3+
JS 中可以通过多种方式来实现继承,我们来仔细分析一下。
4+
5+
## ES5 中的继承
6+
7+
ES5 中可以通过如下方式实现继承:
8+
9+
- 原型链
10+
- 重写原型对象,代之以一个新的类型实例。
11+
- 问题:引用类型所有实例共享,无法向超类型传参,会影响其他子元素。
12+
- 借用构造函数
13+
- 子类型构造函数内部调用超类型构造函数,call,apply。
14+
- 问题:函数复用无从谈起
15+
- 组合继承
16+
- 使用原型链实现对原型属性和方法的继承,用构造函数类实现对实例属性的继承。
17+
- 问题:执行 2 次
18+
- 原型继承
19+
- Object.create()
20+
- 返回新对象,原型指向传入对象。
21+
- 寄生式继承
22+
- 在 Object.create()的基础上,增加自定义属性和方法来增强对象。
23+
- 寄生组合式继承
24+
- es5 中完美解决方案
3225

3326
```js
3427
function inherit(subType, superType) {
@@ -53,3 +46,42 @@ var instance2 = new SubType(456);
5346
console.log(instance.age);
5447
console.log(instance2.age);
5548
```
49+
50+
## ES6 中的继承
51+
52+
ES6 采用 class extends 进行继承。和 ES5 继承的区别:
53+
54+
- ES5 的继承实质是先创造子类的实例对象 this,然后再将父类的方法添加到 this 上面。
55+
- ES6 的继承实质是先创造父类的实例对象 this,然后再用子类的构造函数修改 this。
56+
57+
### super
58+
59+
使用 super 的时候,必须显示指定是作为函数还是作为对象使用,否则会报错。
60+
61+
super 调用父类的方法时,super 会绑定子类的 this。
62+
63+
### __proto__属性
64+
65+
每一个对象都有__proto__属性,指向对应的构造函数的 prototype 属性。
66+
67+
子类的__proto__属性表示构造函数的继承,总是指向父类。
68+
69+
子类 prototype 的__proto__属性表示方法的继承,总是指向父类的 prototype 属性。
70+
71+
```js
72+
class A{}
73+
class B extends A{}
74+
75+
console.log(B.__proto__ ===A); // true
76+
console.log(B.prototype.__proto__ ===A.prototype); // true
77+
```
78+
79+
### 继承目标
80+
81+
只要是一个有 prototype 属性的函数,就能被继承。
82+
83+
根据 ES5 和 ES6 继承的区别,可以得出如下结论:
84+
85+
ES5 无法继承内置构造函数,Boolean,Number,String,Array,Date,Function,RegExp,Error,Object。
86+
87+
ES6 可以,但继承 Object 不行,(特例,因为无法向父类 object 传参)。

docs/blog/js-module.md

+14-12
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
1-
# ES6 module
1+
# ES6 模块化
22

3-
## ES6 之前的模块
3+
介绍一下 ES6 中的模块化。
4+
5+
## ES6 之前的模块化
46

57
在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。
68

79
- CommonJS 和 AMD 模块,都只能在运行时确定这些东西。
810

9-
## ES6 模块
11+
## ES6 中的模块化
12+
13+
ES6 模块化有以下特点:
1014

1115
- 自动采用严格模式。
12-
- ES6 可以在编译时完成模块加载
16+
- 在编译时完成模块加载
1317

1418
### export 模块
1519

1620
用于规定模块的对外接口。
1721

1822
- export 命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
23+
- export 命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域,就会报错(违背了静态化初衷)。
1924

2025
```js
2126
// 报错
@@ -37,11 +42,9 @@ var n=1;
3742
export {n as m}
3843
```
3944

40-
- export 命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域,就会报错(违背了静态化初衷)。
41-
4245
### import 命令
4346

44-
用于输入其他模块提供的功能
47+
用于导入其他模块
4548

4649
- import 命令具有提升效果,会提升到整个模块的头部并首先执行。
4750

@@ -50,6 +53,7 @@ export {n as m}
5053
- 由于 import 是静态执行的,不能使用表达式和变量,只有在运行时才能得到结果的语法结构。
5154

5255
```js
56+
// 报错
5357
import { 'a' + 'bcd' } from 'my_module'
5458
```
5559

@@ -91,9 +95,7 @@ export { MyClass as default } ;
9195

9296
### import() 方法
9397

94-
动态加载模块,可以在条件运算,表达式中使用。
95-
96-
返回一个 promise 对象。
98+
动态加载模块,可以在条件运算,表达式中使用。**返回一个 promise 对象**
9799

98100
import() 类似于 node 的 require 方法,区别主要是,前者是异步加载,后者是同步加载。
99101

@@ -120,7 +122,7 @@ import("my_module").then(res => {
120122
<script type="module" scr="foo.js" />
121123
```
122124

123-
- 代码是在模块作用域之中云进行,而不是在全局作用域中运行。
125+
- 代码是在模块作用域之中进行,而不是在全局作用域中运行。
124126

125127
### ES6 模块和 commonjs 模块的差异
126128

@@ -165,7 +167,7 @@ import 'foo'
165167

166168
#### commonjs 模块循环加载
167169

168-
commonjs 模块循环加载,值输出已执行的部分,还未执行的额部分不会输出
170+
commonjs 模块循环加载,只输出已执行的部分,还未执行的部分不会输出
169171

170172
```js
171173
// a.js

docs/blog/library-vue.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ vue 内置了这么多的指令, 这些指令都会抛出两个接口 bind 和
8080

8181
::: tip vue 异步更新
8282

83-
Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。
83+
Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个异步队列,并缓存在同一事件循环中发生的所有数据改变。
84+
85+
Vue 在内部尝试对异步队列使用原生的 Promise.then 和 MessageChannel(基于 postMessage),如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。
8486

8587
如果同一个 watcher 被多次触发,只会被推入到队列中一次(这在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要)。
8688

8789
然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。
8890

89-
Vue 在内部尝试对异步队列使用原生的 Promise.then 和 MessageChannel(MutationObserver 等),如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。
90-
9191
修改数据 -> 触发 set-> 执行同步代码,如果有数据更新,则开启异步队列。
9292

9393
-> 异步队列中进行去重操作,并注入 nextTick 回调函数。

docs/blog/osi-tcp.md

+14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,20 @@
44

55
### 三次握手
66

7+
第一次握手
8+
9+
客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
10+
11+
第二次握手
12+
13+
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
14+
15+
第三次握手
16+
17+
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
18+
19+
PS:第三次握手中可以包含数据,通过快速打开(TFO)技术就可以实现这一功能。其实只要涉及到握手的协议,都可以使用类似 TFO 的方式,客户端和服务端存储相同的 cookie,下次握手时发出 cookie 达到减少 RTT 的目的。
20+
721
### 四次挥手
822

923
## 滑动窗口

0 commit comments

Comments
 (0)