diff --git a/docs/development/native-module.md b/docs/development/native-module.md index 364f53a8cad..8b21654600d 100644 --- a/docs/development/native-module.md +++ b/docs/development/native-module.md @@ -117,47 +117,48 @@ public void helloNativeWithPromise(HippyMap hippyMap, Promise promise) } ``` - - ## 4. 注册Module -然后需要注册这个Module。需要在 `HippyPackage` 的 `getNativeModules` 方法中添加这个 Module,这样它才能在JS中被访问到。 +需要自定义'APIProvider'类,并实现SDK HippyAPIProvider interface,然后在`getNativeModules` 方法中添加这个 Module,这样它才能在JS中被访问到。 ```java -import com.tencent.mtt.hippy.HippyEngineContext; -import com.tencent.mtt.hippy.HippyPackage; -import com.tencent.mtt.hippy.common.Provider; -import com.tencent.mtt.hippy.example.module.TestModule; - -import com.tencent.mtt.hippy.modules.javascriptmodules.HippyJavaScriptModule; -import com.tencent.mtt.hippy.modules.nativemodules.HippyNativeModuleBase; -import com.tencent.mtt.hippy.uimanager.HippyViewController; +public class MyAPIProvider implements HippyAPIProvider { -import java.util.HashMap; -import java.util.List; -import java.util.Map; + @Override + public Map, Provider> getNativeModules(final HippyEngineContext context) + { + Map, Provider> modules = new HashMap<>(); -public class ExamplePackages implements HippyPackage -{ - @Override - public Map, Provider> getNativeModules(final HippyEngineContext context) + //regist the MyModule + modules.put(TestModule.class, new Provider() { - Map, Provider> modules = new HashMap<>(); - - // regist the LogModule - modules.put(ToastModule.class, new Provider() - { - @Override - public HippyNativeModuleBase get() - { - return new TestModule(context); - } - }); - - return modules; - } + @Override + public HippyNativeModuleBase get() + { + return new TestModule(context); + } + }); + } + + @Override + public List> getJavaScriptModules() {return null;} + + @Override + public List> getControllers() {return null;} +} +``` + +## 5. 注册APIProvider + +在HippyEngine初始化的EngineInitParams参数属性中设置providers。 + +``` java +List providers = new ArrayList<>(); +providers.add(new MyAPIProvider()); +initParams.providers = providers; ``` + ## 注意事项 扩展Module中不能同步执行耗时操作,这可能卡住整个引擎通信线程。存在耗时场景,请使用异步线程处理。 diff --git a/docs/development/v8-api.md b/docs/development/v8-api.md index 01fdb5a7000..a84b8ab6062 100755 --- a/docs/development/v8-api.md +++ b/docs/development/v8-api.md @@ -1,3 +1,26 @@ +# V8 相关初始化参数 + +在HippyEngine初始化的时候,EngineInitParams属性里有以下v8相关的属性参数。 + +## codeCacheTag + +code cache 是V8中的一个特性,简单说就是JavaScript代码在执行前,需要进行解析和编译,才能正确执行,解析编译过程是耗时的,V8 暴露了一个方法,可以将编译产物序列化存储下来,下次再执行相同一段代码时,就可以用之前缓存的内容,节省了解析编译的时间,codeCacheTag作为编译内容缓存的key,设置后便会开启v8 code cache能力,建议开发者对该初始化参数进行设置,可以有效降低非首次启动js bundle加载运行耗时。 + +## v8InitParams + +- initialHeapSize代表v8初始Heap size +- maximumHeapSize代表v8最大Heap size + +由于v8的内存是自己管理的,使用策略是尽可能使用更多的内存,只有在达到maximumHeapSize 80%左右的时候才会触发gc,未达到之前会一直增长,达到80%触发gc的同时会回调near_heap_limit_callback接口获取内存增量,这里内存增量通过sdk内部接口V8VMInitParam::HeapLimitSlowGrowthStrategy返回,默认内存增长策略是当前max值*2,如果前端申请大内存,扩容后还不满足内存分配就会产生OOM. + +在无限滚动列表场景,设置maximumHeapSize可以有效降低v8内存增加速率。 + +修改v8初始内存参数虽然能减少内存增量,但频繁的内存申请和gc,可能引入以下2个负面影响: +- 首屏性能下降 +- OOM率升高 + +所以v8初始化内存参数的设置需要跟进具体的业务场景设置合适的值,并做完整的测试验证,如果不是内存占用有严格要的求场景不建议设置该初始化参数。 + # V8 API 获取 V8 JS 引擎对象,并操作相关方法。