我已经开始玩Appcelerator Hyperloop。尽管从零开始从JS访问本地API似乎很不错,但它确实提出了一些关于平台体系结构和性能的问题。Appcelerator Hyperloop与普通钛模块
目前(AFAIK)Titanium应用程序具有主UI线程(运行本机UI控制器)和JS线程(运行JS逻辑)。每个从JS到Native的调用都通过“Bridge”(这是应用程序中的扩展操作)传递。
此外,Titanium API并未涵盖所有原生API和摘要。但是,如果引入新的API,Appcelerator可能需要一些时间才能将这些API实施到平台中。
关于Titanium我最喜欢的一件事是扩展它的能力(使用objective-c for iOS和java for Android) - 允许使用Titanium未涵盖的本机API,并开发真正的本机性能控制以防我们需要为JS做任何过于“沉重”的事情。而且,如前所述,它是针对每个平台开发的100%原生的。
现在的Appcelerator推出超回路列车我做了一个简单的测试应用程序,看到超回路列车不被翻译为本地代码,但只是正常的JS代码:
var UILabel = require('hyperloop/uikit/uilabel');
var label = new UILabel();
label.text = "HELLO WORLD!";
$.index.add(label);
而它的另一件事是,你必须在主线程上运行。
所以我们基本上有几件事想到这里就超回路列车架构云:
- 我们仍然有一个桥梁?如果Hyperloop是调用“特殊”Hyperloop需求的JS,那么我们仍然有一个桥梁,现在不仅可以充当桥梁,而且还需要做某种反射(这也是一种扩展操作)?
- 直到现在,JS运行在它自己的线程中 - 所以现在在单个主线程中运行似乎是更多UI阻塞操作的潜在来源。
- 老式的模块真的是本地的(不包括桥接电话) - 那么如何使用支持Hyperloop的应用程序与那些应用程序相比?
没有太多有关Hyperloop的文档或文章可以解释内部工作 - 所以如果任何人有任何答案一直在尝试应用程序可能是非常有用的。
谢谢。 事实上,我看到我得到的对象是“KrollCallback”和“HyperloopClass”。 你能否进一步解释这个架构以及它在主线程上运行的含义? 在旧模块中,假设我创建了一个包含图像和文本的TableView - 关于使用TiView包装TableView的说法是真实的 - 但是就该视图的子对象而言(ImageView $ Label) - 它们是原生的作为一个 - 所有你绑定他们的事件。只有你带回JS的东西才能跨越桥梁 - 所以不是比做反射更高效? – developer82
嘿!我为此做了一个自己的回答,因为评论只能有600个字符。 –
@HansKnoechel是否可以创建一个Hyperloop模块?我看到了你提出的规范,并且想知道如何为此进行计划。很显然,人们希望即插即用模块不仅仅是每次创建定制的Hyperloop业务逻辑。 –