├── css
├── css基础.md
└── 多方案实现垂直水平居中.md
├── eslint
└── 常见错误.md
├── html
├── html基础.md
└── 输入url到页面加载.md
├── http
├── Etag.md
├── http基础.md
├── http状态码.md
└── keep-alive.md
├── js
├── es6.md
├── js事件.md
├── js垃圾回收机制.md
├── js基础.md
├── js基础2.md
├── 原生属性 proxy.md
├── 原生属性.md
├── 数组大全.md
└── 模块化.md
├── node
├── QQ截图20180828211949.png
├── QQ截图20180828212348.png
└── node+IIS配置https.md
├── react
├── react-router.md
├── react取消eslint.md
└── react生命周期.md
├── sass
└── sass不支持中文.md
├── vue
├── virtual-dom
│ ├── README.md
│ ├── diff-1.jpg
│ ├── diff-2.jpg
│ ├── diff-3.jpg
│ ├── diff-4.jpg
│ ├── diff-5.jpg
│ ├── diff-6.jpg
│ ├── html-parse.md
│ ├── parse.md
│ ├── patch.md
│ └── vdom.md
├── vue 组件通信五种方式.md
├── vue基础.md
├── 双向绑定原理及实现.md
└── 讲解provide和inject.md
├── webpack
└── 基本知识.md
├── 其他
├── 技巧.md
├── 理解手写promise
│ └── index.html
├── 问问问....超大问题.md
└── 问题的解决.md
├── 安全
└── 前端鉴权.md
├── 性能优化
├── css优化.md
├── html优化.md
└── js优化.md
├── 浏览器
└── 基础1.md
└── 移动端
├── 基础篇.md
├── 移动端资源及常见问题.md
└── 高清适配方案.md
/css/css基础.md:
--------------------------------------------------------------------------------
1 | ```css
2 | [class ^=val] 属性值以val开头的class节点元素
3 |
4 | [class $=val] 属性值以val结尾的class节点元素
5 |
6 | [class *=val] 属性值包含了val的class节点元素
7 |
8 | p:first-of-type 在父元素的子元素中选择第一个p元素
9 |
10 | p:last-of-type 在父元素的子元素中选择最后一个p元素
11 |
12 | p:only-of-type(n) 在父元素的子元素中选择唯一的p元素
13 |
14 | p:nth-last-of-type(n) 在父元素中的子元素中选择倒数的第n个p元素
15 |
16 |
17 | p:only-child :在p元素中选择只有一个子元素
18 |
19 | p:last-child 在p元素中选择的最后一个子元素
20 |
21 | p:nth-child(n || even || odd) 在父元素中选择第n个p元素 || 偶数 || 基数
22 |
23 | p:nth-last-child(n) 在p元素中选择倒数的第n个子元素
24 |
25 |
26 | :root 选择文本的根元素
27 |
28 | p:empty 选择没有子元素的p元素
29 |
30 | p:enable 选择每个未禁用的p元素
31 |
32 | p:disable 选择每个被禁用的p元素
33 |
34 | p:checked 选择每个被选中的p元素
35 |
36 | p:target 选择当前活动的p元素
37 |
38 |
39 | :not(p) 选择不包括p元素的 每一个元素
40 |
41 | ::selection 用户选取的部分
42 |
43 | :focus 获得焦点的元素器
44 |
45 |
46 |
47 | p:first-line 对p元素的第一行文本进行格式化,只能用于块级元素
48 |
49 | p:first-letter 对p元素的首字母设置特殊样式,只能用于块级元素
50 |
51 | p:before 在p元素的内容前面插入新内容,
52 |
53 | p:after 在p元素的后面插入新内容
54 | ```
55 |
56 | ### 如何创建块级格式化上下文,BFC有什么用?
57 | 理解:BFC是css布局的一个概念,是一块独立的渲染区域,一个环境,里面的元素不会影响到外部的元素
58 |
59 | 如何创建:
60 |
61 | - 根元素(body)
62 |
63 | - 浮动元素 (float不为`none`)
64 |
65 | - 绝对定位元素 (position取值为`absolute`或`fixed`)
66 |
67 | - 元素display取值为`inline-block`,`inline-flex`,`flex`,`table-caption`,`table-cell`之一
68 |
69 | - overflow 除`visible`以外的元素
70 |
71 | `BFC布局规则:`
72 | 1. 内部的元素会在垂直方向,一个接一个地放置。
73 | 2. 在同一个BFC容器里的两个相邻的元素的margin会发生重叠
74 | 3. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此, 文字环绕效果,设置float
75 | 4. BFC的区域不会与float元素重叠。
76 | 5. 计算BFC的高度,浮动元素也参与计算
77 |
78 | `BFC作用:`
79 | 1. 自适应两栏布局
80 | 2. 可以阻止元素被浮动元素覆盖
81 | 3. 可以包含浮动元素---清除内部浮动 原理::触发父div的BFC属性,使下面的子div都处在父div的同一个BFC区域之内
82 | 4. 创建属于不同的BFC时,可以阻止margin重叠
83 |
84 |
85 | ### 去除inline-block元素间的缝隙
86 |
87 | inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距(html中元素间空格,回车,html注释都会造成缝隙)
88 |
89 | - 使用margin负值,不过对于12像素大小的上下文,Arial字体的margin负值为-3像素,Tahoma和Verdana就是-4像素,而Geneva为-6像素
90 |
91 | - 使用无闭合标签,(但是为了兼容ie6/7,最后一个列表的结束标签需要加上)
92 |
93 | - font-size:0
94 |
95 | - letter-spacing为负值,但是有些有浏览器最小间距1像素,在小就会还原了
96 |
97 | - word-spacing为负值
98 |
99 | - 移除空格
100 |
101 |
102 | ### `display` , `float` , `position` 之间的关系
103 |
104 | 当display:none的时候,就会忽略掉float和position的值,因为此时元素已经消失在渲染树中,元素不占位
105 |
106 | 否则,当position为absolute或fixed的时候,元素就是绝对定位,float的值是none
107 |
108 | 否则,看float不是none的时候,此时元素是浮动元素。
109 |
110 | 否则,如果元素是根元素,,其它情况下display的值为指定值。
111 |
112 | 总结来说,绝对定位,浮动,根元素都需要调整display
113 |
114 | ### CSS 权重优先级顺序简单表示为:
115 |
116 | `!important` > `行内样式` > `ID` > `类、伪类、属性` > `标签名` > `继承` > `通配符`
117 |
118 | 最大 > 1000 > 100 > 10 > 1 > 0
119 |
120 |
121 | `@import` 的性能优于`link`,因为`@import`在页面加载完后才执行,所以在页面加载的同时不会去并行加载这个css文件,适合加载未来需要的文件。
122 |
123 | `link` 在页面加载的同时就会同时加载,浏览器对并行下载有限制,适合 马上就需要加载的文件,并且要放置页面头部。
124 |
125 | ### 盒子模型
126 | ie盒子模型: width = content + padding + border
127 | w3c盒子模型: width = content + border
128 |
129 | box-sizing: content-box 是IE盒子模型
130 | box-sizing: border-box 是W3C盒子模型
131 |
132 | 区别在于 : IE盒子模型: 高 或 宽 = content + padding + border
133 |
134 | ### transition和animation的区别
135 | Animation和transition大部分属性是相同的,他们都是随时间改变元素的属性值,他们的主要区别是transition需要触发一个事件才能改变属性,
136 | 而animation不需要触发任何事件的情况下才会随时间改变属性值,并且transition为2帧,从from .... to,而animation可以一帧一帧的。
137 |
138 | ### 超链接访问过后hover样式就不出现了
139 | 被点击访问过的超链接样式不再具有hover和active了。
140 | 解决方法是改变CSS属性的排列顺序:L-V-H-A ( love hate ): a:link {} a:visited {} a:hover {} a:active {}
141 |
142 | ### css3新特性
143 | 选择器
144 | 边框(border-image、border-radius、box-shadow)
145 | 背景(background-clip、background-origin、background-size)
146 | 渐变(linear-gradients、radial-gradents)
147 | 字体(@font-face)
148 | 转换、形变(transform)
149 | 过度(transition)
150 | 动画(animation)
151 | 弹性盒模型(flex-box)
152 | 媒体查询(@media)
153 |
154 | ### 清除div浮动方式 (scss)
155 | 定义zoom:1来解决IE浮动问题
156 |
157 | ##### 1. 浮动元素定义after或before,和zoom
158 | ```css
159 | .clearfloat{
160 | zoom: 1;
161 |
162 | &:after {
163 | height: 0; content: ""; clear: both;
164 | display: block; visibility: hidden;
165 | }
166 | }
167 |
168 | // 支持after或before的浏览器, zoom解决低版本ie浮动问题
169 | ```
170 |
171 | ##### 2. 浮动元素结尾处增加空div或br标签为clear:both
172 | ```html
173 | // 添加一个空div或br标签,利用clear:both清除浮动,让父级div能自动获取到高度
174 |
177 | ```
178 |
179 | ##### 3. 设置div固定高度
180 |
181 | ##### 4. 浮动元素定义overflow: hidden
182 | 需要定义width或zoom,但是超出div的元素会被隐藏掉,不建议和position一起使用
183 |
184 | ##### 5. 浮动元素定义overflow: auto
185 | 需要定义width或zoom, 内部内容超出会有滚动条
186 |
187 | ##### 6. 浮动元素的上级元素一起浮动(float:left)
188 |
189 | ##### 7. 浮动元素定义disaply: table (会影响布局,看情况使用)
190 |
191 | 参考: https://www.cnblogs.com/nxl0908/p/7245460.html
192 |
193 | ### zoom在ie的作用
194 | Zoom属性是IE浏览器的专有属性,可以设置或检索对象的缩放比例。设置或更改一个已被呈递的对象的此属性值将导致环绕对象的内容重新流动。
195 |
196 | 当设置了zoom的值之后,所设置的元素就会就会扩大或者缩小,高度宽度就会重新计算了,这里一旦改变zoom值时其实也会发生重新渲染,运用这个原理,也就解决了ie下子元素浮动时候父元素不随着自动扩大的问题。
197 |
198 | 作用:
199 | 1. 检查页面的标签是否闭合
200 | 2. 样式排除法
201 | 3. 模块确认法
202 | 4. 检查是否清除浮动
203 | 5. 检查 IE 下是否触发 haslayout
204 | 6. 边框背景调试法
205 | 7. 解决ie下的bug,如外边距(margin)的重叠,浮动的清除,触发ie的 haslayout属性
206 | 参考: https://www.jb51.net/css/40285.html
207 | https://blog.csdn.net/u010313768/article/details/47067593
208 |
209 |
210 | ### 当margin是百分比时,计算值为父元素的宽度
211 |
212 | 更准确的应该,当书写模式为横向布局的时候,margin就会以父元素的宽度为计算值,如果书写模式为纵向布局时,margin就会以父元素的高度为计算值
213 |
214 | 这是因为根据w3c标准的浏览器来说,书写模式为横向的时候,宽度根据浏览器的宽度或许是正常的,如果一个元素的上下外边距时父元素的height的百分数,就可能导致一个无限循环,所以margin百分比值在计算时会参考父容器尺寸
215 |
216 | ### flex布局常用属性及作用
217 | 当设置`display:flex` 布局后,元素就会变成弹性布局,他的子元素变为弹性列表
218 |
219 | - flex-direction: 设置子元素主轴的方式是行还是列,是顺序还是逆序,有`row`, `row-reverse`, `column`, `column-reverse`选值
220 |
221 | - flex-wrap: 设置子元素沿主轴方向是否需要换行,正序还是逆序,有`nowrap`, `wrap`, `wrap-reverse`选值
222 |
223 | - flex-flow: 可以同时设置flex-derection 和 flex-wrap 值,空格隔开
224 |
225 | - justify-content: 设置元素沿主轴方向的摆放位置,`flex-start`(靠左), `flex-end`(靠右), `center`(居中), `space-between`(子元素之间留有空白,前后没有), `space-around`(每一个都有空白间距), `initiad`(继承)
226 |
227 | - align-items: 设置一行元素沿侧轴方向的摆放位置,`flex-start`(靠左,不拉伸高度), `flex-end`(靠容器的底部,不拉伸高度), `stretch`(默认值,拉伸高度), `baseline`(对齐容器的基线上), `center`(垂直居中,不拉伸), `initiad`(继承)
228 |
229 | - align-self: 与align-items类似,可以单独设置子元素设置沿侧轴方向摆放的位置,`auto`(默认值), `flex-sart`(靠左), `flex-end`(靠右), `stretch`(拉伸), `baseline`(容器基线上), `center`(垂直), `initial`(继承)
230 |
231 | - order: 设置子元素排列顺序,按照order值从左到右,支持正负值, 默认值为0
232 |
233 | - aling-center: 设置元素垂直方向的摆放位置,`flex-sart`(靠左), `flex-end`(容器底部), `stretch`(平分高度,子元素垂直之间留有空白,最前没有),`center`(垂直), `initial`(继承), `space-between`(平分高度,子元素垂直之间留有空白,最前最后没有), `space-around`(平分高度,子元素垂直之间留有空白,最前最后有)
--------------------------------------------------------------------------------
/css/多方案实现垂直水平居中.md:
--------------------------------------------------------------------------------
1 | ### CSS 实现水平垂直居中
2 | ```html
3 |
6 | ```
7 |
8 | ##### 1.position+auto
9 | ```css
10 | .wrapper{
11 | width:100px;height:100px;
12 | position:relative;background:#ddd;
13 | }
14 |
15 | .slide{
16 | width:50px;height:50px;
17 | position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;
18 | background:#ff0000;
19 | }
20 | ```
21 |
22 | 这个居中方案比较简单常用,IE8及以上支持
23 | 但是有一点需要注意:宽度和高度不能是auto,否则高宽会继承 限制他的元素(relative);下一个方案解决这问题:
24 |
25 | ##### 2. table-cell
26 | ```css
27 | .wrapper{
28 | width:100px;height:100px;
29 | display:table-cell;/* 让 vertical-align: middle; 生效 */
30 | background:#ddd;vertical-align: middle;
31 | text-align: center;
32 | }
33 |
34 | .slide{
35 | display:inline-block;
36 | vertical-align:middle;
37 | background:#ff0000;
38 | }
39 | ```
40 |
41 | 这个方案可以解决上一个需要设置高宽的问题,IE8及以上支持。这里除了给父父元素一个vertical-align: middle;之外,我们还需要给需要水平垂直居中的元素也添加vertical-align: middle;属性。如果不添加,那么在垂直方向上会有几个像素的误差。
42 |
43 | ##### 3.position+margin/absolute/translate
44 |
45 | ```css
46 | // 形式一
47 | .wrapper{
48 | width:100px;height:100px;
49 | position:relative;background:#ddd;
50 | }
51 |
52 | .slide{
53 | width: 50px;
54 | height: 50px;
55 | background: #ff0000;
56 | position: absolute;
57 | top: 50px;
58 | left: 50px;
59 | margin-top:-25px;margin-left:-25px;
60 | }
61 |
62 |
63 |
64 | // 形式二
65 | .wrapper{
66 | width:100px;height:100px;
67 | position:relative;background:#ddd;
68 | }
69 |
70 | .slide{
71 | width: 50px;
72 | height: 50px;
73 | background: #ff0000;
74 | position: absolute;
75 | top:25px;left:25px;
76 | }
77 |
78 |
79 |
80 | // 形式三
81 | .wrapper{
82 | width:100px;height:100px;
83 | position:relative;background:#ddd;
84 | }
85 |
86 | .slide{
87 | width: 50px;
88 | height: 50px;
89 | background: #ff0000;
90 | position: absolute;
91 | top: 50%;
92 | left: 50%;
93 | transform: translate(-50%,-50%);
94 | }
95 | ```
96 | 前两个都差不多,需要自己计算数值并且需要设置宽高,IE5及以上支持
97 | 推荐使用第三个方案,利用translate按自身的高宽百分比移动,达到居中效果,IE9及以上支持
98 |
99 | ##### 4.Flex
100 | ```css
101 | .wrapper{
102 | width:100px;height:100px;
103 | background:#ddd;display:flex;
104 | align-items: center; /* 垂直居中 */
105 | justify-content: center;/* 水平居中 */
106 | }
107 |
108 | .slide{
109 | background: #ff0000;
110 | }
111 | ```
112 | 不需要设置元素高宽,且简单,就可以达到居中效果,但是….IE10及以上才支持。移动端兼容良好,推荐在移动端使用
113 |
114 | ##### 5.Flex+margin
115 |
116 | ```css
117 | .wrapper{
118 | width:100px;height:100px;
119 | background:#ddd;display:flex;
120 | }
121 |
122 | .slide{
123 | background: #ff0000;margin:auto;
124 | }
125 | ```
126 | 兼容性:IE10及以上 ,这种方法跟第4种方法比较起来代码也更加简洁。
127 |
128 |
129 | ##### 6.fixed+top+transform
130 |
131 | ```js
132 | .demo {
133 | position:fixed;
134 | top: 50%;
135 | left: 50%;
136 | transform: translate(-50%, -50%);
137 | }
138 | ```
139 |
140 |
141 | ##### 网上终极法
142 |
143 | ```css
144 | .demo-wrap{
145 | height: 200px;
146 | width: 200px;
147 | display: table;
148 | position: relative;
149 | background: #eee;
150 | }
151 | .demo-center{
152 | display: table-cell;
153 | vertical-align: middle;
154 | text-align: center;
155 | *position: absolute;
156 | *top: 50%;
157 | *left: 50%;
158 | }
159 | .center{
160 | background: #ccc;
161 | display: inline-block;
162 | *position:relative;
163 | *top: -50%;
164 | *left: -50%;
165 | }
166 | ```
--------------------------------------------------------------------------------
/eslint/常见错误.md:
--------------------------------------------------------------------------------
1 | #### Unexpected tab character (no-tabs)
2 | 字面意思理解呢就是意想不到的制表符,当时出现的时候就是我习惯的使用Tab键去替代空格,但是eslint默认不认可Tab,所以解决方法就是重新用空格缩进或者以下很简单:
3 |
4 | 在eslint的配置文件中(.eslintrc)rules项中添加一行:"no-tabs":"off"。如下:
5 | 
6 |
7 | #### Trailing spaces not allowed (no-trailing-spaces)
8 | 后面不能有空格,需要删除
9 |
10 | #### Line 3 exceeds the maximum line length of 100 (max-len)
11 | 一行不能超过100个字符
12 |
13 | #### Trailing spaces not allowed (no-trailing-spaces)
14 | 一般是有多余的空格
--------------------------------------------------------------------------------
/html/html基础.md:
--------------------------------------------------------------------------------
1 | #### XHTML 和 HTML的区别
2 | 主要区别在于功能,书写习惯,XHTML可以兼容各大浏览器,平板,手机,而且也能够快速并且正确编译网页
3 |
4 | 书写习惯上:
5 | 1. 在XHTML中,所有标签都必须是小写,不能既有大写又有小写,也不能都是大写
6 |
7 | 2. 标签必须正确的闭合,开始标签和结束必须成对出现,标签顺序也必须有序,正确
8 |
9 | 3. 在XHTML 1.0中规定标签属性必须是双引号
10 |
11 | 4. XHTML 1.1中不允许使用target="_blank", 如果想要有开新窗口的功能,就必须改写为rel="external",并搭配JavaScript实现此效果。
12 | ```html
13 | MUKI space
14 | ```
15 |
16 | #### H5新特性:
17 | 新增选择器 document.querySelector、document.querySelectorAll
18 | 拖拽释放(Drag and drop) API
19 | 媒体播放的 video 和 audio
20 | 本地存储 localStorage 和 sessionStorage
21 | 离线应用 manifest
22 | 桌面通知 Notifications
23 | 语意化标签 article、footer、header、nav、section
24 | 增强表单控件 calendar、date、time、email、url、search
25 | 地理位置 Geolocation
26 | 多任务 webworker
27 | 全双工通信协议 websocket
28 | 历史管理 history
29 | 跨域资源共享(CORS) Access-Control-Allow-Origin
30 | 页面可见性改变事件 visibilitychange
31 | 跨窗口通信 PostMessage 可以安全地实现跨源通信
32 | Form Data 对象
33 | 绘画 canvas
34 | 服务器发送事件 ( SSE, server-sent event ) (只要让服务器保持 HTTP 会话不关闭,当有新的更新时,立刻输出)
35 |
36 | #### H5移除的元素:
37 | 纯表现的元素:basefont、big、center、font、s、strike、tt、u
38 | 对可用性产生负面影响的元素:frame、frameset、noframes
39 |
40 | #### DOM文档加载顺序:
41 | 解析HTML结构
42 | 加载外部脚本和样式表文件(loading)
43 | 解析并执行脚本
44 | DOM树构建完成(readyState:interactive) (DOMcontentLoaded 事件执行)
45 | 加载外部资源文件(图片等)
46 | 页面加载完成(readyState:complete) (load 事件执行)
47 |
48 | ### doctype 作用
49 | doctype一般声明与html文档的第一行,用于告诉浏览器以什么样的文档标准解析文档,doctype不存在或者格式错误会以兼容模式呈现
50 |
51 | ### 严格模式和混杂模式的区别
52 | 严格的模式的排版和js的运作方式都会以浏览器的最高标准运行,兼容模式主要是以向低版本浏览器兼容的方式运行,防止老站点无法运行
53 |
54 | ### html5 为什么是?
55 | html5 不基于sgml,因此不需要对dtd进行引用,但是需要让浏览器知道以什么模式运行
56 | html4 还基于sgml,需要引用dtd
57 |
58 | ### 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
59 |
60 | ***行内元素***:
61 | a - 锚点,em - 强调,strong - 粗体强调,span - 定义文本内区块,i - 斜体,img - 图片,b - 粗体,label - 表格标签,select - 项目选择,textarea - 多行文本输入框,sub - 下标,
62 | sup - 上标,q - 短引用;
63 | ***块元素***:
64 | div - 常用块级,dl - 定义列表,dt,dd,ul- 非排序列表,li,ol-排序表单,p-段落,h1,h2,h3,h4,h5-标题,table-表格,fieldset - form控制组,form - 表单,
65 | ***空元素***:
66 | br-换行,hr-水平分割线
67 |
68 | ### html5 离线存储原理
69 | 在html标签添加`manifest`属性
70 | ```html
71 |
72 |
73 | ...
74 |
75 | ```
76 | 在cache.mainifest文件内编写需要缓存的文件
77 | ```html
78 | CACHE MANIFEST
79 | #v0.11
80 |
81 | // cache表示需要离线缓存的列表,不需要把自身页面列出来,因为包含manifest 的页面也会自动被缓存
82 | CACHE:
83 | js/app.js
84 | css/index.css
85 |
86 | // 优先级比cache高,一般只有在在线的情况下才能访问,离线时无法使用,需要的话可以在cache中添加
87 | NETWORK:
88 | resourse/logo.png
89 |
90 | // 如果资源访问失败,就会用第二个资源替代他,比如上面的例子就是,访问资源错误就会跳转至offline.html
91 | FALLBACK:
92 | // offline.html
93 | ```
94 | 如果浏览器遇到有manifest属性,并且在线:
95 | 如果是第一次访问,就会下载并且缓存manifest文件的具体资源,如果是不是第一次访问,会先使用旧的离线存储数据展示页面,然后浏览器会比较本地和服务器之间的manifest文件,如果不是最新的文件,就会重新下载并且缓存文件
96 | 如果是离线的情况:
97 | 直接展示离线缓存的文件
98 |
99 | ### cookie,localstorage, sessionstorage区别
100 |
101 | cookie只能存储4kb的大小,并且数据保存在客户端,每次同源网络请求的时候都会携带,在使用的时候可以设置过期时间,如果没有设置浏览器关闭后就会删除cookie,如果设置了就会存储在硬盘中,就算浏览器关闭后再打开访问,还是可以使用的,比起seesion不是特别安全,一般浏览器限制存储20个cookie,主要用于会话标识
102 |
103 | localstorage数据同样保存在客户端,网络请求的时候不会携带数据,在使用的时候没有设置过期时间,但是可以通过存储时间进行封装来实现,如果不手动清除,就会一直保存,就会浏览器关闭后也还存在,持久化方案之一,一般存储可达5mb或者更大,localstorage在同源的窗口可以互相调用,都是共享的
104 |
105 | session数据保存在服务器端,同源网站的任意网页内都可以访问,session一般在标签页变比或浏览器关闭后就清除,即使标签关闭或刷新网页数据依然可以访问,适合临时存储
106 |
107 | 区别:
108 | 1. cookie和localstorage数据存放在客户端,session数据放在服务器上
109 | 2. cookie和localstorage不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
110 | 3. session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
111 | 4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,localstorage和sessionstorage
112 | 5. 建议将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中
113 | 6. session保存在服务器,客户端不知道其中的信心;cookie保存在客户端,服务器能够知道其中的信息
114 | 7. session中保存的是对象,cookie中保存的是字符串
115 | 8. session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的
116 |
117 | 参考:
118 | https://www.cnblogs.com/zr123/p/8086525.html
119 |
120 |
121 | ### href和src的区别
122 | - src是指外部资源,用于替代这个元素,这个属性是将资源嵌入到当前文档中元素所在的位置,,浏览器会暂停加载直到这资源加载完成。这也是为什么要将js文件的加载放在body最后的原因(在