Skip to content

Commit

Permalink
feat(android,ios): add jsi document & demo (#1508)
Browse files Browse the repository at this point in the history
* feat(android): jsi document

* feat(ios): jsi document

Co-authored-by: aprilgong <aprilgong@tencent.com>
Co-authored-by: bennyzqliu <bennyzqliu@tencent.com>
  • Loading branch information
3 people authored and zoomchan-cxj committed Feb 9, 2022
1 parent 6199202 commit e3b9143
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 0 deletions.
Binary file added docs/assets/img/jsi_type_android.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
147 changes: 147 additions & 0 deletions docs/guide/jsi.md
Expand Up @@ -19,8 +19,155 @@ JSI 并非适用于所有场景:
* 随着所需读取的成员占比上升,JNI 调用次数的增加,所累计的耗时也随之上涨,反而不如编解码实现性能优异。
* 同步调用简化了编码,耗时更稳定,但会阻塞 JS 执行,不适用于复杂逻辑。

## 接入说明

### 客户端

#### Android

* 通过设置引擎初始化参数开启JSI能力

```java
HippyEngine.EngineInitParams initParams = new HippyEngine.EngineInitParams();
initParams.enableTurbo = true;
```

* 定义Module

> 跟普通NativeModule类似,区别在于需要添加注解表明是同步调用 `@HippyMethod(isSync = true)`
```java
@HippyNativeModule(name = "demoTurbo")
public class DemoJavaTurboModule extends HippyNativeModuleBase {

...
@HippyMethod(isSync = true)
public double getNum(double num) {
return num;
}
...
}
```

> 支持的数据类型说明:
<br />
<img src="assets/img/jsi_type_android.png" alt="数据类型" width="100%"/>
<br />
<br />

更多示例可参考类[DemoJavaTurboModule](https://github.com/Tencent/Hippy/blob/master/examples/android-demo/example/src/main/java/com/tencent/mtt/hippy/example/module/turbo/DemoJavaTurboModule.java)

* 注册TurboModule模块,跟NativeModule注册方法完全一致

```java
public class MyAPIProvider implements HippyAPIProvider {

@Override
public Map<Class<? extends HippyNativeModuleBase>, Provider<? extends HippyNativeModuleBase>> getNativeModules(final HippyEngineContext context) {
Map<Class<? extends HippyNativeModuleBase>, Provider<? extends HippyNativeModuleBase>> modules = new HashMap<>();
...
modules.put(DemoJavaTurboModule.class, new Provider<HippyNativeModuleBase>() {
@Override
public HippyNativeModuleBase get() {
return new DemoJavaTurboModule(context);
}
});
...
return modules;
}
```

#### iOS

* 通过设置引擎初始化参数开启JSI能力
iOS有两种方式去打开关闭enableTurbo能力,如下:

```objc
// 方式一:bridge初始化时通过配置参数设置生效
NSDictionary *launchOptions = @{@"EnableTurbo": @(DEMO_ENABLE_TURBO)};
HippyBridge *bridge = [[HippyBridge alloc] initWithDelegate:self
bundleURL:[NSURL fileURLWithPath:commonBundlePath]
moduleProvider:nil
launchOptions:launchOptions
executorKey:@"Demo"];

// 方式二:bridge初始化完成后,设置属性生效
HippyRootView *rootView = [[HippyRootView alloc] initWithBridge:nil
businessURL:nil
moduleName:@"Demo"
initialProperties:@{@"isSimulator": @(isSimulator)}
launchOptions:nil
shareOptions:nil
debugMode:YES
delegate:nil];
rootView.bridge.enableTurbo = YES;

```

* 定义Module

> 继承HippyOCTurboModule,实现协议HippyTurboModule

目前iOS端仅支持继承关系来实现JSI能力,后续会考虑升级,只需实现协议HippyTurboModule就能实现能力。

具体使用与实现协议如下:

```obj

@implementation TurboConfig

...

// 注册模块
HIPPY_EXPORT_TURBO_MODULE(TurboConfig)

// 注册交互函数
HIPPY_EXPORT_TURBO_METHOD(getInfo) {
return self.strInfo;
}
HIPPY_EXPORT_TURBO_METHOD(setInfo:(NSString *)string) {
self.strInfo = string;
return @(YES);
}

...

@end

```

> 支持的数据类型说明:

| Objec类型 | Js类型 |
|:----------|:----------|
| BOOL | Bool |
| NSInteger | Number |
| NSUInteger | Number |
| CGDouble | Number |
| CGFloat | Number |
| NSString | String |
| NSArray | Array |
| NSDictionary | Object |
| Promise | Function |
| NULL | null |



更多示例可参考类[DemoIOSTurboModule](https://github.com/Tencent/Hippy/blob/master/examples/ios-demo/HippyDemo/turbomodule/TurboBaseModule.mm)


## 使用例子

[Android Demo](https://github.com/Tencent/Hippy/blob/master/examples/android-demo)

[iOS Demo](https://github.com/Tencent/Hippy/blob/master/examples/ios-demo)

[HippyReact Demo](https://github.com/Tencent/Hippy/blob/master/examples/hippy-react-demo/src/externals/Turbo/index.jsx)

[HippyVue Demo](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-demo/src/components/demos/demo-turbo.vue)





0 comments on commit e3b9143

Please sign in to comment.