Open xiaobaifeng opened 4 years ago
首先,JavaScript是一门单线程的非阻塞的脚本语言:用来与浏览器交互。 单线程:在执行代码时,只有一个主线程来处理所有任务。 非阻塞:当代码进行异步任务(需要耗费时间才能返回的任务)时,主线程会挂起这个任务, 然后在异步任务返回结果时再执行相应的回调。
同步代码: 当我们调用方法时,js会生成与之对应的执行环境(context),当一系列方法被依次调用时,其他方法会被排队在一个叫“执行栈”的地方;当这个执行环境中的代码执行完毕并返回结果后,js会退出执行环境并销毁,回到上个执行环境。反复进行直到代码全部执行完毕。
异步代码 JavaScript遇到一个异步事件后,不将这个事件挂起,继续执行其他同步代码,当异步事件返回结果时,JS会将他加入另一个队列——(事件队列)。等执行栈的所有任务执行完毕,主线程处于闲置的时候,主线程会去查找事件队列是否有任务。如果有,取第一个事件放入执行栈中,执行其中的同步代码。 而异步任务之间并不相同,他们的执行优先级有区别。不同的异步任务会被分为两类:微任务(micro task)和宏任务(macro task). 宏任务:setInterval(),setTimeout(). 微任务:new promise(),new MutaionObserver(); 主线程空闲的时候会先去查看微任务队列是否有事件存在,如果存在就会一次对微任务队列依次调用,直到为空。然后其宏任务队列依次执行,进入循环。 微任务永远在宏任务之前执行。
箭头函数导致 this 总是指向函数定义生效时所在的对象。
使用CDN服务的网站,只需将其域名的解析权交给CDN的负载均衡设备,CDN负载均衡设备将为用户选择一台合适的缓存服务器,用户通过访问这台缓存服务器来获取自己所需的数据。 由于缓存服务器部署在网络运营商的机房,而这些运营商又是用户的网络服务提供商,因此用户可以以最短的路径,最快的速度对网站进行访问。因此,CDN可以加速用户访问速度,减少源站中心负载压力。
复习
event loop
描述
首先,JavaScript是一门单线程的非阻塞的脚本语言:用来与浏览器交互。 单线程:在执行代码时,只有一个主线程来处理所有任务。 非阻塞:当代码进行异步任务(需要耗费时间才能返回的任务)时,主线程会挂起这个任务, 然后在异步任务返回结果时再执行相应的回调。
执行栈和事件队列
同步代码: 当我们调用方法时,js会生成与之对应的执行环境(context),当一系列方法被依次调用时,其他方法会被排队在一个叫“执行栈”的地方;当这个执行环境中的代码执行完毕并返回结果后,js会退出执行环境并销毁,回到上个执行环境。反复进行直到代码全部执行完毕。
异步代码 JavaScript遇到一个异步事件后,不将这个事件挂起,继续执行其他同步代码,当异步事件返回结果时,JS会将他加入另一个队列——(事件队列)。等执行栈的所有任务执行完毕,主线程处于闲置的时候,主线程会去查找事件队列是否有任务。如果有,取第一个事件放入执行栈中,执行其中的同步代码。 而异步任务之间并不相同,他们的执行优先级有区别。不同的异步任务会被分为两类:微任务(micro task)和宏任务(macro task). 宏任务:setInterval(),setTimeout(). 微任务:new promise(),new MutaionObserver(); 主线程空闲的时候会先去查看微任务队列是否有事件存在,如果存在就会一次对微任务队列依次调用,直到为空。然后其宏任务队列依次执行,进入循环。 微任务永远在宏任务之前执行。
this
箭头函数导致 this 总是指向函数定义生效时所在的对象。
函数防抖和节流
所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间
所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。
缓存
磁盘缓存和内存缓存
web前端性能优化之CDN
在网站和用户之间引入CDN之后,用户不会有任何与原来不同的感觉。
使用CDN服务的网站,只需将其域名的解析权交给CDN的负载均衡设备,CDN负载均衡设备将为用户选择一台合适的缓存服务器,用户通过访问这台缓存服务器来获取自己所需的数据。 由于缓存服务器部署在网络运营商的机房,而这些运营商又是用户的网络服务提供商,因此用户可以以最短的路径,最快的速度对网站进行访问。因此,CDN可以加速用户访问速度,减少源站中心负载压力。