Skip to content

Commit b8413a4

Browse files
committed
submit
1 parent a5b5485 commit b8413a4

File tree

3 files changed

+109
-42
lines changed

3 files changed

+109
-42
lines changed

docs/base/html.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
+ 解析接受到的文档,根据文档定义一颗DOM树
1212
+ 对CSS进行解析, 生成CSSOM规则树
13+
+ 加载并执行javascript
1314
+ 根据DOM和CSSOM生成渲染树,根据渲染树来进行布局
1415
+ 这个过程是逐步完成的,不会等到所有的 html 都解析完成之后再去构建和布局 render 树。它是解析完一部分内容就显示一部分内容
1516

docs/base/performance.md

Lines changed: 55 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
## 性能优化
22

3-
前端性能
3+
影响页面渲染的因素
44

5-
1. 页面加载速度
6-
2. 浏览时动态加载数据过多时的卡顿
5+
1. 网络延迟
6+
2. 资源体积过大
7+
3. 重复加载资源
8+
4. 加载脚本时,渲染内容阻塞
79

810

911

1012
怎么分析?
1113

1214
1. lighthouse 自动对网站做一个质量评估
1315
2. Performance
16+
1. js中的`window.performance.timing`对象上有各个阶段的耗时
1417
3. Web pack 分析包`webpack-bundle-analyzer`
1518
4. Source-map
1619

1720

1821

19-
怎么优化?
20-
21-
静态文件的终极优化策略:
22+
##### 静态文件的终极优化策略:
2223

2324
1. 缓存 => 配置超长时间的缓存,节省带宽, 提高性能
2425
1. `http响应头`
@@ -37,54 +38,72 @@
3738

3839

3940

40-
网络层面
41+
#### 怎么优化?
42+
43+
##### 资源加载优化
44+
45+
+ 减少http请求
4146

42-
1. 增加缓存cache-control/last-modified/if-modified-since/etag/if-none-match
47+
+ 缓存cache-control/last-modified/if-modified-since/etag/if-none-match
4348

44-
1. Cache-control 和 max-age
49+
+ Cache-control 和 max-age
4550

46-
1. `no-cache` 不缓存
47-
2. `no-store` 禁止缓存
48-
3. `private` 仅UA缓存
49-
4. `public` 都可以缓存
51+
+ `no-cache` 不使用前置缓存,检查协商缓存
52+
+ `no-store` 禁止缓存
53+
+ `private` 仅UA缓存
54+
+ `public` 都可以缓存
5055

51-
2. `Etag``If-None-Match`
56+
+ `Etag``If-None-Match`
5257

5358
`Etag` 表示资源的版本, 浏览器在发送请求时会带`If-None-Match`头字段, 来询问服务器该版本是否仍然可用。 可用则返回304状态码。
5459

55-
3. `Last-Modified``If-Modified-Since` 检查修改时间
60+
+ `Last-Modified``If-Modified-Since` 检查修改时间
61+
62+
+ 懒加载
63+
64+
+ 按需加载
65+
66+
+ 合并请求
5667

57-
2. 减少cookie传输
68+
+ 雪碧图
69+
+ 小图片使用base64
5870

59-
3. 压缩文件`nginx 开启gzip`
71+
+ 提高响应速度
6072

61-
4. 应用http2
73+
+ cdn
74+
+ DNS Prefetch
75+
+ 应用http2
76+
+ 首部压缩
77+
+ 多路复用
78+
+ 服务端推送
79+
+ 二进制分帧
6280

63-
1. 首部压缩
64-
2. 多路复用
65-
3. 服务端推送
66-
4. 二进制分帧
67-
68-
5. 减少http请求
81+
+ 减少资源大小
6982

70-
1. 雪碧图
71-
2. 小图片使用base64
72-
3. 按需加载
73-
4. 懒加载图片
83+
+ 代码压缩
84+
+ 代码拆分
85+
+ 图片压缩
7486

87+
+ 优化资源加载方式
7588

89+
+ ssr
7690

77-
页面
7891

79-
1. 减少回流与重绘
80-
2. 骨架屏
81-
3. 只对可视区域进行渲染
82-
4. 预加载preload/prefetch
83-
1. `<link rel="preload" as="script" href="">`
84-
2. `<link rel="dns-prefetch" href="//wq.test.com"/>` 提前解析dns
85-
5. 懒加载
8692

93+
##### 页面渲染优化
8794

95+
+ 优化html
96+
+ js外链放在底部
97+
+ css外链放在顶部
98+
+ 减少dom层级
99+
+ 优化js/css
100+
+ 减少重绘,重排
101+
+ 降低css选择器复杂性
102+
+ 缓存dom查找
103+
+ 通过class名方式修改元素样式
104+
+ 优化动画
105+
+ 使用requestAnimationFrame
106+
+ 使用绝对定位或者固定定位
88107

