langyazhixue

积极向上,独立自主

  • 主页
所有文章 关于我

langyazhixue

积极向上,独立自主

  • 主页

V8引擎工作原理

2021-06-11
  • 消息队列和事件循环事件:页面是怎么活起来的?

    1. 想要在线程运行过程中能接收并执行新的任务,就需要采用事件循环机制

    2. 消息队列是一种数据结构,可以存放要执行的任务,符合先进先出的特点,也就是说要添加任务的话,添加到队列的尾部,要取出任务的话,从队列头部去取

    3. IO线程:渲染进程专门有一个 IO 线程用来接收其他进程传进来的消息。。接收到消息后,会将这些消息组装成任务发送给渲染主线程

      1. 添加一个消息队列
      2. IO 线程中产生的新任务添加进消息队列尾部
      3. 渲染主线程会循环从消息队列头部读取任务、执行任务
      4. 浏览器页面是由消息队列和事件循环系统来驱动的
    4. 消息类型

      1. 输入事件(鼠标滚动、点击、移动
      2. 微任务
      3. 文件读写
      4. WebSocket
      5. JS 定时器
      6. 页面相关的事件,JS执行,解析DOM,样式计算,布局计算,CSS动画
    5. 页面使用单线程的缺点

      1. 如何处理高优先级任务

        1. 监控DOM节点的变化情况(节点的插入,修改,删除)微任务

        2. 消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列,在执行宏任务的过程中,如果 DOM 有变化,那么就会将该变化添加到微任务列表中,这样就不会影响到宏任务的继续执行,因此也就解决了执行效率的问题。

        3. 等宏任务中的主要功能都直接完成之后,这时候,渲染引擎并不着急去执行下一个宏任务,而是执行当前宏任务中的微任务,因为 DOM 变化的事件都保存在这些微任务队列中,这样也就解决了实时性问题。

      2. 如何解决单个任务执行时长过久的问题

        其中有个 JavaScript 任务因执行时间过久,占用了动画单帧的时间,这样会给用户制造了卡顿的感觉,这当然是极不好的用户体验。针对这种情况,JavaScript 可以通过回调功能来规避这种问题,也就是让要执行的 JavaScript 任务滞后执行。至于浏览器是如何实现回调功能的,我们在后面的章节中再详细介绍。

  • WebAPI:setTimeout 是如何实现的? setTimeout()是异步的宏任务

    1. 浏览器页面是由消息队列和事件循环系统来驱动的

    2. 浏览器怎么实现 setTimeout?如果要执行一段异步的JS 代码,也需要将执行任务添加到消息队列中去,但是消息队列中的任务是按照顺序执行的,为了保证回调函数能在指定的时间内执行,把 任务放到延迟队列中去

    3. 如何触发延迟列队中的任务,增加ProcessDelayTask 函数,该函数是专门用来处理延迟执行任务的。这里我们要重点关注它的执行时机,在上段代码中,处理完消息队列中的一个任务之后,就开始执行 ProcessDelayTask 函数。ProcessDelayTask 函数会根据发起时间和延迟时间计算出到期的任务,然后依次执行这些到期的任务

    4. 使用SetTimout 的一些注意事项

      1. 如果当前任务执行时间过久 会影响定时器任务的执行
      2. 如果 setTimeout 存在嵌套调用,那么系统会设置最短时间间隔为 4 毫秒
      3. 未激活的页面,setTimeout 执行最小间隔是 1000 毫秒
      4. 延时执行时间有最大值 24.8天
      5. 使用setTimout 设置的回调函数中的 this 不符合 直觉,被setTimeout设置的回调函数是某个对象的方法,那么该方法中的this关键字将指向全局环境,而不是定义时候所在的那个对象
  1. 回调任务实时性并不是太好, 使用 JS 来实现动画,用 requestAnimationFrame的工作机制,

    使用 requestAnimationFrame 不需要设置具体的时间,由系统来决定回调函数的执行时间,requestAnimationFrame 里面的回调函数是在页面刷新之前执行,它跟着屏幕的刷新频率走,保证每个刷新间隔只执行一次,内如果页面未激活的话,requestAnimationFrame 也会停止渲染,这样既可以保证页面的流畅性,又能节省主线程执行函数的开销

    1. setTimeout和Promise执行顺序,微任务和宏任务
  • WebAPI: XMLHTTPRequest是怎么实现的?

    1. 消息队列和主线程循环机制保证了页面有条不紊地运行

    2. 异步回调是指回调函数在主函数外执行,一般有2种方式

      1. 第一种是把异步函数做成一个任务,添加到消息队列的尾部
      2. 把异步函数添加到微任务队列中,可以在当前任务的末尾执行微任务
    3. 渲染进程会将请求发送给网络进程,然后网络进程负责资源的下载,等网络进程接收到数据之后,就会利用 IPC 来通知渲染进程;IO 线程收到消息,渲染进程接收到消息之后,会将 xhr 的回调函数封装成任务并添加到消息队列中,等主线程循环系统执行到该任务的时候,就会根据相关的状态来调用对应的回调函数。

    4. XMLHTTPRequest遇到的问题

      1. 同源策略,跨域问题
      2. HTTPS 混合内容是 HTTPS 页面中包含了不符合 HTTPS 安全要求的内容,比如包含了 HTTP 资源,通过 HTTP 加载的图像、视频、样式表、脚本等,都属于混合内容,
        通过HTML文件加载的混合资源,虽然给出警告,但大部分还是可以加载的
        使用XMLHTTPRequest请求时候,浏览器认为这种请求可能是攻击者发起的,会阻止
    5. 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
      52
      53
      function GetWebData(URL){
      /**
      * 1:新建XMLHttpRequest请求对象
      */
      let xhr = new XMLHttpRequest()

      /**
      * 2:注册相关事件回调处理函数
      */
      xhr.onreadystatechange = function () {
      switch(xhr.readyState){
      case 0: //请求未初始化
      console.log("请求未初始化")
      break;
      case 1://OPENED
      console.log("OPENED")
      break;
      case 2://HEADERS_RECEIVED
      console.log("HEADERS_RECEIVED")
      break;
      case 3://LOADING
      console.log("LOADING")
      break;
      case 4://DONE
      if(this.status == 200||this.status == 304){
      console.log(this.responseText);
      }
      console.log("DONE")
      break;
      }
      }

      xhr.ontimeout = function(e) { console.log('ontimeout') }
      xhr.onerror = function(e) { console.log('onerror') }

      /**
      * 3:打开请求
      */
      xhr.open('Get', URL, true);//创建一个Get请求,采用异步


      /**
      * 4:配置参数
      */
      xhr.timeout = 3000 //设置xhr请求的超时时间
      xhr.responseType = "text" //设置响应返回的数据格式
      xhr.setRequestHeader("X_TEST","time.geekbang")

      /**
      * 5:发送请求
      */
      xhr.send();
      }
  • 宏任务和微任务:不是所有任务都是一个待遇

  1. 宏任务和微任务

    1. setTimeout和Promise区别(宏任务和微任务)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Firefox和Chrome早期版本中带有前缀
    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
    // 选择目标节点
    var target = document.querySelector('#some-id');
    // 创建观察者对象

    var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
    console.log(mutation.type);
    })
    })

    // 配置观察选项:
    var config = { attributes: true, childList: true, characterData: true }
    // 传入目标节点和观察选项
    observer.observe(target, config);
    // 随后,你还可以停止观察
    observer.disconnect();
    1. 关于async/await、promise和setTimeout执行顺序
  1. 宏任务:包括整体代码script,setTimeout,SetInterval,I/O,UI交互事件
    setImmediate(Node.js 环境)

  2. 微任务:Promise、MutaionObserver、process.nextTick(Node.js 环境)

  1. 微任务就是一个需要异步执行的函数,执行时机是在主函数执行结束之前,当前宏任务结束之后

  2. 微任务产生的时机和执行微任务的时机

    1. 产生 Promise、MutaionObserver,
      当调用Promise.resolve() 或者 Promise.reject() 产生微任务

    2. MutaionObserver 可以用来监听DOM 变化,包括属性的变化、节点的增减、内容变化等
      MutaionObserver 将响应函数改成异步调用,可以不用在每次DOM变化都触发异步调用,而是等多次DOM变化后,一次触发异步

    3. 如果在执行微任务的过程中,产生了新的微任务,同样会将该微任务添加到微任务队列中,V8引擎一直循环执行微任务队列中的任务,直到队列为空才算执行结束。也就是说在执行微任务过程中产生的新的微任务并不会推迟到下个宏任务中执行,而是在当前的宏任务中继续执行

  3. 微任务结论

    1. 微任务和宏任务是绑定的,每个宏任务在执行时,会创建自己的微任务队列。
    2. 微任务的执行时长会影响到当前宏任务的时长。比如一个宏任务在执行过程中,产生了 100 个微任务,执行每个微任务的时间是 10 毫秒,那么执行这 100 个微任务的时间就是 1000 毫秒,也可以说这 100 个微任务让宏任务的执行时间延长了 1000 毫秒。所以你在写代码的时候一定要注意控制微任务的执行时长。
    3. 在一个宏任务中,分别创建一个用于回调的宏任务和微任务,无论什么情况下,微任务都早于宏任务执行。
  4. MutationObserver 将响应函数改成异步调用,可以不用在每次DOM 变化时候都触发异步调用,而是等多次DOM变化后,一次触发异步调用, 并且还会使用一个数据结构来记录这期间所有的DOM变化,这样即使频繁的操作DOM,也不会对性能产生太大的影响

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver ||  window.MozMutationObserver
    // 选择目标节点
    var target = document.querySelector('#some-id');
    // 创建观察者对象
    var observer = new MutationObserver(function(mutations) {
    // 异步函数
    mutations.forEach(function(mutation) {
    console.log(mutation.type);
    });
    });
    // 配置观察选项:
    var config = { attributes: true, childList: true, characterData: true }
    // 传入目标节点和观察选项
    observer.observe(target, config);
    // 随后,你还可以停止观察
    observer.disconnect();

    综上所述, MutationObserver 采用了“异步 + 微任务”的策略。通过异步操作解决了同步操作的性能问题;通过微任务解决了实时性的问题。

  • Promise: 使用Promise,告别回调函数

    1. Promise 解决的是异步编码风格,消灭嵌套调用,合并多个任务的错误处理

    2. 异步编程模型,页面主线程发起了一个耗时的任务,并将任务交给另外一个进程去处理,这时页面主线程会继续执行消息队列中的任务。等该进程处理完这个任务后,会将该任务添加到渲染进程的消息队列中,并排队等待循环系统的处理。排队结束之后,循环系统会取出消息队列中的任务进行处理,并触发相关的回调操作

    3. 回调的痛点: 1. 多层嵌套的问题 2. 每种任务的处理结果存在2种可能性(成功或者失败),那么需要在每种任务执行结束后分别处理这两种可能性
      Promise 通过 回调函数延迟绑定``回调函数返回值穿透和错误“冒泡”技术解决了上面的问题

  • async/await:使用同步的方式去写异步代码

    1. 用同步代码实现异步逻辑

    2. async/await 使用了 Generator和Promise 两种技术

    3. Generator 为何能暂停和恢复,了解协程
      协程是一种比线程更轻量级的存在。你可以把协程看成是跑在线程上的任务,一个线程上可以存在多个协程,但是在线程上同时只能执行一个协程,比如当前执行的是 A协程,要启动 B协程,那么 A协程就需要将主线程的控制权交给 B协程,这就体现在 A协程暂停执行,B协程恢复执行;同样,也可以从 B协程中启动 A 协程。通常,如果从 A 协程启动 B 协程,我们就把 A协程称为 B协程的父协程

    4. async/await 技术背后的秘密就是 Promise 和 生成器 应用,往底层说就是微任务和协程应用。

      1. async 是一个通过异步执行并隐式返回Promise作为结果的函数
      2. async/await 背后原理
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      async function foo(){
      try{
      let response1 = await fetch('https://www.geekbang.org')
      console.log('response1')
      console.log(response1)
      let response2 = await fetch('https://www.geekbang.org/test')
      console.log('response2')
      console.log(response2)
      }catch(err) {
      console.error(err)
      }
      }
      foo()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
