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