我在单击按钮时呈现 webview,并使用 shouldInterceptRequest 拦截对图像、css 和 js 文件等资源的请求,并在本地而不是通过网络提供它们。我希望在加载时间上看到相当大的差异,但它只减少了一小部分。是否可以并行化 shouldInterceptRequest ?还有其他建议吗?
提前致谢
我在单击按钮时呈现 webview,并使用 shouldInterceptRequest 拦截对图像、css 和 js 文件等资源的请求,并在本地而不是通过网络提供它们。我希望在加载时间上看到相当大的差异,但它只减少了一小部分。是否可以并行化 shouldInterceptRequest ?还有其他建议吗?
提前致谢
KitKat 中的新 Chromium WebView 将并行读取从 shouldInterceptRequest 返回的多个 InputStream。以前版本的 Android 中存在的 Classic WebView 实现将连续执行读取,并且没有办法解决这个问题。
在不知道您尝试提供的内容的详细信息的情况下,很难提供具体的建议。你如何衡量这个?也许显示的总时间减少了,但您认为加载速度较慢,因为一次只加载一件事?您还应该尝试尝试在本地缓存什么 - 也许最大的收获是只通过 shouldInterceptRequest 提供最大的文件?
如果您负担得起额外的内存使用,您可以将资源存储在内存中(例如,通过将它们读入字符串)并使用 ByteArrayInputStream 将它们提供给 WebView。如果您可以预测下一个所需资源是什么(这样您需要更少的内存),那将是理想的。
注意:Classic WebView 将使用 shouldInterceptRequest “在后台”来读取 file:///android_asset 和 content: 方案资源,因此在其中任何一个之间传输没有任何好处,但是这样做(特别是使用 file:// /android_asset/) 可能会简化您的代码。