Appcelerator Titanium Mobileはどのように機能するのですか?
質問
Titanium Mobile 1.0を使ってiPhoneアプリを構築していますが、iPhoneネイティブのバイナリにコンパイルされることがわかります。 これはどのように機能するのでしょうか? 280 NorthのObjective-JやCappuccinoのようなスーパーセット言語がなければ、JavaScriptコードを解析してObjective-Cに直接翻訳するには、多くの重労働が必要になるように思われます。
どのように解決するのか?
TitaniumはあなたのJavascriptコードを取り、それを分析し、前処理し、そしてあなたのアプリケーションのTitanium APIの使用に基づいて解決されるシンボルのセットにそれをプリコンパイルします。 このシンボル階層から、アプリケーションに必要なAPI(および関連する依存関係、フレームワークなど)を理解するために、基礎となるTitaniumライブラリのシンボルにマッピングするシンボル依存マトリックスを構築することができます。 シンボルという言葉は、言語によって少し異なるので、私は半官半民で使っています。 iPhoneの場合、シンボルは、最終的にARM/i386アーキテクチャ用にコンパイルされた.oファイルにマップされる真のCシンボルにマップされます。 Javaでは、まあ、多かれ少なかれ、.classファイルなどです。 フロントエンドが依存関係マトリックスを理解できたら、次に SDK コンパイラー (たとえば、iPhone 用の GCC、Android 用の Java) を呼び出して、アプリケーションを最終的なネイティブ バイナリにコンパイルします。
つまり、単純に考えると、JS コードは、ネイティブランドの代表的なシンボルにほぼ 1 対 1 でコンパイルされます。 解釈モードではまだインタプリタが動作しており、そうでなければ動的コードのようなものは動作しないでしょう。しかし、はるかに速く、はるかにコンパクトで、純粋なネイティブ マッピングに限りなく近いものです。
私たちは明らかにまだこれを改善する余地をたくさん持っており、それに取り組んでいます。 これまでのところ、最新の 1.0 テストでは、同じ objective-c 直接コードとほとんど区別がつきません (ほとんどの場合、正確にマッピングされるからです)。 CompSci の観点からは、人間が本当に簡単にできなかったことを最適化し始めることができます - 今日 GCC コンパイラーがすでに行っているのと同じように。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み] JSのDateからDay名
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] TypeScriptプロジェクトで既存のC#クラス定義を再利用する方法
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?