promise 异步
Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数:
resolve :异步操作执行成功后的回调函数
reject:异步操作执行失败后的回调函数
let p = new Promise((resolve, reject) => { //异步回调 setTimeout(() => { console.log('执行完成'); resolve('我是成功'); }, 2000); });
Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且只返回一个实例,那个输入的所有 promise 的 resolve 回调的结果是一个数组。这个的 resolve 回调执行是在所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候。它的 reject 回调执行时,只要任何一个输入的 promise 的 reject 回调执行或者输入不合法的 promise 就会立即抛出错误,并且 reject 的是第一个抛出的错误信息。
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
promise.race()返回一个 promise,一旦迭代器中的某个 promise 解决或拒绝,返回的 promise 就会解决或拒绝。
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value);
// Both resolve, but promise2 is faster
});
在写项目的时候,要注意很多细节,不然会导致性能很差,这里是一小部分建议:
1.减少DOM节点:DOM节点太多影响页面的渲染,尽量减少DOM节点。\n\n3、优化动画\n(1):尽量使用css3动画
(2):合理使用requestAnimationFrame动画代替setTimeout.
2.优化高频事件:scroll、touchmove等事件可导致多次渲染。
(1):函数节流
(2):函数防抖
(3):增加响应变化的时间间隔:减少重绘次数
再有就是:减少重绘和回流,避免不必要的DOM操作,避免使用document.write,减少drawImage,尽量改变class而不是style,使用classList代替className
2、缓存DOM选择与计算:每次DOM选择都要计算和缓存
3、缓存.length的值:每次.length计算用一个变量保存值
4、尽量使用事件代理:避免批量绑定事件
5、尽量使用id选择器:id选择器选择元素是最快的