3 回答

TA貢獻1786條經驗 獲得超11個贊
Titanium會獲取您的Javascript代碼,對其進行分析和預處理,然后將其預編譯為一組符號,這些符號將根據您的應用程序使用Titanium API進行解析。從這個符號層次結構中,我們可以構建一個符號依賴性矩陣,該矩陣映射到基礎的Titanium庫符號,以了解您的應用程序特別需要哪些API(以及相關的依賴性,框架等)。我以半一般的方式使用“符號”一詞,因為它在語言上有所不同。在iPhone中,該符號映射到一個真正的C符號,該符號最終映射到一個已為ARM / i386體系結構編譯的已編譯.o文件。對于Java來說,它或多或少是一個.class文件,等等。一旦前端可以理解您的依賴關系矩陣,我們便會調用SDK編譯器(例如,用于iPhone的GCC,
因此,一種簡單的思考方式是,您的JS代碼幾乎一對一地編譯為本地的代表性符號。仍然有一個解釋器以解釋模式運行,否則動態(tài)代碼之類的東西將無法工作。但是,它的速度更快,更緊湊,并且?guī)缀跖c您可以得到的純本機映射差不多。
顯然,我們仍然有足夠的空間來對此進行改進。到目前為止,在我們最新的1.0測試中,它與相同的Objective-C直接代碼幾乎沒有區(qū)別(因為在大多數情況下,它已精確地映射到該代碼)。從CompSci的角度來看,我們現在可以開始優(yōu)化人類確實不容易做到的事情-就像今天的GCC編譯器一樣。

TA貢獻2021條經驗 獲得超8個贊
如果打包簡單的充足代碼,則會得到?80MB gzip存檔(原始代碼?1kB)。在軟件包中-除其他外-您可以找到我的源html和js文件。軟件包還附帶了很多庫(例如ssl)(因為您可以在此框架內對很多東西進行低級訪問)。
我認為他們采用您的代碼并包裝了某種解釋器軟件和庫。就我而言,這就像將我的html和js代碼打包到僅顯示我的網站的小型瀏覽器旁邊一樣。
但是,只要代碼可以在每個受支持的系統(tǒng)上以相同的方式工作,那就太好了。
添加回答
舉報