Appcelerator Titanium Mobile如何工作?

IT技术 javascript objective-c titanium
2021-01-14 05:28:51

我正在使用 Titanium Mobile 1.0 构建 iPhone 应用程序,我看到它可以编译为原生 iPhone 二进制文件。这是如何运作的?如果没有像 280 North 的 Objective-J 和 Cappuccino 这样的超集语言,分析 JavaScript 代码并直接翻译成 Objective-C 似乎需要很多繁重的工作。

3个回答

Titanium 获取您的 Javascript 代码,对其进行分析和预处理,然后将其预编译为一组符号,这些符号根据您的应用程序对 Titanium API 的使用进行解析。从这个符号层次结构中,我们可以构建一个符号依赖矩阵,该矩阵映射到底层的 Titanium 库符号,以了解您的应用程序特别需要哪些 API(以及相关的依赖项、框架等)。我以半通用的方式使用符号这个词,因为它因语言而有所不同。在 iPhone 中,符号映射到一个真正的 C 符号,最终映射到一个已编译的 .o 文件,该文件已为 ARM/i386 架构编译。对于 Java,好吧,它或多或少是一个 .class 文件等。一旦前端可以理解你的依赖矩阵,我们就会调用 SDK 编译器(即 iPhone 的 GCC,

所以,一个简单的思考方式是,你的JS代码几乎是一对一的编译成本土的代表符号。仍然有一个解释器在解释模式下运行,否则动态代码之类的东西将无法工作。然而,它更快,更紧凑,并且尽可能接近纯原生映射。

显然,我们仍有足够的空间来改进和努力。到目前为止,在我们最新的 1.0 测试中,它与相同的 Objective-c 直接代码几乎没有区别(因为在大多数情况下它完全映射到那个)。然而,从 CompSci 的角度来看,我们现在可以开始优化人类确实不容易做到的事情——就像今天的 GCC 编译器已经做到的那样。

编译是在 Titanium 的服务器上完成的吗?我看到维基百科en.wikipedia.org/wiki/Appcelerator_Titanium
2021-03-16 05:28:51
哇,这听起来真的很棒。感谢您的澄清。我从没想过会在 AppCelerator 上投入如此多的精力。继续伟大的工作!
2021-03-23 05:28:51
@djaqeel clojure、scala、jruby、nashorn
2021-03-23 05:28:51
我做对了没有 Javascript->Objective-C 和 Javascript->Java 转换发生,但这直接到本机代码吗?那么有没有办法查看创建的Objective-C或Java代码?
2021-04-08 05:28:51

就像 jhaynie 所说,应用程序被编译成本地代码,但仍然有一个解释器来运行一些 javascript,这使得应用程序非常动态。

appcelerator 钛

如果我打包我的简单代码,我会得到一个 ~80MB 的 gzip 存档(原始代码 ~1kB)。在包中 - 除其他外 - 您可以找到我的源 html 和 js 文件。包中还附带了很多库(例如 ssl)(因为您可以对这个框架内的很多东西进行低级访问)。

我认为他们会使用您的代码并封装某种解释器软件和库。在我的情况下,就像我将我的 html 和 js 代码放在一个只显示我的网站的微型浏览器旁边一样。

然而,只要代码以相同的方式在每个受支持的系统上工作,它就是一件好事。

用一个微型浏览器打包 html 和 js 代码...... 5 年后电子诞生了。
2021-03-16 05:28:51
当我打开 Titanium 创建的 .ipa 时,我看到了一个标准编译的应用程序。找不到任何 HTML 或 JavaScript 代码。
2021-03-22 05:28:51
我认为你描述的是 Cordova 所做的,但 Titanium 的工作方式不同
2021-04-13 05:28:51