施工中
坑点
- Service Workers 目前还没有被授予访问 cookie 的能力,viahttps://github.com/WICG/cookie-store/issues/37、https://github.com/w3c/ServiceWorker/issues/707、https://github.com/w3c/ServiceWorker/issues/837。所以通过 session 鉴权的页面可能会出现异常。
施工中
基本类型
继承实现
macrotask 和 microtask
事件循环每次只会入栈一个 macrotask ,主线程执行完该任务后又会先检查 microtasks 队列并完成里面的所有任务后再执行 macrotask。
macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
microtasks: process.nextTick, Promises, Object.observe, MutationObserver
https://juejin.im/entry/58d4df3b5c497d0057eb99ff
https://stackoverflow.com/questions/25915634/difference-between-microtask-and-macrotask-within-an-event-loop-context#
Event Loop
浏览器侧
1 | requestAnimationFrame(() => { |
服务端侧,setImmediate 和 setTimeout 触发先后不固定
1 | new Promise((resolve, reject) => { |
原型Function.prototype
和Function.__proto__
都指向Function.prototype
,这就是鸡和蛋的问题怎么出现的。Object.prototype.__proto__ === null
,说明原型链到Object.prototype
终止。
1 | function F() {} |
依赖
数组的方法
1 | arr.slice(); |
不同 TAB 页下通讯
BroadcastChannel,Chrome54、Firefox38 Support
1 | // tab1 |
Shared Workers,Chrome、Firefox29 Support
1 | // work.js |
localStorage
1 | // tab1 |
window.opener
最近在做一个媒体播放器,集成了图片+音频播放模式和视频播放模式,研究了下 js audio 对象的事件,整理了相关事件及触发顺序。
音频的初始加载事件顺序:依次触发 onloadstart
、onprogress
、onsuspend
,然后 onprogress
、onsuspend
交替触发,直到触发 ondurationchange
、onloadedmetadata
、onloadeddata
、oncanplay
、oncanplaythrough
,加载完成。
点击播放后触发事件顺序:onplay
、onplaying
、ontimeupdate
,播放控件开始缓冲部分音频文件onprogress
,缓冲足够多的音频片段后触发onsuspend
,当缓冲即将播放完后又触发onprogress
、onsuspend
,依次循环直到音频全部缓冲完毕。
音频播放完毕后触发:onpause
、onended
暂停播放控件时触发:onpause
从暂停恢复播放后触发:onplay
、onplaying