自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

行至水穷处,坐看云起时。

  • 博客(92)
  • 资源 (1)
  • 收藏
  • 关注

原创 SkCanvs渲染原理

本文介绍,在浏览器中,调用SkCanvas的接口,背后实际做的事情。相关的类SkCanvasSkCanvas是Skia的绘图上下文,它提供了一个绘图接口,封装了所有对设备进行的绘图操作。实现图形剪切和变换。维护变换矩阵和裁剪等操作的堆栈等。SkCanvas包含了一个设备的引用,它知道将图形绘制到哪里。SkCanvas和SkPaint共同提供了在SkSurface或SkBaseDevice进行绘制操作所需的状态。SkCanvas使用SkPaint为每个绘制操作提供绘制所需的,诸如颜色,文本si

2021-11-24 23:34:09 1302

翻译 Blink是如何工作的

概述Blink开发并不简单。对于Blink开发新手,不简单是因为,为了实现一个非常快的渲染引擎,已经引入了许多Blink特定的概念和编程约定。即使对于经验丰富的 Blink 开发人员来说,这也并不容易,因为 Blink 非常庞大,而且对性能、内存和安全性极为敏感。本文旨在从“3千米”高空视角来描述“Blink如何工作”,希望能够帮助Blink开发者快速熟悉Blink的架构:本文档不是关于Blink细节构成和编码规则(可能变动与过时)的手册、指南。相反,该文档简明地描述了 Blink 的基本原

2021-06-26 15:31:13 1817

翻译 bindings

在计算机编程中,对库或操作系统的绑定是一个API(application programming interface),它提供在给定编程语言中使用某个库或服务的桥接代码(glue code)。Binding通常指把某样东西映射为另一样东西。在软件库上下文,binding就是桥接两种编程语言的wrapper库,这样就可以使用其它语言编写的库。许多软件库是使用像C,C++这种系统编程语言写的。要在另一...

2019-10-02 12:57:09 1751

原创 加密视频

加密视频加密视频是经过加密的,播放的时候需要经过用户认证,然后在线获取解密密钥,才能进行播放。加密视频基础概念EMEEncrypted Media Extensions是一个W3C规范,属于HTMLMediaElement的扩展,定义了一组API,使得Web应用可以控制加密内容的播放。相关的术语Key System: 密钥系统是解密机制或/和内容保护提供者的通用...

2019-10-02 12:25:19 2206

原创 退出Android应用

怎么样退出我们的App呢?一般的做法是调用Activity.finish(),同时会触发onStop(), onDestroy()。其实我们的程序并没有真正退出,只是停止运行,进入后台保存到内存中。可以通过长按Home健检查。何时退出,一般由Android系统决定,当需要回收内存时,而且我们的App是最久没有使用的,就会被kill掉,回收内存。 当然也可以通过killProcess的方式退出,这样

2015-12-24 09:45:35 616

原创 浏览器架构

如何开发一个浏览器浏览器的最主要的功能概括起来就是,加载显示网页。怎么样使我们的应用具备这样的功能呢? 最简单的就是利用Android WebView(以Android OS为例),还有CEF(Windows/Linux/Mac OS)。 加载显示网页背后其实是一个很复杂的过程:从服务器获取主文档解析主文档,执行js脚本加载子资源对页面进行渲染排版显示页面每一步都是一个很复杂的过程,

2015-11-23 14:04:29 2066

原创 Web SQL Database

概要Web SQL Database,中文一般翻译为“本地数据库”,是一组网页API,网页可以利用来存储数据在数据库中,并通过各种SQL进行查询。 Web SQL Database曾经在W3C推荐规范上,但The W3C Web Applications Working Group在2010年已经终止了在该规范上的工作,它最终没成为一个推荐标准。规范工作只所以终止,是因为陷入了一个僵局:所有的实现

2015-11-13 17:33:20 1400

翻译 Chromium开发者生命周期

了解Chromium开发流程

2015-09-30 18:00:38 1244

原创 Thread, Looper, Handler

