转载请注明原文地址: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. C++格式化输出浮点数

    主要内容 介绍C++中如何格式化输出浮点数. 控制浮点数输出格式需要包含iomanip头文件. 使用fixed来控制输出的浮点数的小数位是固定的.可参考http://en.cppreference.c ...

  2. Apache ActiveMQ实战(2)-集群

    ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这些问题--集群的两种方式: Master slave Broker clusters ActiveMQ的集群有两种方式: ...

  3. 使用redis构建文章投票系统

    首先,我得说明这篇博客基本上就是<<redis in action>>第一章内容的读书笔记. 需求 首先,说明一下,我们的需求 用户可以发表文章,发表时,自己就默认的给自己的文 ...

  4. 剑指Offer——知识点储备-J2EE基础

    剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...

  5. windows curl命令详解

    概述 Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 软件下载 下载地址:https://cur ...

  6. norflash启动和nandflash启动

    S3C2440的启动时读取的第一条指令是在0x00上,分为成nand flash和nor flash上启动. 1)nand flash:适合大容量数据存储,类似硬盘: 2)nor flash:适合小容 ...

  7. Android使用HttpUrlConnection请求服务器发送数据详解

    HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...

  8. Impala中的代码生成技术

    Cloudera Impala是一种为Hadoop生态系统打造的开源MPP(massive parallel processing)数据库,它主要为分析型查询负载而设计,而非OLTP.Impala能最 ...

  9. 无网络环境下安装Dynamics CRM

    在安装CRM时会需要很多的组件支持,没有这些组件是没法安装的,一般我们都是选择机器联网后在线安装,但也有特殊情况确实不能联网的,可参考这篇文章 https://blogs.msdn.microsoft ...

  10. JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录

    JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...