android H5秒开强化知识部分

422 阅读2分钟

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… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。