WebView之性能优化,优化加载速度,缓存机制详解,解压服务器!

首先先声明一下工作中遇到的问题,我们项目在晚上九点的时候,是一个高峰期。由于服务器高并发没有优化好,在短时间内要做一下解决方案。

还有一个是优化加载webview的加载速度。这个放在后面说。

场景,晚上九点,是用户活跃高峰期,导致原生App端,打开H5页面,需要请的CSS和JS这些文件特别的慢,所有H5页面会在App上显示布局错乱,显示有问题等情况!以下做出了几种方案。(当然后台解决高并发是核心关键

第一:把H5打包成zip文件上传服务器。然后App启动的时候设置一个进度条下载到本地,然后解压。打开本地的HTML,CSS这样,图像,JS文件就全部在本地了,就不会出现高峰期再去请求服务器页面显示错误了。更新只需要删除文件重新下载即可

第二:。使用缓存策略解决这个问题从缓存读取CSS和静态文件更新只需要清空缓 即可。 先介绍一下缓存 当我们加载的Html时候,会在我们的数据/应用包下生成数据库与缓存两个文件夹: 我们请求的地址记录是保存在webviewCache.db里,而URL的内容是保存在webviewCache文件夹下。

当我们加载的Html时候,会在我们的数据/应用包下生成数据库与缓存两个文件夹:

我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)

我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)

一、网页缓存

1、缓存构成

/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db

LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

如:www.taobao.com的缓存控制为无缓存,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。

www.360.com.cn的cache-control为max-age = 60,LOAD_DEFAULT模式下缓存60秒,意思就是60后访问才能重新请求服务器。但是,这60秒后发生了数据的改变也会及时更新缓存的,所以显示也没有问题。现在保存的是css和静态文件图片,部分js。下次进入页面的时候不会再请请这些保存的东西,会直接从本地取,但是还有一点是,如果60秒时间到,他也不会去重新网络请求这些东西,60后秒的英文只不过请求服务器再次,(这可能返回304了,又在本地取了)。这一定要清楚.PS(只有删除缓存才会重新去服*务器获取CSS文件;静态文件)所以现在也能解决我们高并发那个问题。

直接配置缓存

private void initWebView() {    

        mWebView.getSettings().setJavaScriptEnabled(true);    
        mWebView.getSettings()setRenderPriority(RenderPriority.HIGH)。    
        。mWebView.getSettings()setCacheMode(WebSettings.LOAD_DEFAULT); //设置缓存模式     
        //开启DOM存储API功能     
        mWebView.getSettings()。setDomStorageEnabled(true);    
        //开启数据库存储API功能     
        mWebView.getSettings()。setDatabaseEnabled(true);     
        String cacheDirPath = getFilesDir()。getAbsolutePath()+ APP_CACAHE_DIRNAME;    
// String cacheDirPath = getCacheDir()。getAbsolutePath()+ Constant.APP_DB_DIRNAME;    
        Log.i(TAG,“cacheDirPath =+ cacheDirPath);    
        //设置数据库缓存路径     
        .mWebView.getSettings(&#
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值