### ??????
#### ????????
1. ??????????????????????????????:
> WXPrerenderManager.getInstance().preRenderByXXX()
??????
> *
> ????????????????WXSDKIntance.renderByUrl()????renderByTemplete()????????????????????????????????????????????
> *
> ????????????????????????????????????????????????????view??renderContainer????????????????????????????????????????????????????????????????????????????????????????????
> *
> ????????????templete??????????????????url??????????????????????url????????????????????????????????url????key????????????instance????????????templete????????????url??
> * ??????????????application context????
2. ??????????????????????????????????WXSDKInstance:
> WXPrerenderManager.getInstance().fetchPreload(String url)
??????
> * ??????instance????????????????????????????????????WXSDKInstance
3.
????????????instance??realRender()????????activity??context??????????component??View??
??????
> * ????????????false????????????????????????????????????render??????
??????????
```java
// ????????????????????
// ??????????????????????????????????????????????????????????
int realWidth =
(int)DeviceInfoUtil.getWidth(BaseApplication.getApplicationContext());
int realHeight = (int)
(DeviceInfoUtil.getHeight(BaseApplication.getApplicationContext()) -
TitleBar.getStatusBarHeight() - TitleBar.getTitleBarHeight());
// ????????????????????????????
HashMap<String, Object> loadExturas = new HashMap<>();
loadExturas.put(WXSDKInstance.BUNDLE_URL, url);
loadExturas.put("userAgent", userAgent);
loadExturas.put("cookie", cookie);
loadExturas.put("viewSize", String.format("{\"width\":%d,\"height\":%d}",
realWidth, realHeight));
WXPrerenderManager.getInstance().preRenderByUrl(
BaseApplication.getApplicationContext(),
"Weex_Preload",
url,
loadExturas,
null,
realWidth,
realHeight,
WXRenderStrategy.APPEND_ONCE);
// ??????????????instance
bool hasPrerenderPage = false;
if (!TextUtils.isEmpty(webUrl)) {
mWXSDKInstance = WXPrerenderManager.getInstance().fetchPreload(webUrl);
if (mWXSDKInstance != null) {
mHasPrerenderPage = true;
}
}
if (!hasPrerenderPage) {
mWXSDKInstance = new WXSDKInstance(context);
}
if (hasPrerenderPage) {
boolean result = mWXSDKInstance.realRender(context);
// ??????????????????????????????????????
if (!result) {
mWXSDKInstance = new WXSDKInstance(context);
// ??????????????????
renderWithOutPreload(url);
}
} else {
renderWithOutPreload(url);
}
```
#### ??????????
??????????????????????weex????render????????????????????????WXSDKInstance??render??????????onRenderSuccess????????????????????????????
??????????????????????weex??????render????:
> render -> http????JsBundle -> weexcore createInstance -> jsCore????jsBundle
> -> ????????dom action -> weex frameWork????dom action ->
> ????component??view??????layout?? -> android????????view
????trace????????????????????weex????????????????????????????2????????
1. jsCore????jsBundle??????
2. ????????dom action????????dom action??????
????2??????????????weex????????????????????????????????????????????????????????????
1. ??????
2. ????????
????????????????????????????????????????????????????????????????
????????????????????????
> ???? view -> ????????
??????????weex render????view????????????????????real
render??????????????????????????????????????????????
??????????????????????????
????????prerender??????
> prerender -> http????JsBundle -> weexcore createInstance ->
> jsCore????jsBundle -> ????????dom action -> weex frameWork????dom action ->
> ??????????componentNode
realRender??????
> realrender -> ????componentNode????component??view -> ????????
#### ??????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????render->rendersuccess??????????1.2s(????????????jsBundle??????????????????????????80ms)????????????????????????????????160-180ms??
????????????????????realRender????????????????componnetNode????component??view??????????????????????????????????view????????
??????????????node??????????????????message??????view
anr??????????????????component??node??????????post????weex render
thread??????action??????????????????????????????????????????????????????????????????????????100ms????????
#### ????????????????
1. ??????recyclerList????????UpdateComponentDataAction??????????
2. ??????????????InvokeMethod??InvokeMethodAction????????
3. ??????????????????????????????????
4. ????????????????????????????????????????????module????????????????????????
------------------ ???????? ------------------
??????: "????"<[email protected]>;
????????: 2019??1??22??(??????) ????5:31
??????: "dev"<[email protected]>;
????: Re: prerender discuss
If this is about feature/issue discussion, rename the mail title to [DISCUSS]
XXXX next time.
Describe the design or theory of pre-rendering as there are lots of code change
without a document.
Thanks
> ?? 2019??1??22????17:05?????? <[email protected]> ??????
>
> solve the problem that the weex page is slow to open, we implemented the
> pre-rendering scheme. In many scenarios, we think that modifying the action
> in Java is the least modified solution. You are welcome to give suggestions
> for the prerender implementation.PR:
> https://github.com/apache/incubator-weex/pull/1978
> <https://github.com/apache/incubator-weex/pull/1978>;