Zacząłem grać z Appcelerator Hyperloop. Chociaż wydaje się, że dostęp do natywnych interfejsów API z JS jest świetny od dnia zerowego, powstaje kilka pytań dotyczących architektury platformy i wydajności.Appcelerator Hyperloop vs. Plain Titanium Modules
Obecnie (AFAIK) aplikacja Titanium ma główny wątek UI (który uruchamia natywne kontrolery interfejsu użytkownika) oraz wątek JS (który uruchamia logikę JS). Każde wywołanie od JS do Native jest przekazywane za pomocą "Bridge" (co jest ekspansywną operacją w aplikacji).
Co więcej, Titanium API nie obejmuje wszystkich natywnych API i streszczeń, jak tylko może. Ale jeśli wprowadzimy nowe API, może to potrwać, zanim Appcelerator wdroży je na platformie.
Jedną z moich ulubionych rzeczy na temat Titanium jest możliwość jej rozszerzenia (za pomocą obiektywu c dla iOS i java dla Androida) - pozwalając na korzystanie z natywnych API, które nie są objęte tytanem, a także rozwijając bardzo natywne kontrole wydajności na wypadek, gdybyśmy musieli zrobić wszystko, co jest zbyt "ciężkie" dla JS. I, jak wspomniano, jest opracowany w 100% natywny dla każdej platformy.
Teraz Appcelerator wprowadzono Hyperloop Zrobiłem prostą aplikację testową i zobaczył, że Hyperloop nie przekłada się natywnego kodu, ale po prostu do normalnego kodu JS:
var UILabel = require('hyperloop/uikit/uilabel');
var label = new UILabel();
label.text = "HELLO WORLD!";
$.index.add(label);
a inna rzeczą jest to, że masz uruchomić na głównym wątku.
Więc w zasadzie mieć kilka rzeczy przychodzą do głowy tutaj miarę Hyperloop architektura idzie:
- Mamy jeszcze most? jeśli Hyperloop jest JS, który wymaga "specjalnego" Hyperloopa, to nadal mamy most, który teraz nie tylko działa jak most, ale także musi dokonać jakiegoś odbicia (który jest także ekspansywną operacją)?
- Do tej pory JS działał w swoim wątku - więc teraz działa w jednym głównym wątku wydaje się być potencjalnym źródłem do większej blokowania interfejsu użytkownika.
- Staroświeckie moduły były naprawdę natywne (bez mostkowania) - jak więc porównać aplikacje z Hyperloop?
Nie ma zbyt wiele dokumentacji i artykułów na temat Hyperloopa, które wyjaśniałyby wewnętrzną pracę - więc jeśli ktokolwiek ma jakieś odpowiedzi, próbował aplikacji z nim, może być bardzo pomocny.
Dzięki. Rzeczywiście widzę, że obiekty, które otrzymuję, to 'KrollCallback' i' HyperloopClass'. Czy mógłbyś dokładniej wyjaśnić architekturę i co to znaczy uruchomić na głównym wątku? W starych modułach, powiedzmy, że tworzę TableView z obrazami i tekstami - to, co mówisz o zawijaniu TableView za pomocą TiView, jest prawdą - ale jeśli chodzi o obiekt podrzędny tego widoku (ImageView $ Label) - są one rodzime jako be - tak są wszystkie wydarzenia, do których je zwiążesz. Tylko to, co wrócisz do JS, przechodzi przez most - czyż nie jest bardziej wydajne niż robienie odbicia? – developer82
Hej tam! Zrobiłem na to własną odpowiedź, ponieważ komentarze mogą mieć tylko 600 znaków. –
@HansKnoechel Czy można utworzyć moduł Hyperloop? Widziałem twoją propozycję specyfikacji i zastanawiam się, jak postępuje/planuje to. Oczywiście ludzie chcą, aby moduły plug and play nie tylko tworzyły niestandardową logikę biznesową Hyperloop za każdym razem. –