安卓用户使用微信H5牛牛平台性能优化方面的探索方案

经常遇到一个问题,微信H5牛牛平台网站(h5.fanshubbs.com)页面由于缓存问题经常在微信H5牛牛平台网站(h5.fanshubbs.com)发布新版本之后客户端App看不到最新的效果,之前由于杂七杂八的问题项目工期紧没好好研究,最近抽空研究了下缓存问题。

缓存问题具体表现为:UIWebview首次打开加载慢;第二次加载速度明显快;H5资源更新过后在App上看不到更改的效果

为此我认为是缓存造成的问题,我进入App目录下,看到Library下的Caches下面有很多文件名称很长的文件,点击预览可以看到是图片、css等,本来我想着找出微信H5牛牛平台网站资源缓存到App中的特点,然后用NSFileManager删除掉缓存文件,发现此路不通。

我想通过控制变量法研究缓存是否存在。

做了一个实验。步骤如下:

  • 用HBuilder(一个编辑器,开启后本机端口8020就可以访问网页)打开微信H5牛牛工程
  • 在App的一个UIWebview页面上通过和电脑在同一个局域网的方式加载网页
  • 在App上查看效果,观察某个元素的样式
  • 在HBuilder编辑器中修改元素样式
  • 在App上将UIWebView返回上一界面,再次进入查看该元素的样式
  • 确定有没有变化,来确定有没有缓存

结论:页面实时效果变化的,没有缓存

对比实验:

  • 用HBuilder(一个编辑器,开启后本机端口8020就可以访问网页)打开H5工程
  • git提交到服务端
  • 在App的一个UIWebview页面上通过公网IP的方式加载网页
  • 在App上查看效果,观察某个元素的样式
  • 在HBuilder编辑器中修改元素样式
  • git提交后发布到服务器上
  • 在App上将UIWebView返回上一界面,再次进入查看该元素的样式
  • 确定有没有变化,来确定有没有缓存

结论:微信H5牛牛页面没有看到最新的效果,明显缓存了。但是我很想知道为什么本地局域网的方式请求网页不会缓存,而通过公网IP的方式会缓存。

为此,我做了进一步的实验,用谷歌浏览器分别请求本地局域网和公网ip查看资源加载的情况。

1、公网IP

2、本地局域网

关键词Status Code

结论:从微信H5牛牛可以看出本地局域网不管首次加载还是刷新都是直接请求;而通过局域网的方式请求:首次请求是从服务器上获取,在此刷新的时候是从(from memory cache)中获取的。

猜想

微信H5牛牛平台网站局域网 的方式网速都比较快所以不会缓存;

公网IP的方式可能由于网速问题会将首次请求到的资源缓存下来。

所以确定缓存存在了,那么如何避免缓存?

  • App在启动后请求一个接口,这个接口的目的是获取当前H5资源的版本号
  • 将获得的版本号保存下来(App本地保存)
  • 由于UIWebView上加载网页,发起网络请求都可以通过一个代理方法所拦截,所以我们可以在这个代理方法中判断url的参数
  • 由于我们的App使用了不同模块的UIWebView,但是都是在UIWebView上需要大量的JS交互,所以使用了WebViewJavascriptBridge这个库。UIWebView本身的代理方法不会执行,所以修改这个库里面的WebViewJavascriptBridge.m文件的代码,差不多是下面的方式

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

if (webView != _webView) { return YES; }

NSURL *url = [rntity Tag 的资源直接访问equest URL];

if ([request.URL.absoluteString containsString:@"http"] || [request.URL.absoluteString containsString:@"https"]) {

if ([request.URL.absoluteString containsString:@"?"]) {

url = [NSURL URLWithString:[NSString stringWithFormat:@"%@&h5V=%@",request.URL.absoluteString,[ProjectUtil getH5VersionString]]];

}else{

url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?h5V=%@",request.URL.absoluteString,[ProjectUtil getH5VersionString]]];

}

}

LBPLOG(@"url->%@",[url absoluteString]);

__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;

if ([_base isCorrectProcotocolScheme:url]) {

if ([_base isBridgeLoadedURL:url]) {

[_base injectJavascriptFile];

} else if ([_base isQueueMessageURL:url]) {

NSString *messageQueueString = [self _evaluate[removed][_base webViewJavascriptFetchQueyCommand]];

[_base flushMessageQueue:messageQueueString];

} else {

[_base logUnkownMessage:url];

}

return NO;

} else if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) {

return [strongDelegate webView:webView shouldStartLoadWithRequest:request navigationType:navigationType];

} else {

return YES;

}

}

总结:

微信H5牛牛平台网站App的缓存问题暂时研究到这里,后期会继续研究其他方面的问题

原文地址:https://www.cnblogs.com/azyhtys/p/8251026.html

时间: 2024-11-14 14:55:23

安卓用户使用微信H5牛牛平台性能优化方面的探索方案的相关文章

迈入TensorFlow的行列:教你写微信H5牛牛平台源码的程序

计算图是之前提到的微信H5牛牛搭建官网h5.fanshubbs.com数据流图.微信H5牛牛搭建数据流图的每个节点将有助于评估TensorFlow计算的操作.在TensorFlow中,每个节点将零个或多个张量作为输入,并产生一个张量作为输出. 在本文中,我们将使用Python在TensorFlow中实现一个非常基本的微信H5牛牛程序,以便在实际中看到它. 一种类型的节点是不变的,不需要输入,并输出一个内部存储的值.我们来看看如何在TensorFlow中定义一个常量. 输出的语句将是: 请注意,输

