Appcelerator Titanium Mobile hoạt động như thế nào?


79

Tôi đang làm việc để xây dựng một ứng dụng iPhone với Titanium Mobile 1.0 và tôi thấy rằng nó biên dịch xuống một bản nhị phân iPhone gốc. Cái này hoạt động ra sao? Có vẻ như sẽ tốn rất nhiều công sức để phân tích mã JavaScript và dịch trực tiếp sang Objective-C mà không có ngôn ngữ siêu tập như Objective-J và Cappuccino của 280 North.


4
nó là mã nguồn mở. tại sao bạn không nhìn vào dưới mui xe?
Gabriele Petrioli

17
@Gaby Tôi nghĩ nếu tôi tò mò thì những người khác cũng vậy, vậy cách nào tốt hơn để truyền bá thông tin hơn là hỏi công khai?
Darrell Brogdon

2
@Darrell, tôi hoàn toàn đồng ý .. tôi không cố gắng bắt bẻ bạn, chỉ nghĩ rằng con đường nhanh nhất (nếu bạn cần chi tiết cụ thể) là kiểm tra mã trực tiếp .. xin lỗi nếu nó xuất hiện sai cách ..
Gabriele Petrioli

1
điểm nhỏ: Objective-J là một superset của javascript
cobbal

2
Tôi đã hỏi câu hỏi này gần đây hơn và nhận được câu trả lời cập nhật hơn với thông tin không được mô tả trong các câu trả lời trên trang này. Đây là câu hỏi: stackoverflow.com/questions/19060554/…
BT

Câu trả lời:


147

Titanium lấy mã Javascript của bạn, phân tích và xử lý trước nó, sau đó biên dịch trước nó thành một bộ ký hiệu được phân giải dựa trên các ứng dụng của bạn sử dụng API Titanium. Từ hệ thống phân cấp ký hiệu này, chúng tôi có thể xây dựng một ma trận phụ thuộc ký hiệu ánh xạ tới các ký hiệu thư viện Titanium cơ bản để hiểu API nào (và các phụ thuộc liên quan, khung, v.v.) cụ thể mà ứng dụng của bạn cần. Tôi đang sử dụng biểu tượng từ theo cách bán chung chung vì nó hơi khác một chút dựa trên ngôn ngữ. Trong iPhone, biểu tượng ánh xạ tới một biểu tượng C thực sự mà cuối cùng ánh xạ tới tệp .o đã biên dịch đã được biên dịch cho kiến ​​trúc ARM / i386. Đối với Java, ít nhiều đó là tệp .class, v.v. Khi giao diện người dùng có thể hiểu ma trận phụ thuộc của bạn, sau đó chúng tôi gọi trình biên dịch SDK (tức là GCC cho iPhone,

Vì vậy, một cách đơn giản để nghĩ về nó là mã JS của bạn được biên dịch gần như 1-1 thành các ký hiệu đại diện trong nativeland. Vẫn có một trình thông dịch đang chạy ở chế độ thông dịch nếu không những thứ như mã động sẽ không hoạt động. Tuy nhiên, nó nhanh hơn, nhỏ gọn hơn nhiều và nó gần giống với bản đồ gốc thuần túy mà bạn có thể nhận được.

Rõ ràng là chúng tôi vẫn còn nhiều chỗ để cải thiện điều này và đang làm việc với điều đó. Cho đến nay trong thử nghiệm 1.0 mới nhất của chúng tôi, nó gần như không thể phân biệt được với cùng một mã trực tiếp target-c (vì trong hầu hết các trường hợp, nó được ánh xạ chính xác đến đó). Từ quan điểm của CompSci, giờ đây chúng ta có thể bắt đầu tối ưu hóa những thứ mà con người thực sự không thể dễ dàng làm được - giống như trình biên dịch GCC đã làm ngày nay.


Wow, điều này thực sự âm thanh tuyệt vời. Cảm ơn bạn đã làm rõ. Tôi chưa bao giờ tưởng tượng rằng có rất nhiều nỗ lực đã được đổ vào AppCelerator. Kịp các công việc tuyệt vời!
MrMage

12
Tôi đã hiểu đúng rằng không có chuyển đổi Javascript-> Objective-C và Javascript-> Java diễn ra nhưng điều này trực tiếp đến mã gốc? Vì vậy, không có cách nào để xem mã Objective-C hoặc Java đã tạo?
janpio

1
Quá trình biên dịch có được thực hiện trên máy chủ của Titanium không? Tôi thấy rằng Wikipedia en.wikipedia.org/wiki/Appcelerator_Titanium
adib

1
@djaqeel clojure, scala, jruby, nashorn
gtrak

3

Giống như jhaynie đã nói, ứng dụng được biên dịch thành mã gốc, nhưng vẫn có một trình thông dịch tại chỗ để chạy một số javascript, cho phép ứng dụng rất năng động.

titan appcelerator


1

Nếu tôi đóng gói mã phong phú đơn giản của mình, tôi nhận được một kho lưu trữ gzip ~ 80MB (Mã gốc ~ 1kB). Trong gói - trong số những gói khác - bạn có thể tìm thấy các tệp html và js nguồn của tôi. Ngoài ra còn có rất nhiều thư viện (ssl chẳng hạn) được vận chuyển cùng với gói (vì bạn có thể có quyền truy cập cấp thấp vào nhiều thứ trong khuôn khổ này).

Tôi nghĩ rằng họ lấy mã của bạn và quấn quanh một số loại phần mềm và thư viện thông dịch. Trong trường hợp của tôi, sẽ giống như nếu tôi đóng gói mã html và js của mình bên cạnh một trình duyệt nhỏ chỉ hiển thị trang web của tôi.

Bao giờ hết, miễn là mã hoạt động trên mọi hệ thống được hỗ trợ theo cùng một cách của nó là một điều tốt.


4
Khi tôi mở .ipa mà Titanium tạo ra, tôi thấy thứ có vẻ là một ứng dụng được biên dịch tiêu chuẩn. Không có mã HTML hoặc JavaScript nào có thể được tìm thấy.
Darrell Brogdon

1
Tôi nghĩ rằng những gì bạn mô tả là những gì Cordova có, nhưng Titanium công trình khác nhau
Rohit Chatterjee

đóng gói mã html và js bằng một trình duyệt nhỏ ... và electron được sinh ra 5 năm sau đó.
Caio Iglesias,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.