整理

2019-04-21  本文已影响0人  yokohu

内容


内容拓展

浏览器渲染

  1. DNS 查询
  2. TCP 连接
  3. HTTP 请求即响应
  4. 服务器响应
  5. 客户端渲染

其中浏览器对内容的渲染包括:

  1. 处理 HTML 标记并构建 DOM 树。
  2. 处理 CSS 标记并构建 CSSOM 树。
  3. 将 DOM 与 CSSOM 合并成一个渲染树。
  4. 根据渲染树来布局,以计算每个节点的几何信息。
  5. 将各个节点绘制到屏幕上。

框架

MVVM: Model:数据模型; View:界面; ViewModel:作为桥梁负责沟通 View 和 Model
核心:数据双向绑定
类型:

  1. 脏数据检测
    调用 digest 循环遍历所有的数据观察者,判断当前值是否和先前的值有区别,如果检测到变化的话,会调用watch 函数,然后再次调用 $digest 循环直到发现没有变化。循环至少为二次 ,至多为十次。
  2. 数据劫持
    vue 实现双向绑定:

浏览器

1. 事件机制

  1. 执行同步代码,这属于宏任务
  2. 执行栈为空,查询是否有微任务需要执行
  3. 执行所有微任务
  4. 必要的话渲染 UI
  5. 然后开始下一轮 Event loop,执行宏任务中的异步代码
  6. 渲染机制
  7. 处理 HTML 并构建 DOM 树。
  8. 处理 CSS 构建 CSSOM 树。
  9. 将 DOM 与 CSSOM 合并成一个渲染树。
  10. 根据渲染树来布局,计算每个节点的位置。
  11. 调用 GPU 绘制,合成图层,显示在屏幕上。

性能

1. DNS 预解析
2. 缓存:强缓存和协商缓存
强缓存: 通过两种响应头实现: Expires 和 Cache-Control

Expires: Wed, 22 Oct 2018 08:41:00 GMT //表示资源会在 Wed, 22 Oct 2018 08:41:00 GMT 后过期
Cache-control: max-age=30 // 优先级高于 Expires 。该属性表示资源会在 30 秒后过期,需要再次请求

协商缓存:协商缓存需要请求,如果缓存有效会返回 304。 Last-Modified 表示本地文件最后修改日期,If-None-Match 会将当前 ETag 发送给服务器,询问该资源 ETag 是否变动,有变动的话就将新的资源发送回来。并且 ETag 优先级比 Last-Modified 高
缓存策略:

<link rel="preload" href="http://example.com" />

4. 预渲染

<link rel="prerender" href="http://example.com" />

5. 优化渲染

// 图片的预加载
 var images = new Array();
 function preloader() {
   if(document.images){
     for (i = 0; i < document.images.length; i++) {
       images[i] = new Image();
       images[i].src = document.images[i].src
     }
   }
 }
 function addLoadEvent(func) {
   var oldonload = window.onload;
   if (typeof window.onload != 'function') {
       window.onload = func;
   } else {
       window.onload = function() {
           if (oldonload) {
               oldonload();
           }
           func();
       }
   }
 }
 addLoadEvent(preloader);   

6. 使用 Webpack 优化项目

安全

1. XSS 跨网站指令码(Cross-site scripting)
攻击:通过修改 HTML 节点或者执行 JS 代码来攻击网站
防御:1. 转义输入输出的内容,对于引号,尖括号,斜杠进行转义;富文本通过白名单过滤
**2. CSP(内容安全策略) : **用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等,通过HTTP Header 中的 Content-Security-Policy 来开启 CSP,

2. CSRF 跨站请求伪造(Cross-site request forgery) : 挟制用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法(利用用户的登录态发起恶意请求)
攻击:假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口;如果接口是 Post 提交的,就相对麻烦点,需要用表单来提交接口
防御:
- Get 请求不对数据进行修改
- 不让第三方网站访问到用户 Cookie (设置SameSite)
- 阻止第三方网站请求接口 (验证 Referer)
- 请求时附带验证信息,比如验证码或者 token (每次发起请求时将 Token 携带上,服务器验证 Token 是否有效)

3. 密码安全
防御: 对密码加盐,然后进行几次不同加密算法的加密。
// 加盐也就是给原密码添加字符串,增加原密码长度 sha256(sha1(md5(salt + password + salt)))

上一篇下一篇

猜你喜欢

热点阅读