发表于: 2019-10-22 21:11:25
1 864
今日完成的事
把困扰多天的代码综合合好了,制作消息列表的小红点
明日计划的事
把前台样式写完
收获
了解了下jscore,首先事webkit内核,WebKit由多个重要模块组成,
简单点讲,WebKit就是一个页面渲染以及逻辑处理引擎,前端工程师把HTML、JavaScript、CSS作为输入,经过WebKit的处理,就输出成了我们能看到以及操作的Web页面。从上图我们可以看出来,WebKit由图中框住的四个部分组成。而其中最主要的就是WebCore和JSCore(或者是其它JS引擎),除此之外,WebKit Embedding API是负责浏览器UI与WebKit进行交互的部分,而WebKit Ports则是让Webkit更加方便的移植到各个操作系统、平台上,提供的一些调用Native Library的接口,比如在渲染层面,在iOS系统中,Safari是交给CoreGraphics处理,而在Android系统中,Webkit则是交给Skia。
WebCore
可以发现只有WebCore是红色的。因为时至今日,WebKit已经有很多的分支以及各大厂家也进行了很多优化改造,唯独WebCore这个部分是所有WebKit共享的。WebCore是WebKit中代码最多的部分,也是整个WebKit中最核心的渲染引擎。那首先来看看整个WebKit的渲染流程
首先浏览器通过URL定位到了一堆由HTML、CSS、JS组成的资源文件,通过加载器(这个加载器的实现也很复杂,在此不多赘述)把资源文件给WebCore。之后HTML Parser会把HTML解析成DOM树,CSS Parser会把CSS解析成CSSOM树。最后把这两棵树合并,生成最终需要的渲染树,再经过布局,与具体WebKit Ports的渲染接口,把渲染树渲染输出到屏幕上,成为了最终呈现在用户面前的Web页面。
JSCore
。JSCore是WebKit默认内嵌的JS引擎,之所以说是默认内嵌,是因为很多基于WebKit分支开发的浏览器引擎都开发了自家的JS引擎,其中最出名的就是Chrome的V8。这些JS引擎的使命都相同,那就是解释执行JS脚本。而从上面的渲染流程图我们可以看到,JS和DOM树之间存在着互相关联,这是因为浏览器中的JS脚本最主要的功能就是操作DOM树,并与之交互。
相比静态编译语言生成语法树之后,还需要进行链接,装载生成可执行文件等操作,解释型语言在流程上要简化很多。这张流程图右边画框的部分就是JSCore的组成部分:Lexer、Parser、LLInt以及JIT的部分(之所以JIT的部分是用橙色标注,是因为并不是所有的JSCore中都有JIT部分)。接下来我们就搭配整个工作流程介绍每一部分,它主要分为以下三个部分:词法分析、语法分析以及解释执行。
websocket和长短轮询的区别
1.轮询就是定时发送请求,响应请求
2.长轮询,定时就是发送请求,响应请求,客户端接收到响应后,继续发送请求,从而达到不间断.
3.socket就是发出请求,标识这个请求为长连接,服务端知道后,以后就不需要客户端发送请求,服务端就可以向客户端推送数据.
http 长连接(tcp 连接可复用)
1)介绍:http协议 目前有两个版本:1.1 和 1.0;区别是 1.1支持 长连接(普遍使用http1.1版本),长连接也叫做持久连接(keep-alive);而1.0不支持长连接,在1.0版本下,每个http请求响应后都会关闭tcp连接,下一次http请求会重新建立http连接;
2)http 长连接:多个http 请求共用同一个 tcp 连接,这样可以减少相邻多次 http请求导致的 tcp连接建立和关闭的资源消耗;http1.1 在请求头和响应头中用 connection 字段标识 该http连接是否是 长连接,即connection: keep-alive 表示长连接;而 connection: closed 表明服务器关闭tcp 连接;
3)keep-alive:与 connection 相对应的是 keep-alive,其属性有 timeout=30 和 max=5 分别是 两次 http 请求 保持的时间,max表示这个tcp 连接最多被几个 http 请求重用;
评论