我们已经定制了网页。每页约10 MB 3D文件。 我想避免每次重新加载10 MB Webview页面。
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 50 * 1024 * 1024 ); // 50MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
似乎只是提高了10%的速度。 同一页面再次需要更多时间。
是否有其他方法可以避免再次重新加载10 MB Webview? (像Glide)
答案 0 :(得分:2)
两个解决问题的方法:
选项1 。在网络服务器中编辑.htaccess
文件以包含以下几行。这样,客户将了解该网页是可访问的。这样,您可以保持缓存模式不变。您应该更改max-age
(以秒为单位)和Expires
以满足您的要求。
.htaccess
<!-- Rest of code-->
<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=31536000"
Header set Expires "Wed, 21 Oct 2020 07:28:00 GMT"
</IfModule>
如果.htaccess
中包含上述行,则可以使用。
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
作为参考,您可以根据此问题检查此存储库(https://github.com/mecoFarid/WebViewCache)。自从我在服务器端修改了.htaccess
以来,此仓库中的示例就可以工作了。
选项2。(不推荐)。正如@Azer指出的LOAD_CACHE_ELSE_NETWORK
和LOAD_CACHE_ONLY
。他们俩都非常危险。因为如果将缓存模式设置为LOAD_CACHE_ELSE_NETWORK
,则意味着即使资源已过期,您的Web视图仍将加载缓存。而且,如果将缓存模式设置为LOAD_CACHE_ONLY
,即使您已连接网络,同样的问题将仍然存在,资源将不会加载,而是会使用缓存。