webkit 子资源加载流程

一个网页由主文档和子资源组成。主文档描述网页的框架,布局。子资源是组成网页的子元素,包括图片、CSS、JS等。为了显示网页,先要把资源加载到内存。加载就是指把需要的资源加载到内存这一过程。Webkit用到很多缓存机制,加载可能是从网络加载,也可能是从本地缓存加载。Webkit的加载分为两条线,一条是主文档的加载,一条是子资源的加载。

首先需要解析主文档才知道用到哪些子资源。但并不一定要等到解析完主文档才加载子资源,也可能是边解析边加载子资源,即受到部分主文档就开始解析,解析到某个子资源就开始加载。

下面以加载一个图片资源的过程为例说明子资源的加载过程。

解析主文档时发现需要一个Image资源,然后通知ImageLoader加载Image资源。ImageLoader通知CachedResourceLoader发送加载请求。Loader首先查询MemoryCache是否有该资源,没有则创建一个CachedImage代表该资源。接着通过ResourceLoaderScheduler调度加载请求。ResourceLoaderScheduler创建一个SubresourceLoader实例来完成加载请求(create->init->sendRequest)。ResourceHandle负责与平台相关的接口进行交互,发送请求和平台相关层,从平台相关层取回数据。在Android平台上,加载请求通过ResourceHandle传递到Webkit,在Webkit层又涉及到很多类。首先查询http 缓存是否有该资源,没有则发送网络请求。数据回来后,通过各种回调传递到Webcore中。

完成一个资源的加载,涉及到数十个类。可谓相当复杂。

webkit 子资源加载流程

时间: 2024-10-10 17:20:40

webkit 子资源加载流程的相关文章

chromium kernel资源加载、解析、三树合成浅析(chromium39)

每次尝试去看看chromium kernel中具体逻辑的实现的时候,都会费一些时间去看代码,找逻辑.当然了,网上很多资料可以参看,但是每次看完这些资料,我都会要问一问:确实如此么?新版本的kernel是否这块逻辑更改了呢? 所以,为了让自己释惑,还是要亲自去看源码,一点点查看调用堆栈.然后再能在整体上理解下kernel的原理. 最近了看了看chromium kernel中,blink kernel part的网页的加载.html解析.以及三树(Dom tree. Render Tree.Rend

WebKit加载流程 - 概述

之前写了几篇加载流程的说明,是从下向上看,有点只见树木不见森林的感觉.经过最近一段时间的学习,有了能加以概括抽象的方法. WebKit加载流程和页面组成是直接相关的,页面就是WebKit要加载的对象.所以WebKit负责加载的类也与负责页面管理的类相对应.Apple关于WebView的说明里清楚表现了页面视图上的MVC结构: 一个页面从元素上也有其层次结构,并且和加载类对应,如下: 从页面元素上讲WebView代表了一个页面的呈现,对应一个Page. 一个Page包含一个或多个Frame,其中一

Webkit资源加载介绍

一.webkit资源分类 webkit中有多种资源,大致分为以下几种: HTML文本 CSS样式文本 - CachedCSSStyleSheet 字体 - CachedFont 图片 - CachedImage 只读资源 - CachedRawResource JavaScript文本 - CachedScript SVG - CachedSVGDocument 视频字幕 - CachedTextTrack XSL样式表 - CachedXSLStyleSheet 类图如下: HTML文本是网页

chromium网络资源加载分析(一) 主资源加载逻辑分析

最近花了点时间看了看chromium加载网页的逻辑.由于这段内容较为复杂,现在只看了一部分.现将主资源的加载记录下来. 注:下面提到的文件,如果没有指明目录,则在third_party/WebKit目录下 1. ContentViewCore执行loadUrl之后,经过一些逻辑(这些逻辑比较简单,这里不做介绍),最终会走到:render_frame_impl.cc的方法:RenderFrameImpl::OnNavigate 该方法中,有代码:frame->loadRequest(request

cocos2dx资源加载机制(同步/异步)

首先cocos2dx里的资源,有png,plist(pvr),exportjson(json)大致这三类,我们也从这3类去研究相应的加载代码. 本次代码分析基于: cocos2dx3.2 1.png png格式的资源,从sprite作为一个切入口来分析,一般Sprite的创建如下 Sprite* Sprite::create(const std::string& filename) 参数filename,是图片资源的路径. 内部调用的initWithFile Sprite *sprite = n

android源码解析(十七)-->Activity布局加载流程

好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与android中另外一个很重要的组件Service最大的不同,但是这个展示的界面的功能是Activity直接控制的么?界面的布局文件是如何加载到内存并被Activity管理的?android中的View是一个怎样的概念?加载到内存中的布局文件是如何绘制出来的? 要想回答这些问题,我们就需要对android的界面加载与绘制流程有所了解,这里我们先来学习一下Act

Chrome设计文档-多进程资源加载

原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个renderer进程的网络访问 Browser process可以在进程间管理session状态,保持其一致性 Browser process可以针对每个host管理最大链接数 概述 作为一个多进程应用,Chrome分为三层.最底层的是webkit库,它主要负责页面渲染工作.之上是渲染进程Rendere

【原创】我所理解的资源加载方式

最近转战unity3d,接的第一个任务就是关于资源管理的部分. 由于项目是web和standalone(微端)并存的,所以希望保证业务逻辑尽量保持一致,跟之前ios,android的执行流程略有不同,比如在web模式下,FILE类是被禁用的,所以指望通过写文件来操作相关功能参数的方法是不可行的.下面,是我对这方面的一些理解.本文中如果没有特殊说明,下载的资源都是AssetBundle web程序的运行流程大致是 首先加载web.html,这是整个程序的入口 他会加载相关的unity3d文件(本例

Chromium多进程资源加载

webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 多进程 资源的实际加载在各个WebKit Port中有不同的实现.Chromium采用的是多进程的资源加载机制 根据带有资源缓存机制的资源加载过程,在ResourceHandle类之下的部分,是不同的移植对获取资源的不同实现. 在Chromium中,获取资源的方式是利用多进程的资源加载架构.如下图,描述了 关于 Chromium