转载请注明原文地址: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插件和扩展基础的更多相关文章

  1. 理解WebKit和Chromium(电子书)

    前言   基础篇 WebKit, WebKit2, Chromium和Chrome介绍 WebKit和Blink WebKit和Chromium代码目录结构介绍 WebKit和Chromium功能模块 ...

  2. 理解WebKit和Chromium: 硬件加速之RenderLayer树到合成树

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 在前面的章节中,笔者介绍了WebKit渲染引擎是如何有HTML网页构建DOM树.RenderObject ...

  3. 理解WebKit和Chromium: 调试Android系统上的Chromium

    转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...

  4. 理解WebKit和Chromium: Android 4.4 上的Chromium WebView

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 相信读者已经注意到了,在最新的Android 4.4 Kitkat版本中,原本基于Android Web ...

  5. 理解WebKit和Chromium: 网页渲染的基本过程

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 前面介绍了一些渲染引擎的功能,包括网络,资源加载,DOM树,RenderObject树等等,但是,给人以 ...

  6. 理解WebKit和Chromium:Chromium资源磁盘缓存

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 想象一下,如果没有磁盘缓存的世界.当用户访问网页的时候,每次浏览器都需要从网站下载网页,图片,JS等资源 ...

  7. 理解WebKit和Chromium: Chromium的多进程资源加载机制

    转载请注明原文地址:http://blog.csdn.net/milado_nju ##概述 前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移 ...

  8. 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrom ...

  9. 理解WebKit和Chromium: JavaScript引擎简介

    转载请注明原文地址:http://blog.csdn.net/milado_nju 1. 什么是JavaScript引擎 什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript ...

随机推荐

  1. ubuntu日志文件管理

    众所周知,ubuntu的日志文件会越来越大,需要定期管理 logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/v ...

  2. Python+Tkinter 密保小工具

    上图 代码 核心 编解码方面 Tkinter界面更新 总结 昨天被一同学告知,网上的一个QQ密码库中有我的一条记录,当时我就震惊了,赶紧换了密码.当然了,这件事也给了我一个警示,那就是定期的更换自己的 ...

  3. Compass 更智能的搜索引擎(3)--高亮,排序,过滤以及各种搜索

    要想使得一个搜索系统更加的完美,查询精确度和页面显示算是其中比较重要的两个方面.今天,我们就来谈谈怎么使得我们的搜索系统更加的完美. 关于分词 下载地址 配置 关于高亮 关于排序 原理 冗余字段 使用 ...

  4. Spark技术内幕:Storage 模块整体架构

    Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...

  5. Dynamics CRM 权限整理二

    接上篇http://blog.csdn.net/vic0228/article/details/50510605,继续列举CRM相关权限 prvReadBusinessUnit privilege(I ...

  6. OpenCV+python 人脸识别

    首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧 绪论 1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法要 ...

  7. HTTP状态码总结

    HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.有些 App 端接口与 HTML 接口用的是同一个,所以做移动端开发也有必要了解一下HTTP状态码 ...

  8. [tornado]websocket 最简单demo

    想法 前两天想看看django 长轮询或者是websocket的方案,发现都不太好使. tornado很适合做这个工作,于是找了些资料,参照了做了个最简单demo,以便备用. 具体的概念就不说了,to ...

  9. 第一行代码阅读笔记----显示隐式Intent的基本用法

    1.显示Intent意图明显,通过Intent启动另外一个活动,这是安卓中各组件进行交互的一种重要方式.一般用于启动活动,启动服务,发送广播等场景. 实现方法,这里我只说思路,实践还是要自己实操才能明 ...

  10. 从一个简洁的进度刻度绘制中了解自定义View的思路流程

    先看效果(原谅我的渣像素),进度的刻度.宽度.颜色可以随意设定: [项目github地址: https://github.com/zhangke3016/CircleLoading] 实现起来并不难, ...