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

转载于:https://www.cnblogs.com/thingsoft/archive/2012/01/10/2317938.html

漫谈Google的Native Client(NaCl)技术(二)–技术篇(兼谈LLVM)相关推荐

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

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

  2. 漫谈Google的Native Client(NaCl)技术

    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. Android原生(Native)C开发之二 framebuffer篇

    为什么80%的码农都做不了架构师?>>>    Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...

  8. Native Client 资料

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

  9. Chrome Native Client 原理

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

最新文章

  1. 武大首位女院士逝世,国际再生资源领域最高奖中国第一人,享年80岁
  2. Silverlight与HTML双向交互
  3. 语音对讲软件_三款语音转文字工具,语音输入,高效转换,准确率高
  4. MS-SQL 时间的操作
  5. [UE4]Cast to转换数据类型
  6. 详解java定时任务
  7. Unity Asset Store下载资源存储在本地的路径
  8. SIM900A短信操作
  9. SECS/GEM 产品开发和介绍
  10. 又一个吊打百度网盘的开源神器,还是99年妹子开发的
  11. 半透明物体与深度写入
  12. vue2/vue3详细知识点
  13. 手机验证码接收注册新账户
  14. lululemon女性鞋履系列携AR试穿体验首发上线
  15. 模仿猫眼电影静态网页展示
  16. 极点输入法如何关闭单过了模式
  17. bootstrap模态框保存后清除模态框数据的方法
  18. 创新发展,科技制胜 | 云扩科技入选“2022中小企业智能化解决方案提供商TOP10”
  19. 从富士音乐节看O2O音乐的未来
  20. 磊科762虚拟服务器静态,路由器端口映射教程_磊科NW717路由器端口映射设置教程...

热门文章

  1. 怎样做到“不说服客户,只拒绝客户”?
  2. 无数老板做企业还在卖产品赚差价
  3. 一位网友在某职业论坛上就发了一个相关的帖子
  4. 选ac+ap还是mesh方案?
  5. Qt——P25 QListWidget控件
  6. 如何在SQL Server中分析存储子系统性能
  7. 青蛙换位置excel_吃青蛙:如何在Excel中创建每日交付的sprint消耗图
  8. 增强的PolyBase SQL 2019-外部表SQL Server,目录视图和下推式
  9. django QuerySet
  10. hdu1596-find the safest road