Runnable代码一个可执行的命令,通常用于在另一个线程执行一段代码。定义了一个方法run(),要在线程执行的代码就放在run()里面,当线程启动时,会调用run(),run()执行完毕之后,线程就结束了。Runnable时一个抽象类,可以从字面理解,凡是要在一个不同线程执行一段代码的类都需要继承Runnable。 像下面这样的用法实际上没有什么意义:new Runnable() { @

2015-09-28 14:05:05 651

原创 git基础

git基础git是什么git是一个分布式版本控制系统,我们熟悉的svn是一个集中式的版本控制系统。分布式意味着每一台运行git的电脑既可以是客户端,也是“服务器”,客户端存储的数据与服务器存储的数据没有什么差别(同步后)。git与svn使用方法比较类似,但差别很大。其中一个比较大的差别是:svn等集中式版本控制系统一般是基于某个版本存储变化的数据,而git是存储各个时间点的完整镜像,如果某个文件没有

2015-09-20 15:29:28 606

原创 Chromium主文档加载流程

往下走,到了网络层。网络层加载流程如下:更详细一点的图:每个资源对应一个ResourceLoader

2015-05-07 08:56:12 1428

原创 Chromium线程模型、消息循环

多线程的麻烦多线程编程是一件麻烦的事,相信很多人深有体会。执行顺序的不确定性,资源的并发访问一直困扰着众多程序员。解决多线程编程问题的方法分为两类:一是对并发访问的资源直接加锁;二是避免并发访问资源;Chromium采用第二种思想来设计多线程模型,通过在线程之间传递消息来实现跨进程通讯。设计原则Chromium希望尽量保持UI处于响应状态。为此遵循如下设计原则:1

2015-03-06 09:03:17 3342

翻译 Chromium学习指引

面对复杂如操作系统的一个工程,我们应该如何学习,学习什么,从哪里入手?下面是一篇学习指引:关于Chromium code base,有许多需要学习的,宏观层次比如:进程及其相互之间的关系,IPC如何工作,URL加载流程;微观层次比如:智能指针,消息循环,线程用法,线程模型,string等的使用指引。学习Chromium的“行为处事”:编码风格:http://www.chromium.o

2015-03-06 08:50:28 1963

原创 HTML 历史项接口

浏览器窗口有一个history对象,用来保存浏览历史。提供了如下接口用来操作历史项:back() :后退,相当于点击后退按钮forward(): 前进,相当于点击前进按钮go(n): 移动到指定页面 -- n是一个相对位置go(-1) :相当于后退go(0):相当于刷新当前页面HTML5 为history对象添加了两个新方法,history.pushState()和hi

2014-12-26 11:39:18 793

原创 MemoryCache学习

这里(http://blog.csdn.net/wy5761/article/details/41869599)有对MemoryCache的整体介绍。本文说一说MemoryCache核心的部分。     MemoryCache是webkit加载网页的庞大机制 -- Loader的一部分。Webkit采用了缓存机制,发起一个请求时,请求顺序经过一系列的Cache,在每层都会查找请求对应的资源是否

2014-12-11 23:44:05 1734

翻译 MemoryCache

MemoryCache模块是负责网页加载的一个庞大机制,loader的一部分。这里(https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/)可以了解更多。本文只谈Memory Cache,以及它内部的一些组件,不涉及到与loader的交互。你可以在MemoryCache.h中找到关于MemoryCache是什么

2014-12-11 17:27:17 5224

原创 webkit加载

关于webkit加载的文章网上很多,各种类型、各种角度的都有,有的说的很细。我的体会是,光看那些文章收获不大,可能看看就忘了。想要理解或记住些东西还是得亲自跟踪调试一下才行。可以先通过浏览一些文档来建立一个基本的概念,比一来就跟代码要好。大概的流程是这样的,请求一个资源一般包括如下步骤:1 创建一请求,涉及到的类主要有:ResourceRequest, ResourceRequ

2014-10-23 09:15:32 842

原创 pcap2har

概述pcap2har: 把.pcap网络抓包文件转换为HTTP Archive file(HAR),是一个开源项目,使用python开发,依赖dpkt库(http://code.google.com/p/dpkt/),githup地址:https://github.com/andrewf/pcap2har。可以通过简单的运行如下命令来使用该程序:main.py  my.pcap my.

2014-09-24 16:56:08 2461

原创 webkit智能指针 - RefPtr, PassRefPtr

历史2005年之前,Webkit中很多对象都采用引用计数的方式。它们通过继承RefCounted】类模板来实现这种模式。RefCounted主要是实现了ref()和deref()两个函数。在需要引用对象时要调用ref()增加引用计数,在不再需要对象时,要调用deref()函数减少引用计数。ref()和deref()需要成对出现。这和使用new/delete一样,多调用、少调用、没调用的问题

2014-09-06 22:36:58 1654

原创 一个简单的正则表达式匹配器

下面的代码实现如下语法

2014-08-28 11:18:38 1089

原创 webkit 子资源加载流程

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

2014-07-16 15:38:51 1380

翻译 十种常用的缓存替换算法

Least-Recently-Used(LRU) - 最近最少使用替换掉最近被请求最少的文档。这一传统策略在实际中应用最广。在CPU缓存淘汰和虚拟内存系统中效果很好。然而直接应用与代理缓存效果欠佳,因为Web访问的时间局部性常常变化很大。Least-Frequently-Used(LFU) - 最不经常使用替换掉访问次数最少的。这一策略意图保留最常用的、最流行的对象,替换掉很少使用的那些。

2014-06-05 09:46:22 6161 1

原创 网页访问性能

一般用户眼中,网页访问就是快与慢。下面做一些定量分析。网页加载时间包括DNS查询时间、连接建立时间、响应时间、网页下载时间。各不分占比如何?与时间段的关系?影响因素是什么?

2014-05-17 21:57:38 1326

原创 手机上的RAM, ROM,SD Card

上面是某手机的标题,关键字是 RAM, ROM。在PC时代,RAM,ROM代表存储器的类型。对于手机上的这两个概念,一直不怎么理解。下面从非专业角度进行介绍。RAM先从它们最初的概念说起。RAM是随机存储器,它有如下特点:随机存储。什么是随机存储呢?就是可以随意访问任何地方,成本是一样的。古老的磁带是顺序存储器。磁盘可以说是半随机存储器,一方面它可以实现随机访问,另一方

2014-04-30 22:25:43 1479

原创 后缀树

后缀树是一种树型数据结构,使用后缀树可以快速解决很多字符串相关的问题,功能非常强大。很多文章在说到后缀树时,都会首先提及Tries树。实际上Tries是一种简单版本的后缀树,后缀树也可以说是压缩后的Tries树。总而言之,Tries树和后缀树有很多相似之处,后缀树在时间效率和空间效率都比Tries树要好,不过后缀树相应的就很难理解。很多介绍后缀树的文章都难免让初学者陷入混乱。

2014-04-01 23:41:47 2837 1

翻译 Web Caching -- 简述

web caching 是什么?高速缓冲存储器(存储器)是非常靠近CPU的存储器,例如和CPU在同一块芯片上,以允许快速访问。类似的,磁盘缓存(a disk cache)是为了快速访问而用于存储频繁访问的磁盘页面(disk pages)的内存。Web caching 是靠近用户的web对象的存储,以提供快速访问,从而改善网络浏览者的用户体验。诸如网页(HTML本身),网页上的图片,等就是Web

2014-03-21 21:16:43 1825

翻译 web性能入门

高性能浏览器网络 --> 第三部分 HTTP --> 第十章 web性能入门在一个复杂系统中,性能优化过程主要在于弄明白系统的独立子系统和层次之间的交互,它们各自都有自己的一系列限制和局限因素。之前,我们已经分别详细探讨了许多网络组件 -- 不同的物理传输方法和传输协议 -- 现在我们可以把我们的注意力转到更大的,web性能优化的端到端层面。在一个复杂系统中,性能优化过程主要在于弄明白系统的独立子系统和层次之间的交互,它们各自都有自己的一系列限制和局限因素。之前,我们已经分别详细探讨了许多网络组

2014-03-20 20:51:57 1651 2

原创 字典树(Tries)

概念Tries树,又称键树,字典树或查找树。用来存储字符串的一种树形结构。它有三个基本性质:1 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2 从根节点到某个一个节点,路径上经过的字符连接起来,为该节点对应的字符串。3 每个节点的子节点包含的字符都不相同。假设,我们有这些单词,hello, he, she, abc, aha, ok, abcd,对其构造字典

2014-03-18 00:11:59 4778 1

原创 HTTP缓存

缓存的作用简言之,就是加快访问速度,节约带宽。这是基于这样一个事实,很多重复访问的网页在一段时间(几秒到几天,甚至几个月)内保持不变。把之前访问的副本保存起来,下次访问同一个文档时,直接使用缓存中的副本作为响应。这样就不会有网络时延,不会有流量的消耗。能够给用户提供即时体验。要解决的问题缓存哪些文档?缓存多久?怎样确定缓存的副本是有效的?缓存哪些文档

2014-03-12 22:03:33 1209

翻译 WebKit的页面缓存 -- Page Cache

Page Cache概述你可能更熟悉其它浏览器对Page Cache的叫法。Firefox称之为"Back-Forward Cache" 或 "bfcache"。Opera则叫做"Fast History Navigation"。我们最近开始把WebKit的实现叫做"Page Cache",以减少同"Back/Forward List"的混淆。注意,Page Cache是一个终

2014-03-11 21:28:02 3281

翻译 WebKit如何加载网页

在能够渲染一个网页之前,WebKit需要把该网页和它的子资源从网络上下载下来。从网络上加载资源涉及到很多层次。本文将重点解释WebKit的主要的渲染组件,WebCore,是如何参与加载过程的。WebKit包含两条加载线,主文档加载(加载文档到frames中)和子资源(images and scripts)加载。下图总结了两条加载线所涉及的主要对象。Loading Frame

2014-03-07 12:37:44 1483

翻译 RefPtr and PassRefPtr基础 -- WebKit中的引用计数

历史在WebKit中,很多对象采用了引用计数。使用的模式是,通过类成员ref和deref来增加和减少引用计数。每一个ref调用必须有一个相应的deref。当一个对象的引用计数是1时,在其上调用deref将会删除该对象。在WebKit中,很多类是通过继承RefCounted类模板来实现这种模式的。早在2005年,我们发现有太多内存泄露了,尤其是在HTML编辑代码中,这是由于对ref和dere

2014-03-06 21:47:45 1139

原创 win7&vs2013编译webkit

Windows上编译WebKit是件折腾人的事情。看了几篇编译攻略,各种修改,各种配置,完全想放弃的节奏。而且每个人的环境不一样,同样的步骤,不一定能成功。最新的Nightly Builds支持用Visual Studio 2013(vs2013)编译,如果用vs2005, vs2010, vs2008来编译最新的Nightly Builds是会比较麻烦,建议用vs2013编译。一般而言,大部

2014-03-05 23:32:25 1662 2

原创 Linux DNS

Linux DNS组成Linux DNS可以分为几个部分:传统DNS, mDNS, DNS缓存传统DNS这就是我们通常理解的DNS,通过UDP 53端口向某个DNS服务器发送DNS查询请求,在DNS响应中返回与查询主机对于的IP地址mDNS它的作用是,使得程序在没有传统DNS服务器的局域网中也能够有效解析域名,这样就可以在局域网通过主机名访问主机

2014-02-19 14:21:52 2636 2

翻译 HTTP简史

高性能浏览器网络 --> 第三部分 HTTP --> 第9章 HTTP简史    HTTP是因特网上最广泛和普遍采用的应用协议之一:它是客户端与服务器之间共同的语言,造就了今天的web网络。HTTP诞生之初,只是简单作为一种关键字导航路径,现在它不仅仅用于浏览器,而是几乎被所有连网软件和硬件应用所采用。本章,我们将对HTTP协议的进化史做一个简要概括。关于各种各

2014-02-17 23:55:10 1097

原创 word文档组织 - 多级列表

word文档组织 - 多级列表    作为一个攻城狮,很怕写文档。其实就像写字,我写的字很难看,所以不想写字。但如果文档写出来很漂亮,那也是一件很有成就感的事。稍微花点时间了解下,那也不是件难事。也许可以稍微克服写文档的工具感。不过也许更多的是觉得写文档太浪费时间,想要急于实现,那是题外话~ 先不谈文档中加公司Logo,Confidential水印等。一个文档主要包括,封面

2014-02-15 14:24:10 1449

原创 Android NDK入门

NDK安装ndk的安装是很直接的访问 http://developer.android.com/tools/sdk/ndk/index.html ,从Downloads列表中选择适合你平台的NDK包解压下载的NDK包解压完成后,NDK文件放在一个叫做android-ndk-的目录中。你可以改变它的名称,也可以把它移动到任何地方。设置环境变量NDK指向ndk目录。   打开~

2014-02-13 22:12:28 1155

翻译 无限网络性能 -- 移动网络优化

首先,通过长连接把延迟减到最小,把你的服务器和数据放在地理上离用户近的地方,优化你的TLS部署,还有我们曾经谈到的所有其它协议优化,这些对移动应用来说尤为重要,延迟和吞吐量总是很珍贵。类似的,所有Web应用性能的最佳实践也同样适用,第10章会谈到。然而,移动网络对我们的性能策略有一些新的、特定的要求。由于设备环境限制(the form factor of the device)、无线接

2014-02-05 14:02:59 3631

翻译 无线网络简介

Chapter 5. Introduction to Wireless Networks无处不在的连接(Ubiquitous Connectivity)过去十年一个最具革命性的技术是无处不在的连接的可用性和不断增长的期望。无论你是收发电子邮件,还是进行语音会话,网页浏览,等等,现在,我们都期望能够随时随地访问这些在线服务:跑步时,排队时,在办公室,在地铁上,飞机上,以及其它任何地方。今

2014-01-23 21:42:38 1843 2

翻译 高性能浏览器网络之网络部分 -- Building Blocks of TCP

Building Blocks of TCP -- 题目怎么翻译呢? TCP构建块? 深入浅出TCP?认识TCP?---------------------------------------------------------------------------------------第二章 Building Blocks of TCP互联网的核心是两个协议,IP和TCP。IP(

2014-01-18 23:08:39 1878

配置Openfire开发环境需要的coherence(coherence.jar, coherence-work.jar, tangosol.jar)

配置Openfire开发环境需要的coherence(coherence.jar, coherence-work.jar, tangosol.jar)包

2013-10-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除