zoukankan      html  css  js  c++  java
  • 技术概述

    原文链接:https://developer.chrome.com/native-client/overview

    Native Client(NaCl)是一种开源技术,用于在浏览器中运行本机编译代码,目的是保持用户对Web应用程序的可移植性和安全性。Native Client将Web编程扩展到JavaScript以外,使您能够使用首选语言增强Web应用程序。本文档介绍了Native Client的一些主要优点和常见用例。

    Google已在Windows,Mac,Linux和Chrome操作系统的Chrome浏览器中实施了开源Native Client项目。在本机客户端软件开发工具包(SDK) ,本身就是一个开源项目,您可以创建跨多个平台使用NaCl和运行在Chrome Web应用程序。

    Native Client Web应用程序由JavaScript,HTML,CSS和以SDK支持的语言编写的NaCl模块组成。NaCl SDK目前支持C和C ++; 随着开发其他语言的编译器,SDK将更新。

    https://img-blog.csdn.net/20180719135640718?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k2MDE1MDAzNTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    包含和不包含Native Client的Web应用程序

    Native Client有两种版本:传统(NaCl)和便携式(PNaCl)。繁体,必须通过Chrome网上应用店分发,才能定位特定的硬件平台。便携式可以在开放的网络上运行。可以从任何Web服务器加载的bitcode文件被下载到客户端计算机,并在执行之前转换为特定于硬件的代码。有关详细信息,请参阅NaCl和PNaCl

    为何使用Native Client?

    Native Client开源技术旨在以接近本机的速度在浏览器内安全地运行已编译的代码。Native Client为Web应用程序提供桌面软件的一些优势。具体而言,它提供了充分利用客户端计算资源的方法,例如:

    • 3D游戏
    • 多媒体编辑
    • CAD建模
    • 客户端数据分析
    • 交互式模拟。

    Native Client为C和C ++(以及其他针对它的语言)提供了与JavaScript相同的可移植性和安全性。

    Native Client的好处

    Native Client的好处包括:

    • 图形,音频等:运行本机代码模块,可呈现2D和3D图形,播放音频,响应鼠标和键盘事件,在多个线程上运行,以及直接访问内存 - 无需用户安装插件。
    • 可移植性:编写应用程序一次并在多个操作系统(Windows,Linux,Mac和Chrome OS)和CPU架构(x86和ARM)上运行它们。
    • 轻松迁移到Web:充分利用现有桌面应用程序的多年工作。Native Client使得从桌面到Web应用程序的转换变得更加容易,因为它支持C和C ++。
    • 安全性:通过Native Client的双沙箱模型保护用户的系统免受恶意或错误的应用程序的攻击。此模型提供传统Web应用程序的安全性,而不会牺牲性能,也无需用户安装插件。
    • 性能:以本机桌面应用程序的5%到15%的速度运行。Native Client还允许应用程序通过线程API利用所有可用的CPU内核。这使得控制台质量游戏等要求苛刻的应用程序能够在浏览器内运行。

    常见用例

    Native Client的典型用例包括:

    • 现有软件组件: Native Client允许您在Web应用程序中重用现有的C和C ++软件。您不需要重写和调试已经有效的代码。它还可以让您的应用程序利用浏览器运行良好的功能,例如处理用户交互和处理事件。您还可以利用HTML5的最新发展。
    • 传统桌面应用程序: Native Client提供从桌面应用程序到Web的平滑迁移路径。您可以将应用程序的计算引擎的现有代码直接移植并重新编译到Native Client,并且只需要重建浏览器的用户界面和事件处理部分。
    • 企业应用程序中的大量计算: Native Client可以处理大型企业应用程序所需的数字运算。为了确保用户数据的保护,Native Client允许您直接在浏览器中运行复杂的加密算法,以便未加密的数据永远不会通过网络传出。
    • 多媒体应用程序:可以在Native Client模块中将用于处理声音,图像和电影的编解码器添加到浏览器中。
    • 游戏: Native Client允许Web应用程序以接近本机的速度运行,重用现有的多线程/多核C / C ++代码库,并使用可编程着色器访问低延迟音频,网络API和OpenGL ES。Native Client非常适合运行物理引擎或人工智能模块,为复杂的Web游戏提供支持。Native Client还允许应用程序在许多平台上保持不变。
    • 任何需要加速的应用程序: Native Client可以无缝地融入Web应用程序。由您来决定使用它的程度。Native Client的使用涵盖了从完整应用程序到小型优化例程的全部范围,这些例程可加速Web应用程序的重要部分。

    Native Client的工作原理

    Native Client是一组相关软件组件的总称,用于开发C / C ++应用程序并在Web上安全地运行它们。在较高级别,Native Client包括:

    • 工具链:将C / C ++代码转换为可移植Native Client模块或Native Client模块的开发工具(编译器,链接器等)的集合。
    • 运行时组件:嵌入在浏览器或其他主机平台中的组件,可以安全有效地执行Native Client模块。

    下图显示了这些组件如何交互:

    Native Client工具链及其输出

    Native Client工具链及其输出

    工具链

    Native Client工具链由编译器,链接器,汇编器和其他工具组成,这些工具用于将C / C ++源代码转换为可由浏览器加载的模块。

    Native Client SDK提供了两个工具链:

    • 图的左侧显示了Portable Native Client(PNaCl,发音为“pinnacle”)。基于LLVM的工具链可生成单个便携式(pexe)模块。在运行时,内置于浏览器中的提前(AOT)转换器将pexe转换为相关客户端体系结构的本机代码。
    • 图的右侧显示(非可移植)Native Client。基于GCC的工具链生成多个依赖于体系结构的(nexe)模块,这些模块被打包到应用程序中。在运行时,浏览器根据客户端计算机的体系结构确定要加载哪个nexe。

    对于大多数应用,建议使用PNaCl工具链。NaCl-GCC工具链仅应用于不会在开放网络上分发的应用程序。

    安全

    由于Native Client允许在客户端计算机上执行本机代码,因此必须实施特殊的安全措施:

    • NaCl沙箱确保代码仅通过安全的白名单API访问系统资源,并在其限制内运行,而不会干扰在浏览器内或外部运行的其他代码。
    • NaCl验证器在运行之前静态分析代码,以确保它仅使用允许且安全的代码和数据模式。

    这些安全措施是Chrome浏览器中现有沙箱的补充。Native Client模块始终在具有受限权限的进程中执行。此进程与外部世界之间的唯一交互是通过定义的浏览器界面。由于NaCl沙箱和Chrome沙箱的结合,我们说Native Client采用双沙箱设计。

    便携式Native Client(PNaCl,prounounced“pinnacle”)采用最先进的编译器技术将C / C ++源代码编译为可移植的bitcode可执行文件(pexe)。PNaCl bitcode是一种独立于操作系统和体系结构的格式,可以在Web上自由分发并嵌入到Web应用程序中

    PNaCl转换器是Chrome浏览器中嵌入的组件; 它的任务是运行pexe模块。在内部,翻译器将pexe编译为nexe(如上所述),然后如上所述在Native Client沙箱中执行nexe。如果先前在客户端的浏览器上编译,则翻译器使用智能缓存来避免重新编译pexe。

    Native Client还支持直接在浏览器中执行nexe模块。但是,由于nexes包含特定于体系结构的机器代码,因此不允许在开放Web上分发它们。它们只能用作从Chrome网上应用店安装的应用程序和扩展程序的一部分。

    有关NaCl和PNaCl之间差异的更多详细信息,请参阅 NaCl和PNaCl

    Web应用程序的结构

    Native Client应用程序由一组文件组成:

    • HTML和CSS: HTML文件通过embed标签告诉浏览器在哪里找到清单(nmf文件)。

    <embed name = “mygame” src = “mygame.nmf” type = “application / x-pnacl” /> 
    • 清单:清单标识要加载的模块并指定选项。例如,“mygame.nmf”可能如下所示:

    {...
      ...
      "url": "mygame.pexe",
    }
    • pexe(便携式NaCl文件):已编译的Native Client模块。它使用 Pepper API,它提供了JavaScript和其他浏览器资源的桥梁。

    图片

    Web应用程序的结构

    有关详细信息,请参阅应用程序结构

    Pepper插件API

    Pepper插件API(PPAPI),方便称为Pepper,是一个用于Web浏览器插件的开源,跨平台C / C ++ API。Pepper允许C / C ++模块与托管浏览器通信,并以安全和可移植的方式访问系统级功能。Native Client中的一个安全约束是模块无法进行OS级别的调用。Pepper提供模块可以使用的类似API。

    您可以使用Pepper API访问所有浏览器功能,包括:

    Pepper包括C APIC ++ API。C ++ API是一组在C API之上编写的绑定。有关Pepper的其他信息,请参阅Pepper Concepts

  • 相关阅读:
    【转】pymongo实现模糊查询
    使用pip安装包提示TLS证书错误解决办法
    sed用法去除行首和行末的中括号
    logstash之filter处理中括号包围的内容
    根据IP查地理位置信息
    shell生成连续天数日期
    linux grep 取出特定字符串并统计个数
    【转】css3实现文字闪烁,改变透明度
    【转】Django中使用POST方法获取POST数据
    [算法]机器人运动范围
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049154.html
Copyright © 2011-2022 走看看