【专业技术】浏览器内核缓冲机制剖析

编者按:缓存能极大提高用户体验,这一点众所周知,下面我们一起来探究Webkit里面的memorycache。

WebKit将资源分为main resouce和sub resource,并提供了相应的cache机制,来提高用户体验。

main resource的cache为pagecache,主要缓存dom和render tree,用于提高history操作(back/forward)的速度。

sub resource的cache则由MemoryCache管理和维护。下面我简要分析下memorycache的主要数据结构。

WebCore提供了使用主存的cache机制,称之为MemoryCache。MemoryCache中存放的数据为decode后的数据。

图12-1是MemoryCache的数据结构图。

图12-1 MemoryCache数据结构图

CachedResource由HashMap统一管理,其key为resource的url,value为CachedResource对象的指针。每一个CachedResource的data由两种内存管理,一种是data小于segment时,使用vector<char>。当data大于segment时,使用m_segment列表。segment的默认大小定义为4096B,即4K。

CachedResource是个双链表,由LRUList结构体维护。m_allResources负责管理系统的所有LRUList。

MemoryCache将CachedResource分为live和dead两类,并维护一个窗口(默认为95%)。dead resource保留在cache中,直到我们要回收dead resource。当我们主动回收dead resource时,并不释放内存。而是把dead resource标注为Purgeable,并由Purgeable Buffer维护。这样做的好处是显而易见的:减少因回收内存而造成的资源重取过程。

QtWebKit中MemoryCache的默认配置为:

QWebSettings::setObjectCacheCapacities((16*1024*1024) / 8, (16*1024*1024) / 8, 16*1024*1024);

访问MemoryCache的接口为WebCore::memoryCache()。

转自:http://m.blog.csdn.net/blog/onecoolx_11109/24415591

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

USpider~一只超级污的司机蜘蛛

之前就看到了狂放小朋友的PHP版本的污言爬虫,然后我就征求了一下小朋友的意见,就改成了Python版本的爬虫,也算是当做练手了

1192
来自专栏安恒网络空间安全讲武堂

MOCTF WEB 题解

0x00 MOCTF平台是CodeMonster和Mokirin这两支CTF战队所搭建的一个CTF在线答题系统。网址是http://www.moctf.com/...

7309
来自专栏MixLab科技+设计实验室

设计师编程指南之Sketch插件开发 1

发现网上关于sketch插件开发的指南太少了,而且都不一定可以成功运行,于是我就写了这个系列的文章: 1 我们需要了解的语法特点 sketch 是基于 Coc...

5168
来自专栏美团技术团队

Node.js Stream - 进阶篇

在构建较复杂的系统时,通常将其拆解为功能独立的若干部分。这些部分的接口遵循一定的规范,通过某种方式相连,以共同完成较复杂的任务。譬如,shell通过管道|连接各...

3964
来自专栏高性能服务器开发

(六)关于网络编程的一些实用技巧和细节

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的...

3577
来自专栏小鹏的专栏

tf API 研读5:Data IO

数据IO {Data IO (Python functions)} 一个TFRecords 文件为一个字符串序列。这种格式并非随机获取,它比较适合大规模的数...

1896
来自专栏一枝花算不算浪漫

[Java面试七]Mybatis总结以及在面试中的一些问题.

46314
来自专栏北京马哥教育

Python安全运维实战:针对几种特定隐藏方式的Webshell查杀

作者:北门喂猫 来源: http://www.freebuf.com/articles/web/131350.html Webshell一直都是...

2623
来自专栏Java帮帮-微信公众号-技术文章全总结

大文件拆分方案的Java实践【面试+工作】

大文件拆分问题涉及到io处理、并发编程、生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一些共性...

1974
来自专栏Java 源码分析

Netty 入门

1. 粘包问题 一 .长连接与短连接: 1.长连接:Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。长连接在 net...

2925

扫码关注云+社区