89108
webpack
90109

docs/base/框架.md

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,18 @@ View: 视图
2525

2626
ViewModel: 负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model
2727

28-
###
28+
##### 什么是双向数据绑定
29+
30+
当我们修改视图时,数据会自动改变,当我们修改数据时,视图会自动渲染
31+
32+
原理:
33+
34+
+ 监听器: 对数据进行监听
35+
+ vue中使用`reactive`
36+
+ 解析器: 对每个元素节点的指令进行扫描跟解析,根据指令模板替换数据,以及绑定相应的更新函数
37+
+ vue中使用`effect`
38+
39+
2940

3041
#### Vue3
3142

@@ -46,27 +57,40 @@ vnode是虚拟的dom, 也就是通过js对象来描述dom结构
4657

4758
##### vue和react的区别
4859

60+
**相同点**
61+
62+
+ 都有组件化思想
63+
+ 都是用了虚拟dom
64+
+ 数据驱动视图
65+
+ 支持native
66+
67+
**不同点**
68+
4969
1. 修改父组件的数据。 vue通过emit事件来修改父级数据 react通过props传递父组件方法,在子组件调用
5070
2. vue是渐进式框架,react是一个UI库
5171
3. vue的组件需要注册之后才能使用, react导入就可以在jsx中使用
5272
4. vue的修改是通过依赖追踪(观察者模式+proxy拦截),动了多少数据,就触发多少更新。React对数据变化无感知,触发局部重新变化是通过调用`setState`完成的
5373
5. 事件。 react对所有事件进行代理,将所有事件都绑定到document上。
5474

75+
##### `v-if``v-show`的区别
76+
77+
+ `v-show`使用css的display来隐藏元素,`v-if`则是直接删除元素
78+
+ `v-if`切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;`v-show`只是简单的基于css切换
79+
5580
##### 为什么会出现vue3?
5681

5782
+ 随着功能的增长,复杂组件的代码变得越来越难维护
5883
+ 缺少一种比较干净的在多个组件之间提取和复用逻辑的机制
5984
+ 类型推断不够友好
6085
+ bundle时间比较长
6186

62-
63-
6487
##### vue3的优化
6588

6689
+ diff算法优化
6790
+ 静态提升
6891
+ 事件监听缓存
6992
+ 更好的类型支持
93+
+ 更好的逻辑复用 `compositionApi`
7094

7195

7296

@@ -76,16 +100,40 @@ props是响应式的, context是普通js对象,也就是说不是响应式的
76100

77101

78102

103+
##### vue实例都做了什么?
104+
105+
106+
107+
#### SPA(single-page application)
108+
109+
单页应用: 通过动态重写当前页面来避免页面间的切换打断用户的操作
110+
111+
优点
79112

113+
- 具有桌面应用的即时性、网站的可移植性和可访问性
114+
- 用户体验好、快,内容的改变不需要重新加载整个页面
115+
- 良好的前后端分离,分工更明确
80116

81-
##### Vue-router原理
117+
缺点
118+
119+
- 不利于搜索引擎的抓取
120+
- 首次渲染速度相对较慢
121+
122+
##### Vue-router原理(spa原理)
82123

83124
HTML5 提供了 History API 来实现 URL 的变化。其中做最主要的 API 有以下两个:history.pushState() 和 history.repalceState()。这两个 API 可以在不进行刷新的情况下,操作浏览器的历史纪录。唯一不同的是,前者是新增一个历史记录,后者是直接替换当前的历史记录
84125

85126
+ pushState 和 repalceState 两个 API 来操作实现 URL 的变化
86127
+ 我们可以使用 popstate 事件来监听 url 的变化。只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在Javascript代码中调用`history.back()`或者`history.forward()`方法)
87128
+ history.pushState() 或 history.replaceState() 不会触发 popstate 事件,这时我们需要手动触发页面跳转(渲染)
88129

130+
##### spa做seo
131+
132+
+ ssr服务端渲染
133+
+ 静态化
134+
+ 通过程序将动态页面抓取并保存为静态页面,这样页面实际存在于服务器的硬盘中
135+
+ 通过`Nginx`配置,判断访问来源是否为爬虫`phantomjs`
136+
89137

90138

91139
##### 组件的设计
@@ -115,5 +163,4 @@ HTML5 提供了 History API 来实现 URL 的变化。其中做最主要的 API
115163
+ 通常是根据最小业务状态抽象而出,有些业务组件也具有一定的复用性,但大多数是一次性组件
116164
+ 高阶组件
117165

118-
##### 组件的展示 storybook
119-
166+
##### 组件的展示 storybook

0 commit comments

Comments
 (0)