原文链接:https://developer.chrome.com/native-client/nacl-and-pnacl
本文档介绍了Native Client和 Portable Native Client之间的区别,并提供了何时使用每个客户端的建议。
Native Client通过使用高级软件故障隔离(SFI)技术,可以在Web应用程序内安全地执行本机代码。Native Client允许您比传统Web技术更充分地利用客户端计算机的计算能力。它通过以接近本机的速度运行编译的C和C ++代码并暴露CPU的全部功能(包括SIMD向量和具有共享内存的多核处理)来实现此目的。
虽然Native Client提供操作系统独立性,但它要求您为每个硬件平台生成特定于体系结构的可执行文件(nexe)。这既不便携也不方便,使其不适合开放式网络。
Web上传统的应用程序分发方法是通过自包含的HTML,CSS,JavaScript和其他资源(图像等)捆绑,这些资源可以托管在服务器上并在Web浏览器中运行。通过这种类型的分发,今天创建的网站应该在几年后仍然可以在所有平台上运行。特定于体系结构的可执行文件显然不适合在Web上进行分发。因此,Native Client直到最近才被限制为通过Chrome网上应用店安装的应用程序和浏览器扩展程序。
PNaCl通过将编译过程分为两部分来解决可移植性问题:
此可移植性将Native Client与现有的开放Web技术(如JavaScript)保持一致。您可以将pexe作为应用程序的一部分(以及HTML,CSS和JavaScript)分发,并且用户的计算机只需运行它。
使用PNaCl,您将生成单个pexe,而不是多个特定于平台的nexes。由于pexe使用抽象的,体系结构和OS独立的格式,因此它不会受到上述可移植性问题的影响。虽然,PNaCl在某些操作系统上比在其他操作系统上更有效。PNaCl具有与NaCl相同的安全性。托管环境的未来版本在执行pexe时应该没有问题,即使在新架构上也是如此。此外,如果现有架构得到增强,则不需要重新编译pexe。在某些情况下,客户端转换将自动利用新功能。pexe可以是任何Web应用程序的一部分。它不必通过Chrome网上应用店分发。简而言之,
PNaCl是一种新技术,因此与NaCl相比仍然存在一些局限性。这些限制如下所述。
PNaCl是Native Client的首选工具链,也是在没有Google Web Store的情况下部署Native Client模块的唯一方法。除非您的项目受到“ 何时使用NaCl ”中描述的一个狭窄限制,否则您应该使用PNaCl。
Chrome支持pexe模块的转换及其在Web应用程序中的使用,无需安装浏览器插件或应用程序本身。Native Client和PNaCl是开源技术,我们希望它们将来会被添加到其他托管平台。
如果通过Chrome网上应用店进行受控分发是产品计划的重要组成部分,那么PNaCl的优势对您来说并不那么重要。但您仍然可以使用PNaCl工具链并通过Chrome Web Store分发您的应用程序,从而利用PNaCl的便利性,例如无需为所有支持的体系结构显式编译应用程序。
如果以下任何一种情况适用于您的应用,请使用NaCl:
newlib
C标准库的PNaCl端口进行静态链接。动态链接, glibc
但PNaCl尚不支持。目前正在开展工作,以便在未来的PNaCl版本中实现动态链接。goto
或嵌套函数获取标签的地址。CC-By 3.0许可下提供的内容