跨平台組件對象模型(英語:Cross Platform Component Object Model,簡稱XPCOM)是Mozilla的一個跨平台組件模型。它類似微軟的組件對象模型(COM)和公共對象請求代理體系結構(CORBA)。[1]它有多個語言綁定接口描述語言(IDL)描述符,因此程序員可以將自己的自定義函數插入到框架中並與其他組件連接。

2015年8月,Mozilla宣布將放棄為創建Firefox附加組件而使用的XPCOM,未來將支持WebExtensions[2]Firefox的分支蒼月瀏覽器(Pale Moon)則將繼續無限期的支持XPCOM。[3]

模型 編輯

XPCOM的一項主要目的是將Mozilla應用程序環境做成一個實際的框架。它為跨平台軟件的開發人員提供一個有下列特性的開發環境:

組件對象模型使Gecko的幾乎所有功能可作為一系列組件或可重用的跨平台函式庫使用,它可以通過網頁瀏覽器或任何Mozilla應用程序的腳本使用。應用程序必須訪問各個Mozilla XPCOM程式庫(網絡安全DOM等)以使用XPCOM的一個被稱為XPConnect的特殊層,這將程式庫反射到JavaScript或其他語言。XPConnect基於XPCOM中的組件,將前端膠合為C++C編程語言,並且可以擴展為包含對其他腳本語言的支持:PyXPCOM英語PyXPCOM已提供對Python的支持。PerlConnect[4]和plXPCOM[5] 提供對Perl的支持,並且仍在努力增加通用語言架構(CLI)和Ruby語言對XPConnect支持。

對開發者來說,XPCOM允許使用C++CJavaScriptPython等已提供「綁定」的語言編寫組件,並可在幾十個Mozilla支持的平台上編譯和運行這些組件。

靈活的重用來自Gecko程式庫的XPCOM組件和開發能運行在不同平台的新組件有助於快速應用程式開發,並能使應用程序更高效和易於維護。例如,XPCOM組件集中的網絡程式庫就可以被任何Mozilla應用程序訪問和使用。文件I/O、安全、密碼管理以及配置文件也都有單獨的XPCOM組件,程序員可以在開發自己的應用程序時使用。

批評 編輯

XPCOM為不同使用上下文(例如不同語言)下的編組英語Marshalling (computer science)對象添加了大量代碼。這導致XPCOM中基於系統的代碼出現膨脹英語Software bloat。這也是蘋果公司復刻KHTML(現在已被多個網頁瀏覽器使用,包括Safari)來創建WebKit引擎而非在其瀏覽器中採用基於XPCOM的Gecko渲染引擎的原因之一。[6][7]

Gecko的開發人員目前正在嘗試減少Gecko排版引擎中XPCOM的過剩使用。此過程在Mozilla內通常被稱為deCOMtamination[8]

參見 編輯

  • XULRunner – XULRunner是一個運行時,它的用途是啟動多個像Firefox和Thunderbird那樣的XUL + XPCOM的應用程序。

參考資料 編輯

  1. ^ Comparison with COM, GObject, SOM, Objective-C, Windows Runtime
  2. ^ Kev Needham. The Future of Developing Firefox Add-ons. 2015-08-21 [2015-09-07]. (原始內容存檔於2015-09-05). 
  3. ^ Pale Moon future roadmap. Pale Moon. 2016-05-09 [2016-06-08]. (原始內容存檔於2021-04-01). 
  4. ^ module ownership governance system. [2016-12-12]. (原始內容存檔於2009-07-01). 
  5. ^ Perl XPCOM project. [2016-12-12]. (原始內容存檔於2018-12-04). 
  6. ^ Jorge O. Castro. Ars Technica sits down with Scott Collins from Mozilla.org. Ars Technica. June 15, 2004 [2016-12-12]. (原始內容存檔於2011-12-23). 
  7. ^ Ryan Paul. Why Mozilla is committed to Gecko as WebKit popularity grows. Ars Technica. September 9, 2008 [2016-12-12]. (原始內容存檔於2012-02-11). 
  8. ^ Gecko:DeCOMtamination. [2016-12-12]. (原始內容存檔於2021-03-29). 

外部連結 編輯