-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
前端基础面试题 #11
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Debounce 和 Throttle 防抖 节流
HTML5、CSS3、ES6(es2015)新特性总结
https://zhuanlan.zhihu.com/p/78661051
es2020(ES11)新特性
小知识点
pointer-events: none
transform:translateZ(0)
getBoundingClientRect
react fiber react hook
JS 异步解决方案的发展历程以及优缺点
Advanced-Frontend/Daily-Interview-Question#11
回调函数(callback)
Promise
Generator
4 Async/await
浏览器 多进程 多线程 js单线程
JavaScript是单线程的,但是JavaScript的执行环境不是单线程的,如浏览器、nodejs
event loop至少包含两个队列,macrotask队列和microtask队列
Macrotask
Macrotasks 包含了解析 HTML、生成 DOM、执行主线程 JS 代码和其他事件如 页面加载、输入、网络事件、定时器事件等。从浏览器的角度,Macrotask 代表的是一些离散的独立的工作。
常见应用
setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
Microtasks
Microtasks 则是为了完成一些更新应用程序状态的较小的任务,如处理 Promise 的回调和 DOM 的修改,以便让这些任务在浏览器重新渲染之前执行。Microtask 应该以异步的方式尽快执行,所以它们的开销比 Macrotask 要小,并且可以使我们在 UI 重新渲染之前执行,避免了不必要的 UI 渲染。
常见应用
process.nextTick, Promises, Object.observe, MutationObserver
Ajax请求 和 web worker 同样是开了额外线程 ,区别呢
Ajax也是系统单独开了一个线程去执行的网络请求
浏览器虽然会在一个单独的线程去进行网络请求,但是我们是通过传递一个回调的方式去处理数据,浏览器在网络请求成功后,然后会切换回js线程来执行我们的回调,也就是说我们所有的js代码都是在js线程中运行的。所以javascript确实是在一个单线程中
而web worker不同,我们的js代码可以运行在js主线程之外,这也是为什么不能在web worker里面直接共享js主线程中定义的变量,不能操作ui (dom树)的原因,因为根本不在一个线程
总体的执行顺序为:常规代码 -> promises -> events 和 setTimeout 等
The text was updated successfully, but these errors were encountered: