前端知识点八

80 阅读1分钟

71、vuex

  1. state 全局状态
  2. getters 缓存属性
  3. mutations 同步函数,修改状态,commit
  4. actions 异步函数,更新 mutations,dispatch
  5. modules 模块分割

72、async、await、generator

// promise版本 版本自执行函数
function run (Generator) {
  var hw = Generator();
 const  next = (query)=>{
   var aa = hw.next(query)
   if(!aa.done){
    aa.value.then(next) 
   }else{
     return true
   }
 }
 next()
}
function* fib(max) {
  var t,
  a = 0,
   b = 1,
  n = 0;
  while (n < max) {
    yield a;
    [a, b] = [b, a + b];
    n ++;
  }
  return;
}
var f = fib(5);
console.log(f.next()); // {value: 0, done: false}
console.log(f.next()); // {value: 1, done: false}
console.log(f.next()); // {value: 1, done: false}
console.log(f.next()); // {value: 2, done: false}
console.log(f.next()); // {value: 3, done: false}
console.log(f.next()); // {value: undefined, done: true}
  1. await 必须放在async function中
  2. await 是 async wait的简写,await会将代码放入promise中,执行完毕之后,返回resolve(data), 并将之后的代码放入then函数中
  3. 转换 await 为 yield 、转换 async 为 Generator
  4. async await 实际上是由 generator + yield 控制流程 + promise 实现回调
  5. 利用generator遍历器生成器函数的分段执行 ,只有在遍历器对象 执行next方法之后交出了控制权 ,在完成后 callback || promise.then()里面调用下一次next的时候又继续恢复控制权这个功能来实现的

73、webpack常用的一些模块以及功能

  1. style-loader:将CSS添加到DOM的内联样式标签style里
  2. css-loader:允许将CSS文件通过require的方式引入,并返回CSS代码
  3. less-loader:处理less
  4. sass-loader:处理sass
  5. postcss-loader:用postcss来处理CSS
  6. file-loader:分发文件到output目录并返回相对路径
  7. url-loader 和 file-loader 类似,但是当文件小于设定的limit时可以返回一个Data Url
  8. html-minify-loader:压缩HTML文件
  9. babel-loader:把ES6文件转换成ES5文件
  10. webpack-dev-server: 开发时使用,静态服务器,并且有热更新等功能。
  11. compression-webpack-plugin: 生产环境时可选择让代码压缩gzip.
  12. html-webpack-plugin : 生成index.html 并自动注入打包后的js css 等
  13. definePlugin: 可以生成配置常量。编译时就有的常量。
  14. extract-text-webpack-plugin: 提取使用文件的css 组成一个或多个css 文件。
  15. uglifyjs-webpack-plugin: 删除警告,压缩代码等。

74、常用的设计模式有哪些

  1. 单例模式
  2. 工厂模式
  3. 观察者模式
  4. 发布订阅模式
  5. 代理人模式

75、不使用比较运算符,计算出较大值

max = (a+b+Math.abs(a-b))/2 min = (a+b-Math.abs(a-b))/2

76、如果上一层就是根root了,em和rem等价么?

等价

77、websocket

const socket = new WebSocket('ws://localhost:8080');
//方法
socket .send("Hello server!");      //发送数据
socket .close();              //关闭链接
//事件函数     open   message error close
socket.addEventListener('open', function (event) {
    socket.send('Hello Server!');
});
socket.addEventListener('message', function (event) {
    console.log('Message from server ', event.data);
});
socket.addEventListener('error', function (event) {
    console.log('Message from server ', event.data);
});
socket.addEventListener('close', function (event) {
    console.log('Message from server ', event.data);
});
//属性
事件绑定等价于属性函数执行 操作
socket.onclose = function (event) {
    console.log('Message from server ', event.data);
}

78、重排重绘

  1. 重绘不一定需要重排,重排必然会导致重绘
  2. 重绘是在一个元素的外观被改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
  3. 导致重排,增加、删除节点,改变元素位置、尺寸
  4. 批量修改dom可以先让父级元素脱离文档流,然后进行添加批量dom元素,然后在进行显示,脱离文档流增删元素,不会引起回流
  5. 文档片段是一个轻量级的document对象,它设计的目的就是用于更新,移动节点之类的任务,而且文档片段还有一个好处就是,当向一个节点添加文档片段时,添加的是文档片段的子节点群,自身不会被添加进去。

不同于第一种方法,这个方法并不会使元素短暂消失造成逻辑问题。

79、HTML5的离线储存怎么使用

Web App是通过浏览器来访问的,其中web app中的一些资源并不经常改变,不需要每次都向服务器发送请求。通过把需要离线缓存储的文件列在一个manifest配置文件中。这样在离线情况下也可以使用app。

<html manifest="sample.appcache"> 
在服务器添加mime-type text/cache-manifest

80、原生ajax过程

var xhr = new XMLHttpRequest();
xhr.open(‘get’,’http://www.example.com’); 
xhr.send();
xhr.onload = function () {
  //xhr.responseText 获取服务器端的响应数据 
  console.log(xhr.responseText);  
}