Servo:開源嵌入式瀏覽器引擎

jopen 9年前發布 | 6K 次閱讀 Servo

原文  http://www.infoq.com/cn/news/2015/06/Servo-Mozilla

嵌入式瀏覽器引擎可以嵌入其它應用程序,像常規Web瀏覽器一樣展示內容,并允許開發者自定義用戶體驗。Mike Blumenkrantz是Enlightenment的發布經理,同時也是 EFL工具包 的核心開發者。近日,他 撰文 介紹了由Mozilla基金會和三星共同推動的開源嵌入式瀏覽器引擎項目Servo。

許多公司都使用了Web內容嵌入技術。比如,Rhythmbox、Kate、Eclipse等流行Linux應用程序、Microsoft Entourage、Apple Mail for Mac、Adobe的產品以及Valve的 Steam 客戶端等等。然而,向應用程序嵌入Web內容的API卻很少, WebKit 是最流行的一個。但它的問題是不穩定,開發者經常會因為需要與它的更新保持同步而不得不修改應用程序。 Blink 是WebKit的一個分支。它也有穩定性問題,而且只能用于C++。要解決這些問題,可以使用 Chromium嵌入式框架 (CEF)。該框架基于Blink瀏覽器引擎,但它實現了用戶與底層引擎變化的隔離,并提供了基本的C API以及C++擴展。目前,Valve的Steam客戶端以及Adobe的多種產品都使用了該API。

Servo瀏覽器引擎的目標是為開發者提供最大的靈活性。為了實現這個目的,它必須提供穩定的API和 ABI 。它使用Rust編寫,這使它可以提供能夠從C語言中直接調用的API。考慮到重新設計一個嵌入式Web API非常復雜,比如需要編寫大量的文檔,測試大量的框架以及大力的推廣應用等,所以他們采用了一種不同的方式。

Servo實現了Chromium嵌入式框架的API。這意味著,正在使用CEF的開發者不需要對應用程序做任何修改就可以比較Blink和Servo引擎的性能,未來的開發者也不需要考慮另外一種瀏覽器API。這種實現方式主要包含兩個方面的工作:

  • 確保“符號(Symbol)”完全覆蓋:Servo嵌入式庫可以鉤連每個CEF函數調用。同時,任何時候分配的供外部使用的struct,其大小和成員位置必須與真正的CEF所分配的struct類似。符號列表可以借助Linux工具nm取得。
  • 盡可能準確的模擬每個方法調用的功能:這需要完全了解CEF的每個函數以及它如何連接到瀏覽器引擎。

目前,Servo尚處于起步階段, 團隊還非常小,項目還面臨著一些問題,比如借助CEF提供的C++擴展跟蹤C API執行。因此,Mike希望,感興趣的開發者能夠加入他們。更多信息請查看 GitHub頁面

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!