You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
koa被认为是第二代node web framework,它最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型。koa和koa2中间件的思路是一样的,但是实现方式有所区别,koa2在node7.6之后更是可以直接用async/await来替代generator使用中间件,本文以最后一种情况举例。
DOM 构建: 最后,由于 HTML 标记定义不同标记之间的关系(一些标记包含在其他标记内),创建的对象链接在一个树数据结构内,此结构也会捕获原始标记中定义的父项-子项关系:HTML 对象是 body 对象的父项,body 是 paragraph 对象的父项,依此类推。
js执行,会堵塞GUI渲染线程,
koa的洋葱模型实现
koa被认为是第二代node web framework,它最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型。koa和koa2中间件的思路是一样的,但是实现方式有所区别,koa2在node7.6之后更是可以直接用async/await来替代generator使用中间件,本文以最后一种情况举例。
当程序运行到await next()的时候就会暂停当前程序,进入下一个中间件,处理完之后才会仔回过头来继续处理。也就是说,当一个请求进入,#1会被第一个和最后一个经过,#2则是被第二和倒数第二个经过,依次类推。
实现
koa的实现有几个最重要的点
当我们app.use的时候,只是把方法存在了一个数组里。
服务端是如何做路由分发
操作系统 - 磁盘寻道调度算法
FIFO
先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。
先来先服务算法(FCFS)
这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
最短寻道时间优先算法(SSTF),
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
扫描算法(SCAN)(电梯调度算法)
循环扫描算法(CSCAN)
常见进程间通信(IPC)方式
从输入 URL 到页面渲染经历了什么
5个主要步骤
1 DNS 查询
2 TCP 连接
3 HTTP 请求即响应
4 服务器响应
5 客户端渲染
浏览器渲染分五个步骤
处理 HTML 标记并构建 DOM 树。
处理 CSS 标记并构建 CSSOM 树。
将 DOM 与 CSSOM 合并成一个渲染树。
根据渲染树来布局,以计算每个节点的几何信息。
将各个节点绘制到屏幕上。
cdn解析:浏览器缓存=》本机缓存
建立tcp连接: 检查是否强缓存/协商缓存
请求资源html的解析(词法分析和语法分析
css和js文件的请求和解析
构建的DOM树和cssom树结合生成render tree
构建对象模型
js执行,会堵塞GUI渲染线程,
渲染层合并
setTimeout setImmediate process.nextTick的区别
链接
Node.js的event loop及timer/setImmediate/nextTick
/process.nextTick
process.nextTick()方法的操作相对较为轻量,每次调用Process.nextTick()方法,只会将回调函数放入队列中,在下一轮Tick时取出执行。定时器采用红黑树的操作时间复杂度为o(lg(n)),而nextTick()的时间复杂度为o(1)。相较之下,process.nextTick()更高效。
setImmediate()方法和process.nextTick()方法十分类似,都是将回调函数延迟在下一次立即执行。
区别
1、process.nextTick中回调函数的优先级高于setImmediate
原因在于事件循环对观察者的检查是有先后顺序的,process.nextTick属于idle观察者,setImmediate属于check观察者。在每一轮循环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者。
多个process.nextTick语句总是一次执行完,多个setImmediate则需要多次才能执行完。
2、在实现上,process.nextTick的回调函数保存在一个数组中,setImmediate则保存在一个链表中
3、setImmediate可以使用clearImmediate清除,process.nextTick不能被清除。
观察者优先级
在每次轮训检查中,各观察者的优先级分别是:
idle观察者 > I/O观察者 > check观察者。
idle观察者:process.nextTick
I/O观察者:一般性的I/O回调,如网络,文件,数据库I/O等
check观察者:setImmediate,setTimeout
setTimeoout和setImmiediate谁快?
在一个异步流程里,setImmediate会比定时器先执行
同样在最外层的,需要看情况。
node.js里面setTimeout(fn, 0)会被强制改为setTimeout(fn, 1)
我们发现关键就在这个1毫秒,如果同步代码执行时间较长,进入Event Loop的时候1毫秒已经过了,setTimeout执行,如果1毫秒还没到,就先执行了setImmediate。每次我们运行脚本时,机器状态可能不一样,导致运行时有1毫秒的差距,一会儿setTimeout先执行,一会儿setImmediate先执行。但是这种情况只会发生在还没进入timers阶段的时候。
http2对比websocket
vue3
性能:
编译模板的优化(PatchFlag:告知我们不光有TEXT变化,还有PROPS变化(id)。这样既跳出了virtual dom性能的瓶颈,又保留了可以手写render的灵活性。 等于是:既有react的灵活性,又有基于模板的性能保证。
事件监听缓存:cacheHandlers
开启cacheHandlers会自动生成并缓存一个内联函数,“神奇”的变为一个静态节点。 Ps:相当于React中useCallback自动化。
The text was updated successfully, but these errors were encountered: