当前位置: 首页 > Web前端 > HTML

各方收集的前端知识点并不完善

时间:2023-03-27 23:03:46 HTML

1。为什么js是单线程的答:主要是实现用户与浏览器的交互,对dom进行操作;这就决定了它只能是单线程的,否则会带来非常复杂的同步问题。(跟历史原因关系比较大)二、WebWorker使用场景解答:1、解决页面卡顿问题。2.利用多核CPU提升js性能。答:1、如果是消耗主线程性能的程序。考虑使用网络工作者。可以防止页面卡住。答:让js多线程。然而,使用webworker技术的多线程有很多局限性。例如,所有新线程完全由主线程控制,不能独立执行。这意味着这些“线程”实际上应该属于主线程的子线程。另外,这些子线程没有执行I/O操作的权限,只能和主线程分担一些计算等任务。所以严格来说,这些线程并不具备完整的功能,因此这项技术并没有改变javascript语言的单线程特性。3.一句话概括Webworker、Serviceworker和workletWorklet是浏览器渲染流程中的钩子,让我们在浏览器渲染线程中拥有底层的权限,比如样式、布局等。ServiceWorker是浏??览器和网络之间的代理。通过拦截文档中发送的请求,serviceworker可以直接请求缓存中的数据,达到离线操作的目的。Webworkers是脚本,其一般目的是让我们从主线程卸载密集处理。4.事件循环,EventLoop答:执行栈中遇到异步任务时,js会把这个事件添加到事件队列中。放入事件队列后不会立即执行其回调,而是等待当前执行栈中的所有任务执行完毕。,取出事件队列先执行回调同步代码....如此循环。4.1宏任务和微任务以下事件属于宏任务:setInterval()setTimeout()以下事件属于微任务和微任务队列。当当前执行栈执行完毕后,立即处理microtask队列中的所有事件,然后从macrotask队列中取出一个事件。在同一个事件循环中,微任务总是在宏任务之前执行。5、JavaScript、Node.js和V8的关系答:Node.js是用在服务端,封装了谷歌V8引擎(应用于谷歌Chrome浏览器),让js可以在服务端执行。6、强缓存和协商缓存浏览器首先检查强缓存,看它的cache-control是否过期。什么是缓存控制?存在于响应头ResponseHeaders中;控制强制缓存的逻辑;例如:Cache-Control:max-age=31536000(单位为秒)。如果强缓存过期,它将命中协商缓存。协商缓存有时间戳和字符串两种类型:请求头:If-Modified-Since/If-None-Matchresponse头:Last-Modified/Etag7。http和https的区别主要看在tcp的三次握手和四次挥手下,ssl/tls加密过程http可以使用udp协议,不一定所有tcp都知道(知道)8.观察者模式和发布-订阅模式观察者模式:使用需要引入target和target,Publish-subscribe模式:Subscribe和publish是解耦的,可以自定义对应的publish事件来触发不同。发布订阅模式更加灵活,是观察者模式的进阶版,指定对应的分发。观察者模式维护单个事件对应依赖于该事件的多个对象关系;发布和订阅维护多个事件(主题)和依赖于每个事件(主题)的对象之间的关系;观察者模式是目标对象直接触发通知(所有通知),被观察对象强制接收通知。发布-订阅模式多了一个中间层(事件中心),负责管理通知广播(只通知订阅相应事件的对象);观察者模式的对象有很强的依赖性,真正解决发布-订阅模式下对象之间的耦合。9.ES6综合总结constlettemplateliteralarrowfunctionparameterdefaultvaluefunctionfun(params=1){}spread/restoperatorleta=[1,2,3,4]functionfun1(a){log(a)}fun1(...a)//[1,2,3,4]函数fun2(...a){log(a)}fun2(1,2,3,4)//[1,2,3,4]28base0b2base0o8baseobjectsuperclass可以在objectsuperFor...offor...inclasssymbolMapSetobjectarraystructure10.ReactJSX和virtualDOM核心原理解析什么是virtualDOM?为什么要使用虚拟DOM?如何将JSX转换为虚拟DOM?如何渲染虚拟DOM?ReactDiffing(O(n**3)=>O(n))不同类型(即标签名、组件名)的元素会生成不同的树;通过设置key属性来识别同一层级的一组子元素在渲染前后是否保持不变。解决阻塞问题时间片:可以暂停和恢复的更新;可跳过的重复和覆盖更新;优先更新。10.箭头函数与普通函数的区别就在于此,call、apply、bind不能改变它们的指向。没有自己的参数,它们就不能用作构造函数,也没有自己的原型。