C#设计模式之微信H5牛牛出租平台源码搭建模式

在实际的开发过程中,由于应用环境的变化(例如开发微信H5牛牛源码出租平台(h5.fanshubbs.com)的变化),我们需要的实现在新的微信H5牛牛平台扣1687054422中没有现存对象可以满足,但是其他微信H5牛牛平台却存在这样现存的对象.那么如果将"将现存的对象"在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模式--使得新环境中不需要去重复实现已经存在了的实现而很好地把现有对象(指原来环境中的现有对象)加入到新环境来使用. 二.微信H5牛牛平台适配器模式的

h5微信群牛牛平台如何搭建 教程分享

HTML5plus Runtime,简称5+ Runtime,是运行于手机端的强化web引擎,除了支持标准HTML5外,还支持更多扩展的js api,使得js的能力不输于原生.5+ Runtime内置于HBuilder,在真机运行.打包时自动挂载. 业内之前有phonegap/Cordova方案,但是他们自带js api太少了,扩展api需要用原生语言开发,更致命的是这类方案的性能不足. h5微信群牛牛平台如何搭建(q-2152876294)各类大厅搭建材料(http://diguaym.com

谈谈Google与微信H5牛牛的Java开发规范

多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭代了多个版本,直至9月份又发布了微信H5牛牛.这两大互联网巨头的初衷,都是希望能够统一标准,使业界编码达到一致性,提升沟通和研发效率,这对于我们码农无疑是很赞的一笔福利呀.笔者将两份规范都通读了一遍,其中列举的不少细则跟平时的编码习惯基本是符合的,不过还是有不少新奇的收获,忍不住记录在此,供日后念念

微信h5牛牛源码出售 手机牛牛搭建图文教程

微信h5牛牛源码出售QQ:2152876294官网http://diguaym.com/h5手机17070838768神兽青龙白虎朱雀玄武凤凰大厅搭建如下: 1. 布局的时候,如果一个元素你想让他的宽高保持一定比例,而不随屏幕变化,宽高设置的时候,使用同一个单位都是CSS3的单位,低版本不兼容 <span style="font-family: Arial, sans-serif; ">1.移动端页面布局,使用相对的数值,不要使用绝对数值,推荐使用%,vw,vh,rem,e

如何提高c/c++大型项目的软件质量微信h5牛牛程序搭建

软件的交付质量一直是我们软件开发项目最为关注的核心问题,那么如何保证软件项目,尤其是大型和超大型软件项目的质量,不管在国内还是国外一直是许多软件企业一直关注和研究的问题. 通常我们会在功能性,可用性,高效性,可测试性,可维护性和可移植性等6个维度来对软件质量进行把控和评定. 1.功能性,即软件是否满足了客户业务要求: 2.可用性,即衡量用户使用软件需要付出多大的努力,简洁容易操作的软件,对于客户来说是非常重要的,就拿国内用户量最大的微信来说,你会不会觉得它的设计总是那么的简洁易用,以至于使用了这

h5牛牛平台搭建中小型棋牌类网络游戏服务端架构

h5牛牛平台搭建相关教程:http://h5.mostsheng.com 相关联系方式:QQ1279829431电联17061863554 用Golang实现基础架构逻辑后,准备再次谈谈我的想法. 已实现的逻辑与前文描述有几点不同: 1. Gateway更名为Proxy,DBProxy更名为DB 2. Proxy同时持有与(Login, Game)不同类型服务器的多条连接 3. DB不参与负载均衡,考虑是棋牌数据库负载不高,即使需要扩展多个也可以通过不同服务器配置指向不同的DB来扩展 4. 消息

h5牛牛平台租用为什么小程序也能做游戏?

就在刚刚h5牛牛平台租用(h5.hxforum.com)企鹅2952777280(http://yhgj8004.com)源码出售 房卡出售 后台出租h5牛牛平台租用,微信官方公布了几个小程序爆炸性的新闻,在 2017 年的年底,这个新闻似乎是在告诉大家,小程序能做的事越来越多,2018 年你再也没法在忽视它. 首页新增小程序任务栏 把小程序的入口直接提到首页,给了小程序更多的流量,这个举动直接就代表了微信的态度,一举提高了小程序的地位,相信在 2018 年,小程序依然会开放更多权限与功能. 当

HomeKit漏洞更新后更严重?微信H5棋牌平台搭建需要上心啊

就在这个月月初,有开发者发现了HomeKit中存在的严重漏洞,能允许任何人不经授权地控制网络中的微信H5棋牌平台搭建网站(h5.fanshubbs.com)的设备.可惜的是在经过大半个月之后,微信牛牛依旧没能完美解决这个问题. 据了解,早在10月28日的时候,一位名叫KhaosTian的开发者就已经发现了问题所在,并在10月29日将其汇报给微信牛牛的产品安全团队.尽管微信牛牛在回信中承诺他们会在整个11月内展开调查,但此后这位开发者又发送了多封电子邮件,却并无回信.然而当iOS11.2新版本到来