1

我写结合到一个共享库访问我的本地资源,一个没有窗户的NPAPI插件。该插件由运行在Firefox浏览器中的Web应用程序加载。 最近,我已经看到了网,在使用Java脚本扩展,还可以让原生代码功能calls.But这些Java脚本扩展是特定的浏览器。差异相对于性能

可以有一个人请告诉我,如果我使用Java脚本扩展,而不是NPAPI插件调用我的原生代码,会不会有在延迟方面的任何性能提升使得本机库API调用?

请注意:我的查询是通用的,专门针对Firefox浏览器。

回答

1

没有通用的答案,这样的问题,通过不同的浏览器执行的机制没有任何共同之处。

Firefox:可以通过js-ctypes调用本地库。这种机制应该比与NPAPI插件的通信更轻量。更重要的是,您没有进程间通信的开销(较新的Firefox版本在单独的进程中运行插件)。

Chrome:AFAIK访问操作系统功能(例如将文件写入磁盘上的随机位置)的唯一方法是通过NPAPI,Chrome不允许扩展使用系统库。但是,如果您仅使用本机库来加速执行,并且不介意在沙箱中运行此代码,则native client可能适合您。由于沙盒执行,它可能会比NPAPI插件慢,但它不会在安装扩展程序时触发巨大的可怕警告。

Safari:据我所知,Safari不允许您使用本机库,not even via NPAPI plugins

Internet Explorer:从MSIE 9.0开始,Internet Explorer仍然没有任何类似于基于JavaScript的扩展。

+0

感谢您的答复。我之前从未使用过扩展,因此我正在询问此查询。 NPAPI插件被加载到页面的内存中,因此在页面被销毁时被卸载。在扩展的情况下,只要浏览器实例处于活动状态,它是否会加载到扩展的内存中并因此保持活动状态?对不起,这个新手查询。 – Souvik 2012-02-17 01:36:46

+0

Safari扩展可以使用NPAPI插件。但是这样的插件不能包含在扩展中。它必须单独安装。 – anfilat 2012-02-17 07:32:25

+0

@anfilat:这就是我的意思 - 基本上,扩展没有任何方法可以获得低级访问。如果一个插件已经存在于系统中,那么它可以使用它(就像网页可以做到的那样),但由于复杂的安装,对于大多数扩展来说这不是一个真正可行的方法。 – 2012-02-17 12:28:57