async function foo() { 
console.log(1)
// let promise_ = new Promise((resolve,reject){ resolve(100)})
// ran 然后 JavaScript 引擎会暂停当前协程的执行,将主线程的控制权转交给父协程执行,同时会将 promise_ 对象返回给父协程。
//主线程的控制权已经交给父协程了,这时候父协程要做的一件事是调用 promise_.then 来监控 promise 状态的改变。 promise 回调函数是微任务
let a = await 100
console.log(a)
console.log(2)
}
// 父协程
console.log(0)
// 由于 foo 函数是被 async 标记过的,所以当进入该函数的时候,JavaScript 引擎会保存当前的调用栈等信息,
foo()
console.log(3)

// promise_.then((value)=>{ //回调函数被激活后 //将主线程控制权交给foo协程,并将vaule值传给协程})
  • 浏览器
http协议基础篇
宏观视角下的浏览器
© 2022 langyazhixue
Powered by Hexo
  • 所有文章
  • 关于我

tag:

  • css
  • htmlDOM
  • node
  • npm
  • react-native
  • 性能优化
  • git
  • 代码规范
  • plugin
  • mock
  • 浏览器
  • 计算机基础
  • http
  • 网络
  • webpack
  • vue
  • vue-cli
  • brower
  • 数据结构
  • es5
  • es6
  • test
  • ts
  • typescript
  • react-router
  • react
  • dva
  • redux
  • redux-saga
  • vue API
  • vue 选项
  • vue基础
  • 设计模式
  • vue-router
  • requestIdleCallback

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • React-setState()的两中传参方式介绍及理解

    2021-12-08

    #react

  • requestIdleCallback

    2021-11-30

    #requestIdleCallback

  • enzyme 测试

    2021-11-13

    #test

  • React 合成事件

    2021-11-08

    #react

  • 小哲机器人项目情况

    2021-08-11

    #webpack

  • 测试类型

    2021-07-15

    #test

  • http协议进阶篇

    2021-06-11

    #网络

  • 问题解答

    2021-06-11

    #浏览器

  • http协议探索篇

    2021-06-11

    #网络

  • http协议安全篇

    2021-06-11

    #网络

  • http协议破冰篇

    2021-06-11

    #网络

  • 浏览器中的JS 执行机制

    2021-06-11

    #浏览器

  • 课外加餐

    2021-06-11

    #浏览器

  • V8引擎工作原理

    2021-06-11

    #浏览器

  • http协议基础篇

    2021-06-11

    #网络

  • V8引擎工作原理

    2021-06-11

    #浏览器

  • 宏观视角下的浏览器

    2021-06-11

    #浏览器

  • http协议总结篇

    2021-06-11

    #网络

  • 问题解答

    2021-06-11

    #浏览器

  • 浏览器安全

    2021-06-11

    #浏览器

  • http协议飞翔篇

    2021-06-11

    #网络

  • 浏览器中的页面

    2021-06-11

    #浏览器

  • vue - 性能优化

    2021-01-02

    #性能优化

  • 性能优化

    2021-01-02

    #性能优化

  • 骨架屏

    2021-01-02

    #性能优化

  • 收集性能信息

    2021-01-02

    #性能优化

  • webapck - 性能优化

    2021-01-02

    #性能优化

  • 关于屏幕尺寸、分辨率(比)、屏幕像素密度的小结

    2021-01-02

    #性能优化

  • git 命令大全

    2020-11-05

    #git

  • vue-cli css 相关配置

    2020-07-31

    #vue#vue-cli

  • vue-cli 环境变量和模式

    2020-07-31

    #vue#vue-cli

  • vue-cli webpack相关配置

    2020-07-31

    #vue#vue-cli

  • vue-cli 脚手架介绍

    2020-07-31

    #vue#vue-cli

  • vue-cli 构建目标

    2020-07-31

    #vue#vue-cli

  • 声明文件的发布

    2020-07-29

    #typescript

  • 如何写TS中的声明文件

    2020-07-29

    #typescript

  • ts 项目配置 tsconfig.json

    2020-07-29

    #typescript

  • 在TypeScript中,.d.ts声明文件中的'export=' 是什么意思

    2020-07-29

    #typescript

  • 进程与线程的区别

    2020-03-05

    #计算机基础

  • react-native 核心组件介绍

    2020-01-02

    #react-native

  • react-native 核心API 介绍

    2020-01-02

    #react-native

  • react-native 离线缓存设计

    2019-12-30

    #react-native

  • react-native 数据缓存

    2019-12-30

    #react-native

  • react-native

    2019-12-30

    #react-native

  • webpack 谈谈 require和require.context()方法

    2019-12-21

    #es6

  • vue权限控制和动态路由

    2019-12-19

    #vue-router

  • 请求相关 path-to-regexp

    2019-12-19

    #plugin

  • dva有哪些输出文件

    2019-12-18

    #react#dva

  • 为什么要用dva

    2019-12-18

    #react#dva

  • dva插件之 dva-loading插件

    2019-12-18

    #react#dva

  • dva有哪些API

    2019-12-18

    #react#dva

  • 谈谈如何在本地进行数据mock

    2019-12-10

    #mock

  • redux-saga 之 Middleware API

    2019-12-05

    #redux#redux-saga

  • redux-saga 如何与 redux 结合

    2019-12-05

    #redux#redux-saga

  • redux-saga 辅助函数

    2019-12-05

    #redux#redux-saga

  • redux-saga 对 sagas 进行排序

    2019-12-05

    #redux#redux-saga

  • redux-saga 之 Effect创建器

    2019-12-05

    #redux#redux-saga

  • redux-saga 组合器

    2019-12-05

    #redux#redux-saga

  • 实现一个flat函数

    2019-12-02

    #es6

  • 谈谈 react-redux

    2019-11-29

    #redux

  • 谈谈 react-router 之 history

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Link

    2019-11-29

    #react-router

  • 谈谈 react-router 之 懒加载

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Hooks

    2019-11-29

    #react-router

  • 谈谈redux 中的 middleware

    2019-11-29

    #redux

  • 谈谈 react-router 之 match

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Router

    2019-11-29

    #react-router

  • redux 综述

    2019-11-29

    #redux

  • redux API 解析

    2019-11-29

    #redux

  • 什么是reducer

    2019-11-20

    #redux

  • 自己实现一个深拷贝

    2019-11-14

    #es5

  • React受控组件

    2019-11-08

    #react

  • React Hook 动机

    2019-11-08

    #react

  • React 生命周期

    2019-11-08

    #react

  • React API

    2019-11-08

    #react

  • React 生命周期2

    2019-11-08

    #react

  • React 性能优化

    2019-11-08

    #react

  • React 高阶组件

    2019-11-08

    #react

  • React 深入JSX

    2019-11-08

    #react

  • React 错误边界

    2019-11-08

    #react

  • React 协调

    2019-11-08

    #react

  • React 代码分割

    2019-11-08

    #react

  • React 不使用jsx

    2019-11-08

    #react

  • React Refs and the DOM

    2019-11-08

    #react

  • React 问题解答

    2019-11-08

    #react

  • React Render Props

    2019-11-08

    #react

  • React 复习指南

    2019-11-08

    #react

  • React事件处理函数必须使用bind(this)的原因

    2019-11-08

    #react

  • React Refs 转发

    2019-11-08

    #react

  • React中元素与组件的区别

    2019-11-08

    #react

  • React Portals

    2019-11-08

    #react

  • 自己实现一个自己的promise

    2019-11-02

    #es6

  • 散列表-线性探查

    2019-11-01

    #数据结构

  • 散列表-分离链接

    2019-11-01

    #数据结构

  • 学习数据结构

    2019-10-22

    #数据结构

  • 如何实现一个lazyMan

    2019-10-15

    #es5

  • 谈谈原生的ajax

    2019-10-15

    #brower

  • 谈谈浏览器的宏任务和微任务(事件机制)

    2019-10-15

    #brower

  • es5中 constructor

    2019-10-14

    #es5

  • toString 的 隐式转化能力

    2019-10-14

    #es5

  • IntersectionObserver 实现懒加载

    2019-10-14

    #es5

  • toString 的 隐式转化能力

    2019-10-14

    #es5

  • 谈谈Vue整理的工作流程

    2019-10-08

    #vue#vue基础

  • window.onload

    2019-10-08

    #htmlDOM

  • 打印出html中所有的标签

    2019-10-08

    #htmlDOM

  • HTML DOM childNodes 属性

    2019-10-08

    #htmlDOM

  • typescript基本类型

    2019-09-29

    #typescript

  • 说出v-model跟async的区别

    2019-09-29

    #vue#vue 选项

  • 谈谈 Vue 中的响应式原理哦

    2019-09-18

    #vue#vue基础

  • 优化构建命令行的显示日志以及构建异常和中断处理

    2019-09-11

    #webpack

  • wepack 常见问题列表

    2019-09-11

    #webpack

  • 构建配置抽离成npm包的意义

    2019-09-11

    #webpack

  • npm piblish 基本流程

    2019-09-10

    #node#npm

  • JavaScript 中 exec() 方法详解

    2019-09-05

    #es5

  • vue key 的作用

    2019-08-30

    #vue

  • vue 组件化通信

    2019-08-30

    #vue

  • 为什么Vue实例化后,通过this.能获取到data内的数据

    2019-08-30

    #vue

  • es5 有哪几种继承方式

    2019-08-26

    #es5

  • 设计原则

    2019-08-20

    #设计模式

  • 代码分割 和 动态 import

    2019-08-13

    #webpack

  • 谈谈js的作用域连 和 执行环境

    2019-08-12

    #es5

  • 我们来谈谈一言难尽的js变量提升

    2019-08-12

    #es5

  • webpack中  Scope Hositing 使用和原理

    2019-08-05

    #webpack

  • webpack中 tree shaking(摇树优化)

    2019-08-05

    #webpack

  • ES6中的import()函数

    2019-08-02

    #es6

  • 谈谈 axios 和 ajax 的区别和各自的优缺点

    2019-08-02

    #es5

  • error 错误

    2019-08-02

    #es5

  • JavaScript中var、let、const区别?

    2019-08-02

    #es6

  • npm 常用命令大全

    2019-07-30

    #node#npm

  • nrm的作用与安装使用

    2019-07-30

    #node#npm

  • ts 常见问题总结

    2019-07-30

    #ts

  • webpack中 优化提取公共资源

    2019-07-30

    #webpack

  • webpack打包之使用source-map?

    2019-07-29

    #webpack

  • webpack打包之资源内联?

    2019-07-28

    #webpack

  • webpack中文件的监听

    2019-07-26

    #webpack

  • 关于Location对象

    2019-07-26

    #brower

  • 谈谈 URI 和 URL 的关系

    2019-07-26

    #brower

  • 谈谈 history API

    2019-07-26

    #brower

  • 一篇文章读懂RGB、HSL、Hex 网页色彩值

    2019-07-22

    #css

  • 谈谈 css中的 transition 过渡

    2019-07-21

    #css

  • 谈谈 css中的 transform 转换

    2019-07-21

    #css

  • 谈谈 css中的 居中

    2019-07-21

    #css

  • 冒烟测试

    2019-07-15

    #test

  • webpack 配置指南?

    2019-07-15

    #webpack

  • webpack构建之mode?

    2019-07-15

    #webpack

  • webpack解析CSS、Less和Sass ?

    2019-07-15

    #webpack

  • 为什么需要打包工具以及为什么选择wbepack?

    2019-07-10

    #webpack

  • Es6 Promise resolve 或者 reject 之后 还 需要 return 吗

    2019-07-02

    #es6

  • Es6 Promise 用法详解

    2019-07-02

    #es6

  • Es6 类的修饰 - 装饰器

    2019-07-02

    #es6

  • 关于table 中的标签 意义以及 table中各个属性的设置

    2019-06-28

    #css

  • 谈谈 Object.create()

    2019-06-26

    #es5

  • 数组快速排序

    2019-06-26

    #es5

  • 递归算法,js实现

    2019-06-26

    #es5

  • 关于算法中的时间复杂度的理解

    2019-06-26

    #数据结构

  • 学习stack

    2019-06-26

    #数据结构

  • 打印出 Html 中的所有标签

    2019-06-26

    #es5

  • 自己实现一个集合

    2019-06-26

    #数据结构

  • 自己实现一个字典

    2019-06-26

    #数据结构

  • 谈谈 柯里化

    2019-06-26

    #es5

  • 深拷贝和浅拷贝

    2019-06-26

    #es5

  • 函数节流与防抖

    2019-06-26

    #es5

  • async await 捕获promise reject error

    2019-06-26

    #es6

  • scss 入门

    2019-06-26

    #css

  • element UI、iview 等组件库修改样式不污染全局环境

    2019-06-26

    #css

  • 详解 ES6 class

    2019-06-26

    #es6

  • 谈谈Object.defineProperty

    2019-06-26

    #es6

  • 谈谈 Content-Type

    2019-06-26

    #http

  • 谈谈 正向代理和反向代理

    2019-06-26

    #http

  • js 垃圾回收

    2019-06-26

    #es5

  • 谈谈 Content-Type

    2019-06-26

    #http

  • 谈谈 闭包

    2019-06-26

    #es5

  • webpack3中 hash、chunkhash 和 contenthash 三者的区别

    2019-06-26

    #webpack

  • 快速排序

    2019-06-26

    #数据结构

  • 详解 ES6 class

    2019-06-26

    #es6

  • 谈谈webpack 中的plugin

    2019-06-26

    #webpack

  • css 命名规范 -- BEM 思想

    2019-06-26

    #css

  • HTML、CSS 和 JS 代码压缩

    2019-06-26

    #webpack

  • scss与sass的区别

    2019-06-26

    #css

  • JS模块规范:AMD、CMD、commonJS、ES6

    2019-06-26

    #es6

  • less 入门

    2019-06-26

    #css

  • 谈谈es6中的module

    2019-06-26

    #es6

  • webpack如何打包图片跟字体

    2019-06-26

    #webpack

  • 学习队列

    2019-06-26

    #数据结构

  • es5 构造函数

    2019-06-26

    #es5

  • 谈谈 js 的 call 和 apply

    2019-06-26

    #es5

  • webpack的热更新以及原理分析

    2019-06-26

    #webpack

  • 谈谈JS中的作用域问题

    2019-06-26

    #es5

  • 浅浅的谈一谈关于Vue 的生命周期

    2019-06-23

    #vue#vue基础

  • Vue的keep-alive用法

    2019-06-23

    #vue#vue基础

  • $attrs 和 $listeners的使用

    2019-06-23

    #vue#vue基础

  • 谈谈 Vue 中 的 computed

    2019-06-22

    #vue#vue基础

  • vue scoped scss 与深度作用选择器 /deep/

    2019-06-21

    #vue#vue基础

  • 前端常见问题和解决方案

    2019-06-20

    #代码规范

  • 谈谈 Vue 中的 自定义指令

    2019-06-20

    #vue#vue基础

  • 谈谈 Vue 中 的 组件

    2019-06-20

    #vue#vue基础

  • vue中is的作用

    2019-06-20

    #vue#vue基础

  • eslint 配置

    2019-06-20

    #代码规范

  • this.$refs 和 this.$el的作用和区别

    2019-06-20

    #vue#vue基础

  • 谈谈Vue中的插槽

    2019-06-19

    #vue#vue基础

  • 谈谈Vue中的递归组件

    2019-06-19

    #vue#vue基础

  • Vue中的provide/inject

    2019-06-19

    #vue#vue基础

  • vue 为什么组件的data要写成返回对象的函数

    2019-06-19

    #vue#vue基础

  • 怎么给 vue 写一个插件

    2019-06-19

    #vue#vue基础

  • 对于Vue这种MVVM设计模式的理解

    2019-06-19

    #vue#vue基础

  • 谈谈 vue 中 的 mixins

    2019-06-19

    #vue#vue基础

  • 谈谈 template 解决的痛点

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue.component

    2019-06-19

    #vue#vue API

  • 谈谈 vue.directive

    2019-06-19

    #vue#vue API

  • 谈谈 vue.extend

    2019-06-19

    #vue#vue API

  • 谈谈 vue.filter

    2019-06-19

    #vue#vue API

  • Vue给对象新增属性(使用Vue.$set())

    2019-06-19

    #vue#vue API

  • 谈谈 Vue.nextTick

    2019-06-19

    #vue#vue API

  • 谈谈Vue中单元素/组件的过渡

    2019-06-19

    #vue#vue基础

  • $slots 跟 $scoped-slots 的对比

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue中的函数式组件

    2019-06-19

    #vue#vue 选项

  • 谈谈el

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue中的watch

    2019-06-19

    #vue#vue基础

  • 谈谈Vue中的render函数

    2019-06-19

    #vue#vue 选项

  • 在 vue-router 中利用钩子函数调用vuex中的数据

    2019-06-19

    #vue-router

  • 谈谈Vue的实例方法/生命周期

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue 中的配置项 inheritAttrs

    2019-06-19

    #vue#vue 选项

  • vue中'. native'修饰符的使用

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue的指令以及事件修饰符

    2019-06-19

    #vue#vue 选项

  • vue comments

    2019-06-19

    #vue#vue 选项

  • vue 实例属性

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue的指令

    2019-06-19

    #vue#vue 选项

  • 谈谈model以及v-model指令

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue-router 中的 router

    2019-06-19

    #vue-router

  • 谈谈Vue的实例方法/属性

    2019-06-19

    #vue#vue 选项

  • 谈谈 $parent, $children

    2019-06-19

    #vue#vue 选项

  • 谈谈 extends 和 mixins

    2019-06-19

    #vue#vue 选项

  • vue-router 中的 router-view

    2019-06-19

    #vue-router

  • Vue Router path 中通配符

    2019-06-19

    #vue-router

  • vue-router Router 构件项

    2019-06-19

    #vue-router

  • vue-router 中的 <router-link>

    2019-06-19

    #vue-router

  • 谈谈vue-router中的redirect

    2019-06-19

    #vue-router

  • vue-router的hash模式和history的区别

    2019-06-19

    #vue-router

  • vue-router的$route

    2019-06-19

    #vue-router

很惭愧<br><br>只做了一点微小的工作<br>谢谢大家