JavaScript-性能与安全

2020/7/11 JavaScript
// 严格模式
1. 在文件的第一行写 'use strict' 就开启全局的严格模式,默认在函数体内的第一行写则开启函数体内的严格模式
2. 特点
  1. 全局变量必须先声明
  2. 禁止使用 with
  3. eval 会创建自己的作用域,和全局的作用域不相干
  4. 函数体内中的 this 如果指向的是 window,在严格模式下会是 undefined
  5. 函数参数名称不能重复
----------------------------------------------------------------------------------------------
// 网页渲染过程(html代码从上往下执行)
1. html代码生成DOM Tree
2. css代码生成CSSDM
3.DOM Tree和CSSDM整合生成Render Tree
4. 根据Render Tree渲染页面
5. 遇到<script>则暂停,优先执行js再进行渲染(js线程和渲染线程共用一个线程)
6. 渲染完成
----------------------------------------------------------------------------------------------
// onload和DOMContentLoaded的区别
1. window.onload: 页面上的DOM、样式表、脚本、图片、flash、都加载完成时触发
2. document.DOMContentLoaded: 仅当DOM加载完成, 不包括样式表、图片、flash
----------------------------------------------------------------------------------------------
// 性能优化原则
1. 多使用内存、缓存或其他方法
2. 减少cpu计算量,减少网络加载耗时
3. 空间换时间
----------------------------------------------------------------------------------------------
// 性能优化——让加载更快
1. 减少资源体积: 压缩代码
2. 减少访问次数: 合并代码、SSR服务器端渲染、缓存
3. 使用更快的网络: CDN
----------------------------------------------------------------------------------------------
// 性能优化——让渲染更快
1. css放在head,js放在body最下面
2. 尽早开始执行js,用DOMContentLoaded触发
3. 懒加载(图片懒加载、上滑加载更多)
4.DOM查询进行缓存
5. 频繁DOM操作合并到一起插入DOM结构
6. 节流throttle、防抖debounce
----------------------------------------------------------------------------------------------
// 安全
1. xss(跨站请求攻击): 防止别人内嵌js脚本获取网站信息,如内嵌了 script 脚本请求了对应的图片地址
   把对应的信息带上,这样就把信息获取到了,而且请求图片不会跨域
2. xss预防方法: 改变括号,把左右的<>括号替换成 &lt;&gt;, 或使用npm包xss
3. csrf(跨站请求伪造):黑客诱导用户去访问另一个网络的接口,伪造请求
4. csrf预防方法:
  1. 使用POST接口,增加验证,例如密码、指纹等,严格的跨域请求限制,如判断 referrer
  2. 为 cookie 设置 SameSite,禁止跨域传递 cookie
5. 点击劫持:诱导界面上蒙一个透明的 iframe,诱导用户点击
  1. 预防:让 iframe 不能跨域加载
6. DDos:分布式拒绝服务,大规模的流量访问,使服务器瘫痪
  1. 预防:软件层不好做,需要硬件预防,如阿里云 WAF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Last Updated: 2024/7/31 12:57:25
    飘向北方
    那吾克热-NW,尤长靖