1.H5秒开
webview加载流程:
webview初始化->DOM下载→DOM解析→CSS请求+下载→CSS解析→渲染→绘制→合成
存在问题:
调用loadUrl()方法的时候,才会开始网页加载流程 2.js臃肿问题 3.加载图片太多 4.webview本身问题;
优化
1)内核提前初始化
在Application onCreate中
mWebView = new WebView(this);
2)webview复用池 (www.jianshu.com/p/3405ef3a4…
public class WebViewPool {
private static final String DEMO_URL = "http://www.demo.com";
private static List<WebView> available = new ArrayList<WebView>();
private static List<WebView> inUse = new ArrayList<WebView>();
private static int maxSize = 3;
private int currentSize = 0;
private WebViewPool() {
available = new ArrayList<WebView>();
inUse = new ArrayList<WebView>();
}
/**
* Webview 初始化空的webview,可以下次直接使用
* 最好放在application oncreate里
* */
public static void init() {
for (int i = 0; i < maxSize; i++) {
WebView webView = new WebView(BaseApplication.getInstance());
ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
webView.setLayoutParams(params);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //设置 缓存模式(true);
webView.getSettings().setAppCacheEnabled(false);
webView.getSettings().setSupportZoom(false);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl(DEMO_URL);
available.add(webView);
}
}
/**
* 获取webview
*
* */
public WebView getWebView()
/**
* 回收webview ,解绑
*@param webView 需要被回收的webview
*
* */
public void removeWebView(ViewGroup view, WebView webView)
3)独立进程,进程预加载
<service
android:name=".PreWebService"
android:process=":web"/>
<activity
android:name=".WebActivity"
android:process=":web"/>
4) 使用x5内核 直接使用腾讯的x5内核,替换原生的浏览器内核
如果手机已经安装微信或者QQ,可以共享X5内核达到减小包体。
优点: 省内存30%, 省流量20% 稳定 安全 兼容
5) 其他的解决方案:
1.设置webview缓存
2.加载动画/最后让图片下载
3.渲染时关掉图片加载
4.设置超时时间
5.开启软硬件加速
思路总结: 网页秒开 策略:
-
针对客户端
1.预创建(application onCreate 时)webview 1.1预创建的同时加载带有css/js的html文本
2.webview复用池
3.webview setting的设置
4.预取网页并缓存,预先获取html并缓存本地,需要是从缓存中加载即可
5.资源拦截并行加载,内核初始化和资源加载同时进行。 -
针对服务端
1.直出网页的拼装,服务端时获取网页的全部内容,客户端获取后直接加载
2.客户端本地html资源的版本控制 -
针对网页前端
1.删减不必要的js/css
2.配合客户端使用VasSonic,只对特定的内容进行页面更新与下载。
作者:Gaga246
链接:juejin.cn/post/704584…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。