理解WebKit和Chromium: Chromium插件和扩展基础
转载请注明原文地址:http://blog.csdn.net/milado_nju
##概述
插件和扩展是一种扩充浏览器功能的技术,在之前我们介绍过NPAPI插件技术,在Chromium中,远远不只是这一种技术,这里面包括PPAPI机制,NativeClient技术和Extension机制。这些新技术极大的扩展了浏览器的能力,下面逐次来介绍它们。限于篇幅,这里只是简单介绍一下它们的基础知识,详细的内容会有专门的文章来介绍它们。
## PPAPI插件
PPAPI的提出是因为NPAPI的可移植性和性能存在比较大的问题,特别是针对跨进程的插件,特别是插件需要2D和3D绘图,声音等问题时候就更为棘手。早期的时候就是要解决这些问题,同时为了赢得插件厂商的支持,尽可能的使用原来NPAPI的接口。现在,随着PPAPI的不断发展,接口不断发生改变。后来,PPAPI也被用在Native Client技术中,之后也被逐渐的修改,直到现在的样子,完整的列表可以查看链接http://code.google.com/p/ppapi/w/list。
那么为什么PPAPI能够提供较高性能的绘图和声音等问题呢?前面我们提到,在现在的NPAPI插件系统中,通常的做法是,当网页需要显示该插件的时候或者需要更新的时候,它会发送一个失效(Invalidate)的通知,让插件来绘制它们。而在PPAPI插件机制,它引入了一个叫做保留(retained)模式,其含义是浏览器始终保留一个后端存储空间用来表示上一次绘制完的区域。这个很有用,因为PPAPI插件通常是跨进程的,所以浏览器可以绘制网页而不需要锁,与此同时插件进程能够在后台绘制新的结果。
PPAPI插件有两种运行模式,受信(trusted)插件和非受信(untrusted)插件。对于受信的PPAPI插件,它可以在Renderer进程中运行,也可以跨进程运行。对于新版本的实现中,架构设计都是基于IPC来设计的。而对于非受信的PPAPI插件则使用NativeClient技术来安全运行它们。对于受信插件,它们是平台相关的,那么可能调用平台相关的接口。而对于非受信插件而言,它们是平台无关的代码,它们调用NativeClient提供的有限接口,而不能调用任意接口,这个后面再介绍。
## Native Client
Native Client是一项运行在PPAPI机制之上的技术,NativeClient,也简称为NaCl,是一种沙箱技术,它能够提供给平台无关的不受信本地代码一个安全运行环境,它是针对那些计算密集型的需求,例如游戏引擎,可视化计算,大数据分析,3D图形渲染等方面的需求,它们指需要访问有限的一些本地接口,这样不需要通过网络服务来计算它们,以免占用额外的带宽资源。它同WebGL,WebAudio这样的技术所解决的问题相似,但是途径不同,因为它们是标准,而NativeClient技术是Google提出的,使用NativeClient能够将很多本地库的能力轻易的提供给网页使用,而不需要复杂的移植过程,给重用带来很大的方便。
本身PPAPI和NativeClient没有必然联系,两者解决的是不同方面的问题,只是目前NativeClient是基于PPAPI接口来实现的,其实之前NativeClient也曾经基于NPAPI接口来实现的,所以能够在Firefox,Safari和Opera浏览器中运行。
因为NativeClient使用PPAPI来提供一个安全的运行环境,本身它也是一个PPAPI插件,下图就是Chrome浏览器中一个PPAPI插件-NativeClient。同其它的PPAPI插件不一样,它是一个在Renderer进程中运行的插件,图中的”Type: PPAPI(in-process)”。
## Extension机制
Chromium的扩展(Extension)机制(为了避免跟通用的“JavaScript扩展机制”产生名字上的混淆,后面一律称为Chromium Extension机制)原先是Chromium推出的一项技术,该机制能够扩展帮助浏览器的能力,例如笔者使用的一个扩展实例名为“switchy proxy”,它可以帮助用户方便的切换Chromium浏览器的代理。为了但是也就仅此而已。本质上,它其实就是浏览器能力的简单扩展,而对于一些本地的功能,例如书签,USB,蓝牙,电源管理等,它并没有这方面的能力。
一个Chromium Extension的实例其实就是一个网页加上JavaScript代码和CSS,当然,在Extension中,开发者也可以使用NPAPI插件和PPAPI及NaCl机制技术来扩展网页能力,所以它同这些技术没有冲突,相反,Extension可能需要这些技术以达到提供一定的功能。
当然,Chromium Extension机制的目标远不只这么简单,扩展浏览器功能的Extension只是其中一个很小的功能。随着该机制的不断发展,Extension机制已经被用来支持Web应用程序,也就是使用HTML5、JavaScript、CSS技术来开发应用程序,使用Chromium浏览器来运行,当然获得用户体验同本地应用程序非常接近。Chromium打造为一个依赖于Web的运行平台,使用扩展机制的网页已经可以称之为Web应用。如果你认为功能还不够,也可以理解为初级阶段,但是它实实在在将网页扩展到web应用的范畴。在Google的Web Store中,读者可以发现其中有两个类别,包括传统的Extension和Web应用。这里面,从用户的角度看,普通扩展和Web应用的区别在于普通插件只是在Extension在当前窗口运行(当然也不是绝对的,但是工作机制的确是不一样),而Web应用是一个独立的窗口。
下图是Chrome浏览器中已经安装的Extensions(Google Docs)和Web应用(Cut theRope),读者可以通过在地址栏输入chrome://extensions/来查看它们。
在目前的Chromium中,对于Web应用,Chromium根据它们的特性分成两类,第一种叫做Host App,另外一种叫做Packaged App。前面一种表示将网络上的资源直接变成一个Web引用,所以它需要使用外部的资源才能够工作,而对于后一种,该Web应用所需要的文件和资源都包含在该应用中,而不需要外部的资源,所以对于那些离线应用特别有用,这感觉更像本地应用。
## 参考资料
1. http://www.chromium.org/developers/design-documents/pepper-plugin-implementation
2. http://www.chromium.org/nativeclient
3. http://www.chromium.org/developers/design-documents/extensions
by yongsheng@chromium.org
理解WebKit和Chromium: Chromium插件和扩展基础的更多相关文章
- 理解WebKit和Chromium(电子书)
前言 基础篇 WebKit, WebKit2, Chromium和Chrome介绍 WebKit和Blink WebKit和Chromium代码目录结构介绍 WebKit和Chromium功能模块 ...
- 理解WebKit和Chromium: 硬件加速之RenderLayer树到合成树
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 在前面的章节中,笔者介绍了WebKit渲染引擎是如何有HTML网页构建DOM树.RenderObject ...
- 理解WebKit和Chromium: 调试Android系统上的Chromium
转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 相信读者已经注意到了,在最新的Android 4.4 Kitkat版本中,原本基于Android Web ...
- 理解WebKit和Chromium: 网页渲染的基本过程
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 前面介绍了一些渲染引擎的功能,包括网络,资源加载,DOM树,RenderObject树等等,但是,给人以 ...
- 理解WebKit和Chromium:Chromium资源磁盘缓存
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 想象一下,如果没有磁盘缓存的世界.当用户访问网页的时候,每次浏览器都需要从网站下载网页,图片,JS等资源 ...
- 理解WebKit和Chromium: Chromium的多进程资源加载机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ##概述 前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移 ...
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrom ...
- 理解WebKit和Chromium: JavaScript引擎简介
转载请注明原文地址:http://blog.csdn.net/milado_nju 1. 什么是JavaScript引擎 什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript ...
随机推荐
- Rx系列二 | Observer | Observable
Rx系列二 | Observer | Observable 上节课我们对RX的一些基本概念和使用JAVA代码实现了一个观察者,但是这只是对思路的一个讲解,在我们JAVA中,其实是已经封装好了观察者对象 ...
- iOS 滚动视图的复用问题解决方案
LazyScroll是什么 LazyScrollView 继承自ScrollView,目标是解决异构(与TableView的同构对比)滚动视图的复用回收问题.它可以支持跨View层的复用,用易用方式来 ...
- PHP Ajax JavaScript Json 实现天气信息获取
使用第三方服务 间接方式 思路 使用到的服务 实现代码 前端完整代码 总结 要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难.今天来介绍几个简单的方法. 使用第三方服务 有 ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Eclipse中设置VM参数
eclipse.ini -Xms256m //设置堆最小值 -Xmx1024m //设置堆最大值 Eclipse 做JVM 的分析时,需要动态设置JVM的参数来进行各种测试, 可以在下图地方进行设置 ...
- 04_关于元数据,ResultSetMetaData对象以及API方法介绍
ResultSetMetaData对象 元数据,可以理解为数据的数据 Jdbc中的元数据是指数据库.表.列的定义信息. ResultSetMetaData对象表示结果集ResultSet对象的元 ...
- [ExtJS5学习笔记]第二十三节 Extjs5中表格gridpanel的列格式设置
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39665979 官方文档:http://docs.sencha.com/extjs/5. ...
- 【Unity Shader实战】卡通风格的Shader(二)
写在前面 本系列其他文章: 卡通风格的Shader(一) 好久没写博客了,一定是因为课程作业比较多,一定不是因为我懒,恩恩. 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface ...
- 与MP3相关的技术总结
MP3文件格式解析 Peter Lee 2008-06-05 目录 33 B7 00 0001 02 FF FF FF F4 E1 2F FF FF FFFF DF FF FF FB52 8C 12 ...
- [openwrt] uci 的shell和lua接口
uci是openwrt上配置操作的接口,不管是自动化的shell脚本,还是使用luci来二次开发配置界面,都会用到这部分知识. uci提供了lua, shell, c接口,这里主要用到了前两种 she ...