最新要闻
- 简讯:招标活动法律保障工作实务指南 2016年版
- 锐龙7 7800X3D配A620主板 性能损失多少?实在没想到
- 天天微头条丨成都升温 千足虫满街爬:专家科普小心毒臭液
- 全球最大盗版电子书网站Z-Library被封后复活:路子更野了!要共享纸质书
- 速读:Steam排名第一!GTX 1650亮机卡火爆断货:RTX 2070紧急变身救场
- 天天速递!只剩Windows版了!B站正式宣布UWP版停止维护
- 环球时讯:洛阳上演汉服秀 网友偶遇唐僧师徒四人坐地铁去“取经”
- 男子体内惊现小树苗!都长到5厘米高了
- 环球今亮点!或为AR眼镜新品!小米神秘“新礼物”明早10点正式亮相
- 今热点:解放军环台岛战备警巡和演习,专家:或成惩戒“台独”新模式
- 每日动态!小米寄修服务“史诗级”提升:新增进度可视化功能
- 今日报丨朗新科技:拟提前赎回“朗新转债”
- 今日观点!男子网购耐克鞋却挂着李宁的吊牌 网友:联名款?
- 超同年漫威大片近3倍!新海诚《铃芽之旅》国内票房达7亿
- 环球新消息丨上海国创科技产业创新发展中心理事长黄岩:人工智能会像手机一样进入我们的日常生活
- 每日聚焦:青春回来了!电影《灌篮高手》流川枫角色预告出炉:4月20日国内上映
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日速讯:WebKit三件套(1):WebKit之WebCore篇
导语:
(资料图片)
Chrome浏览器的代码量其实是非常庞大的,要想对其有深入的理解,仅仅编译编译调试调试,是很难深入下去的。让我们还是从其主要部分如多进程管理通信、WebKit、V8、Skia、WinHttp、Sanbox等着手分析其主要流程及数据结构,或许能达到事半功倍的效果,而WebKit是其中非常重要的一部分,是Chrome的核心引擎部分,其他部分都是基于它来集成的,深入了解了WebKit,对Chrome的理解就会迎刃而解,再说WebKit作为一个相对独立的浏览器引擎在Safari、iPhone、Adobe AIR等中都有应用,非常值得大家深入的研究研究。就像前面的文章所说,WebKit主要包括三个部分WebCore、JavascriptCore、Ports
Javascript的实现(JavaScriptCore)
布局渲染的实现(WebCore)
外接口的支持(ports)
WebKit作为一个浏览器引擎,其相对于Gecko而言一个较大的特点就是便于移植,嵌入到其他程序中,目前大家已了解使用WebKit引擎的应用包括Safari、iPhone、Chrome、Android、Nokia S60 Browser及KDE QT4.4等,同时还有其他方面的移植如Gtk、wxWidget、3D等,可以说WebKit从架构上讲其Port移植方面的设计及应用,是非常优秀的
让我们先从WebCore部分出发吧
WebCore所包含的主要内容
从源代码目录结构来看
WebCore目录主要包括如下目录:
bindings 包含将Dom Binding给JavascriptCore方面的代码,同时包含依据idl接口描述文件,自动生成对应于JavascriptCore的Binding实现的脚本等内容;
bridge主要包含NPPlugin方面的接口访问等内容;
css主要包括与css方面相关的内容如解析、不同css规则的定义与实现、css Binding给JS的接口定义等内容;
dom主要包括dom方面相关的内容如不同dom元素的定义与实现、dom Binding给JS的接口定义等内容;
html主要包括html方面相关的内容如不同html元素的定义与实现、HTMLTokenizer及HTMLParser等内容;
loader主要包括装载资源如html页面、css、js及image等方面内容;
page主要包括描述一个Web页面所涉及的内容如page、frame、frameview、frametree、setting、history、chrome、chromeclient等内容;
rendering主要包括如何使用样式,组织布局、显示html元素等方面内容;
plugins主要包括浏览端如何实现NPPlugin方面的内容;
svg主要包括与svg方面相关的内容;
xml主要包括与xml方面相关的内容如xml parser、XPath、XSLT等;
platform主要包括与不同平台或外部库相关的内容如graphics(图形输出方面)、network(网络处理方面)、image-decoders(解析不同图片格式方面)等;
主要数据结构
为了更加简单有效的描述浏览网页的内容及过程,WebKit为了明显区分不同方面的内容,采取了不同的namespace如webcore、javascriptcore、webkit等,webcore方面的主要数据结构有:
webcore::page、webcore::frame、webcore::FrameLoader、webcore::FrameView、Document、DOMWindow、KJSProxy、DocumentLoader、ResourceHandle、ResourceRequest、ResouceResponse、MainResourceLoader、RenderObject、RenderView等;主要数据结构描述如下:
WebView及WebFrame与page、frame之间的关系
FrameLoader、DocumentLoader、DocLoader类结构
主要Document类结构
FrameView类主要结构
总的说来,WebCore包含了浏览器引擎的核心部分如处理html、dom、css、svg、获取资源、渲染页面过程控制、回调/通知外壳程序以及与Javascript实现的Binding等等;
一个Http请求在WebCore中的主要流程
1、当调用webkit_web_view_open(url)时会触发
core(webView)->mainFrame()->loader()->load(uri)(即调用FrameLoader.load)来发起一个Http页面请求;
FrameLoader.load方法的主要处理过程如图:
2、一旦发起ResourceHandle::start,就会由网络库向web服务器发起一个http请求;
3、而MainResourceLoader作为一个ResouceHandleClient,提供了诸如didReceiveData()、didReceiveResponse()等回调接口以供网络库调用,一旦从web服务器获得相关数据后网络库部分则会调用相关接口如didReceiveData等;
4、MainResouceLoader::didReceiveData的主要回调处理过程如下图:
5、通过回调didReceiveData()方法,进而调用Node.attach()方法,这样就会解析生成document,同时会创建frameview、domwindow等;
6、创建的frameview会触发layoutTimerFired时间Timer,进而调用layout()方法,从而触发RenderObject的创建、布局等,同时或许会invalidateRect,进而触发操作系统图形库的paint消息事件;
7、由程序主消息处理循环接收paint消息事件,进而获取对应frame,获取或创建GraphicContext,然后调用frame->view()->paint(&ctx,...),从而触发对应RenderObject树进行重画处理,这样一个完整的页面就会逐步的显示出来。
网络库、图形库、Javascript实现与WebCore的集成
为方便扩展及模块化,WebCore在处理浏览页面的过程中,往往使用了类似java或gecko中接口的概念,一般先定义一组公共接口或基类,然后由不同模块来实现。
如网络处理部分由WebCore提供一个ResourceHandle类,而在不同的目录如cf、curl、qt、soup、win等中在不同网络库的支持下对ResourceHandle类提供不同的实现,待编译时择机选择对应目录下的实现,这种方式从架构的角度看比较简单,但往往不能让程序同时使用多个网络库,进而由程序动态切换使用不同网络库实现,而gecko在xpcom的基础上提供了对于这种扩展形式的支持;其中Chrome对ResouceHanle类的实现基于WinHttp网络库。
同样WebCore对图形库的集成,也是采取这种方式来实现,如由WebCore提供一个GraphicsContext类,然后在不同的目录如cairo、cg、qt、win、wx中在不同的图形库支持下对GraphicsContext提供不同的实现。其中Chrome对GraphicsContext类的实现基于Skia图形库。
WebCore中实现的dom、html、svg、css等,往往需要通过一定的方式输出给Javascript的实现如JavascriptCore、V8,以便JS Engineer能认识这些dom元素等,并且能调用其中的方法,这种方式叫做Binding,为了便于将WebCore中相对固定的dom、html、svg、css接口等极其方便的Binding出去,WebKit使用了极其高效及神奇的方式来实现。
首先定义一组非标准的idl接口,然后通过运行一组perl脚本如generate-bindings.pl、CodeGenerator.pm、CodeGeneratorJS.pm等,就可根据idl接口定义,生成一组符合指定Javascript实现规则的脚本对象类。这样极大的减轻了开发人员的投入及编码错误的发生。
这一点与gecko中将不同的xpcom接口Binding给Javascript实现有本质上的差别,在gecko中通过xpconnect及一组classinfo来维护原生元素与JS对象之间的关系,不同原生元素对应的JS对象的创建及属性方法的Binding完全依赖于xpconnect的实现及classinfo的定义,要添加删除修改Binding的属性与方法,只需修改classinfo;而WebKit中Binding,相对简单明了,不同原生元素对应的JS对象的属性与方法由idl接口文件来定义,而具体实现则交给威力强大的generate-bindings.pl来对应生成实现的代码,这样编译时就可以轻松实现Binding。
参考资源:
浅谈WebKit之JavaScriptCore/V8篇http://ourpgh.blogspot.com/2008/09/webkitjavascriptcorev8.html
https://webkit.org/
转载本站文章《WebKit三件套(1):WebKit之WebCore篇》,请注明出处:https://www.zhoulujun.cn/html/webfront/browser/webkit/2021_0421_8630.html
关键词:
-
每日速讯:WebKit三件套(1):WebKit之WebCore篇
webKit作为一个相对独立的浏览器引擎在Safari、iPhone、AdobeAIR等中都有应用,非常值得大家深入的研究...
来源: 每日速讯:WebKit三件套(1):WebKit之WebCore篇
焦点关注:C盘爆满的解决方法,不用删除文件,使用分区助手无损增加内存
简讯:招标活动法律保障工作实务指南 2016年版
锐龙7 7800X3D配A620主板 性能损失多少?实在没想到
天天微头条丨成都升温 千足虫满街爬:专家科普小心毒臭液
全球最大盗版电子书网站Z-Library被封后复活:路子更野了!要共享纸质书
速读:Steam排名第一!GTX 1650亮机卡火爆断货:RTX 2070紧急变身救场
【天天速看料】Vue——patch.ts【十四】
浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战
Vue开发规范
天天速递!只剩Windows版了!B站正式宣布UWP版停止维护
环球时讯:洛阳上演汉服秀 网友偶遇唐僧师徒四人坐地铁去“取经”
男子体内惊现小树苗!都长到5厘米高了
环球今亮点!或为AR眼镜新品!小米神秘“新礼物”明早10点正式亮相
今热点:解放军环台岛战备警巡和演习,专家:或成惩戒“台独”新模式
天天通讯!Linux常用操作命令总结
iOS Modern Collection View
线段树好题! P2824 [HEOI2016/TJOI2016]排序 题解
每日动态!小米寄修服务“史诗级”提升:新增进度可视化功能
天天资讯:第7章_InnoDB数据存储结构
天天快报!css过去及未来展望—分析css演进及排版布局的考量
每日关注!微信小程序 开发,uni-app 开发简介
今日报丨朗新科技:拟提前赎回“朗新转债”
今日观点!男子网购耐克鞋却挂着李宁的吊牌 网友:联名款?
数组的算法
超同年漫威大片近3倍!新海诚《铃芽之旅》国内票房达7亿
VUE-Antd开发,validate规则校验第一次为空,后面无论怎么输入都显示不可为空
环球新消息丨上海国创科技产业创新发展中心理事长黄岩:人工智能会像手机一样进入我们的日常生活
每日聚焦:青春回来了!电影《灌篮高手》流川枫角色预告出炉:4月20日国内上映
世界今亮点!暴雪战网遭遇DOSS攻击!多款游戏无法正常登录
世界聚焦:2023年3月随笔暨第1季度总结
世界热资讯!ASP.NET Core MVC 从入门到精通之接化发(一)
【全球聚看点】快速幂算法
私有化部署chatGPT,告别网络困扰
新车一超过60km/h就耳朵疼 车主:找了20多个人开都如此
Win11新版最快5月推送:微软确认Moment 3更新
【全球热闻】富二代开保时捷碰瓷:专挑开豪车酒驾的敲诈 “赚了”30多万
聚焦:五粮液董事长曾从钦:在“时与势”中勇担使命,在“稳与进”中拓展空间,在“个与众”中升级维度
今年1号台风“珊瑚”下周或生成 预计2023年登陆我国的台风至少6个
夏日必备!楠木之舟EVA拖鞋19.9元:轻盈高回弹
男士洗脸专属大牌 妮维雅控油、祛痘洗面奶大促:不到20
世界最新:ChatGPT火爆 元宇宙房产崩盘!林俊杰买虚拟地产浮亏91%
岚图汽车1V4 “开火”保时捷、蔚来、奥迪、极氪!结果尴尬:无一车企回应
环球实时:4月09日10时江苏南通疫情最新消息 4月09日10时江苏南通今日确诊人数
让民生福祉更有“数”——中国电子政务论坛聚焦数字政府建设
【天天播资讯】为啥国产电动车在欧洲不好卖?海外汽车大V给出5点原因
环球热讯:今天国际护胃日 年轻人为啥会被胃癌盯上?胃病转向胃癌有5个信号
全球今头条!通用自动驾驶汽车撞上公交车 300辆无人出租车被召回
沙尘暴蓝色预警来了:北方将迎沙尘天气!官方分享防御指南
“码农”劳动争议频发 厘清责任依法“护体”
焦点快播:存碰撞风险!特斯拉美国召回422辆Model 3:前悬架连杆有隐患
新资讯:朱晓彤 总算升职了!将在特斯拉墨西哥工厂获得一张新床
环球资讯:有人用ChatGPT月入十万了!70+款免费AI工具大搜罗
每日热门:sip消息拆包原理及组包流程
每日聚焦:超2250万台(套)各型装备投入春耕—— 农机化支撑粮食稳产增产
微头条丨小米14曝光:屏幕边框窄到没朋友 华星供货
贝克汉姆回复王濛大胆表白 感谢你的赞美:后者曾公开表示因为帅喜欢他
【天天时快讯】选台式机还是游戏本?13代酷睿旗舰处理器性能PK
环球报道:传音Tecno Camon 20 Premier曝光:天玑1200、五边形镜组
天天看点:广东白云技师学院短训班专业设置_广东白云技师学院
今日热讯:Vulnhub Bravery靶机 Walkthrough
焦点观察:69岁成龙说我还能打还能跳:是个奇迹
1999元神机诞生!Redmi Note 12 Turbo成了:用户好评率接近100%
天天快消息!Golang常用库之UUID
如何成为一名优秀的工程师?顶级程序员的5点建议
全球报道:曾称失控都是踩错单踏板!网友晒特斯拉新OTA 想要的制动恢复两档可选
全球播报:女子乘高铁把脚放前排乘客头上:狡辩称”鞋底不脏“
天天快资讯丨碱性食物有哪些_十大碱性食物排名
.Net Core Console&Generic HostBuilder
用阳光代替WiFi信号连网 沙特科学家这成果亮了
世界热点!【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(下)
世界速讯:电影《龙马精神》上映!刘德华清唱生日快乐歌祝福成龙
全球微动态丨连休5天!五一劳动节期间高速公路免费通行
口感自然 富含矿物质:依能天然苏打水2.3元(京东4元)
每日热议!博主带秤在淄博连逛10家店无缺斤少两:他很佩服
天天速递!投资者为何对苹果AR/VR设备没有信心?原因揭开
常州市天宁区人民检察院对一起拟不起诉案件公开听证
java -- 异常处理、Collection、Iterator迭代器、泛型
CentOS7-实现全网备份脚本
【天天报资讯】装机成本降了! 微星A620M-E主板到手799元:锐龙7 7800X3D绝配
关注:国宝熊猫回家记:丫丫要回来了
四川一麦田成网红打卡地:遭游客踩踏
windows提权
4799元 AOC新款27英寸电竞显示器上架:360Hz高刷、1ms响应
环球热议:没用的知识增加了!一图了解劳斯莱斯全部车型:最贵1.8亿
【天天速看料】王者荣耀镜取什么名字(王者镜的名字好听)
贵了2块钱 海底捞回应火锅小料涨价:门店自主定价
天天短讯!撤档一年半后 《超能一家人》定档7月21日:沈腾爆笑喜剧大片
时讯:科大讯飞刘聪:中国造大模型或在某些领域超越ChatGPT
世界视讯!pWnOS2
当前热文:python中shutil和shutil库的用法
Spring源码阅读系列--全局目录
今热点:郑州这些户籍室“周末无休”,周六日也能办理业务→
高校凌晨发录取通知要求半小时回复引热议 专家:不合理 好比半夜鸡叫
一口鲜气!春光0糖椰汁狂促:优惠30元到手仅需19.9
热资讯!定制纪念礼品瓷盘
MQ——消息积压如何处理
全球观点:Python 元编程
C++ 并发编程实战 第二章 线程管控
全球微速讯:gazebo小车模型(附带仿真环境)