0%
Vuex 数据流管理及Vue.js 服务端渲染(SSR)
使用 NuxtJS 实现 RealWorld 全部功能 https://demo.realworld.io/#/
要求:发布码云上,可以直接展示网页
搭建自己的SSR、静态站点生成(SSG)及封装 Vue.js 组件库
Vue.js 源码剖析-响应式原理、虚拟 DOM、模板编译和组件化
手写 Vue Router、手写响应式实现、虚拟 DOM 和 Diff 算法
开发脚手架及封装自动化构建工作流
一、简答题
1、Webpack 的构建流程主要有哪些环节?如果可以请尽可能详尽的描述 Webpack 打包的整个过程。
- 根据用户在命令窗口输入的参数以及 webpack.config.js 文件的配置,得到最后的配置。
- 根据上一步得到的最终配置初始化得到一个 compiler 对象,注册所有的插件 plugins,插件开始监听 webpack 构建过程的生命周期的环节(事件),不同的环节会有相应的处理,然后开始执行编译。
- 根据 webpack.config.js 文件中的 entry 入口,开始解析文件构建 AST 语法树,找出依赖,递归下去。
- 递归过程中,根据文件类型和 loader 配置,调用相应的 loader 对不同的文件做不同的转换处理,再找出该模块依赖的模块,然后递归本步骤,直到项目中依赖的所有模块都经过了本步骤的编译处理。编译过程中,有一系列的插件在不同的环节做相应的事情,比如 UglifyPlugin 会在 loader 转换递归完对结果使用 UglifyJs 压缩覆盖之前的结果;再比如 clean-webpack-plugin ,会在结果输出之前清除 dist 目录等等。
- 递归结束后,得到每个文件结果,包含转换后的模块以及他们之间的依赖关系,根据 entry 以及 output 等配置生成代码块 chunk。
- 根据 output 输出所有的 chunk 到相应的文件目录。
开发脚手架及封装自动化构建工作流
ES 新特性与 TypeScript、JS 性能优化
函数式编程与JS异步编程、手写Promise
简答题
- 谈谈你是如何理解 JS 异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务?
javascript 为了实现浏览器页面的交互,不得不使用单线程的方式渲染页面,以保证 dom 可以被正确的渲染。然而单线程就以为着浏览器有多个任务的时候需要排队依次执行,这样就会造成阻塞。event loop 主线程从消息队列中读取事件,这个过程是一直重复循环的,所以整个机制被称作 event loop。消息队列是暂时存放异步任务的地方,我们的异步代码会存放到消息队列中,等到同步代码执行完毕以后,event loop 会从消息队列中依次取出异步任务放到调用栈中再次执行。宏任务可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。微任务可以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前 task 任务后,下一个 task 之前,在渲染之前。