Native Client简介

Native Client是Google在浏览器领域推出的一个开源技术,它允许在浏览器内编译Web应用程序,并执行原生的编译好的代码。Native Client有以下几个优势(参考Google官方英文介绍):

  • 为Web提供更多的图形,音频以及其他功能:可以直接在web上执行了原生的2D,3D图形渲染程序(对Web游戏很有用),播放音视频,响应鼠标键盘事件,多线程执行代码等等,而这一切,不需要浏览器安装任何插件。
  • 良好的可移植性:一个Web程序,只需要开发一份代码,即可以在所有平台(包括Windows,linux,Mac等)运行。
  • 高安全性:安装不被信任的桌面程序一级浏览器插件,可能带来很高的安全风险(如程序携带木马,病毒)。而Native client使用了双层沙盒(sandbox)设计来保护用户的本地资源。Native Client的架构可以保证web要应用的安全性,并且取得和原声代码相同或相近的性能。
  • 方便从桌面迁移:很多开发厂商之前花了大力气开发桌面程序,随着云计算的到来,越来越多的程序会被移植到互联网上,由于NaCl支持直接执行C/C++/Java等代码,Native Client技术可以简化移植过程,减少移植成本。
  • 高性能:Native Client可以让web应用已接近桌面程序的性能运行,这就为在浏览器内运行性能苛刻的程序提供了基础,如大型3D游戏。

Native Client技术概要

有人说,Native Client技术是抄袭ActiveX的,个人不以为然,ActiveX主要是基于COM的,是操作系统提供一套可重用的接口给web应用,而NaCl则是独立于操作系统的。说实话,感觉这技术更像是抄袭Adobe的Alchemy技术,Achemy技术主要目的是解决Flash的低性能,这和Native Client是接近的,并且,这两种技术都采用了LLVM技术,具体可以看这篇文章http://yjrl.iteye.com/blog/320665。

LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后端来使用。而基于LLVM ,开源社区开发出了Clang,一个C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

Google 的Native Client的关键技术就是PNaCl(Portable Native Client Executables),而PNaCl实现的一个关键就是LLVM。下面是整个PNaCl结构示意图: 

在PNaCl中,开发者通过一些前端编译器将C/C++/Fortan源代码用对应的编译器前端编译成LLVM的中间字节码,并且进行优化以及链接(这一整套流程可以在Google提供的SDK中完成)。之后,服务器将链接好的字节码进行分发,在客户端,通过LLVM的后端将字节码翻译成本地的二进制对象文件,并且和本地的相关库链接,最终执行完成(这些功能应该是集成在浏览器中的)。

另外,为了保证安全性,NaCl采用了沙盒技术,具体可以看这篇论文:《Native Client: A Sandbox for Portable, Untrusted x86 Native Code》。

参考:

http://www.lingcc.com/2010/06/02/10955/

http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf

漫谈Google的Native Client(NaCl)技术相关推荐

  1. 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)

    转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...

  2. 漫谈Google的Native Client(NaCl)技术(二)–技术篇(兼谈LLVM)

    Native Client简介 Native Client是Google在浏览器领域推出的一个开源技术,它允许在浏览器内编译Web应用程序,并执行原生的编译好的代码.Native Client有以下几 ...

  3. Google Native Client介紹

    以下出自baidu百科 NativeClient:Google的一个新产品,目前出于试验阶段,它能够帮助网络开发者编写更强大的Web应用,使得网络应用可以直接在本地操作系统上运行,不需通过浏览器.Go ...

  4. Google Chrome Native Messaging开发实录(一)背景介绍

    最近接手了一个针对Google Chrome的需求,最终是使用Native Messaging来实现的.通过这个连载,将把本次开发从方案选定到编码的全部过程进行完整的回顾,并记录开发过程中踩过的各种坑 ...

  5. ARChon 分析之三:Native Client

    从前两篇文章过来,假设你已经了解了下载使用ARChon.简单分析与Chrome插件介绍 这篇文章主要是分析ARChon如何实现跨平台. 源码:https://bitbucket.org/vladiko ...

  6. 教程之三、Chrome Dev Summit 2014 - Native Client Codelabs

    原文链接:https://developer.chrome.com/native-client/cds2014 十字路口 为了您的编码乐趣,我们有两个codelabs.根据您的兴趣和以往经验,查看其中 ...

  7. Native Client 资料

    Native Client:本地程序(C/C++和目前不支持的其他程序)沙箱 [JavaScript通过浏览器(解释引擎)来完成功能,HTML5只是扩展了部分功能] Native Client 适合纯 ...

  8. Chrome Native Client 原理

    Native Client:A Sandbox for Portable, Untrusted x86 Native Code 系统架构 一个NaCl应用程序由许多可信和不可信NaCl模块组成,每个模 ...

  9. chrome Native Client 让你可以使用 C 以及 C++ 语言开发 Web 应用

    Native Client 让你可以使用 C 以及 C++ 语言开发 Web 应用 2011年8月22日发表评论 新浪微博 网易微博 腾讯微博 开心网 人人网 豆瓣 Google 的产品经理 Chri ...

最新文章

  1. python导入py文件-关于python:如何从另一个目录导入.py文件?
  2. 百度地图API —— Hello World!
  3. ASP.NET Core - 在ActionFilter中使用依赖注入
  4. java数据库编程——事务
  5. 登录python自动化_Appium+Python实现自动化登录
  6. python怎么创建变量_Python之变量的创建过程
  7. 做折线图_python的visvis库做折线图(line.py)代码详解
  8. 图 子类 数据库_构造知识图的语义模型
  9. 前端,html,css,js,vue
  10. 融云:让银行轻松上“云”
  11. java内存模型JMM理解整理
  12. ES插件es-head下载和安装
  13. 中国移动CMPP协议、联通SGIP协议、电信SMGP协议短信网关
  14. padding不会撑开盒子的情况
  15. 莫纳什大学计算机专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名莫纳什大学排名第151-200...
  16. 如何将xml格式转换为yolov5所需的txt格式
  17. React实现支付宝支付代码
  18. MIPS、CPI、MFLOPS
  19. 第118篇 在区块链浏览器上调用合约
  20. 新手如何学习Java以及学习java的步骤

热门文章

  1. 谓词NSPredicate的使用
  2. FileReader上传图片
  3. 简单的协议应用-代理模式
  4. DHTML4(select与checkbox应用)
  5. WMI介绍及简单实际运用(二,Win32_Processor内容)
  6. android 4.0以上WebView不能全屏播放视频的解决办法
  7. 安装Conda并在Conda下安装jupyter notebook
  8. 设计模式---装饰模式
  9. 升级jquery-easyui1.4.5后treegrid无法显示
  10. BCB 多线程的同步与协调