我们为客户端维护一个服务器端报告应用程序。在一个报告页面上,页面中间有几个繁重的数据库调用,导致页面需要5-10秒才能呈现。
问题:当通过AT& 3G的iPad访问页面时,页面成功加载的几率约为50%。然而,有时候,Mobile Safari呈现页面的上半部分,然后给出一个"服务器连接被重置"的错误。
背景信息
- 如果你把iPad从3G切换到固定的宽带Wifi连接,页面工作100%的时间
- 这个页面100%的时间在我的Verizon iPhone 3G上工作
- 该页面100%的时间在宽带上工作,无论设备或浏览器- PC, Mac,手机,iPad等。
- 页面不是特别重。所有资产的总权重为108 KB(未压缩时为440 KB)
- 即使在at&t 3G上,报告站点上的其他页面也能100%正确加载。
- 最初,数据库调用需要10+秒,iPad+ at&t 3G问题100%发生。一些简单的优化将调用时间降低到5-10秒,现在我们看到它的时间约为50%。
- 服务器平台为IIS6
- 新信息在IIS的日志文件中,"失败"的页面请求(在移动Safari中导致"连接重置"错误的那个)看起来像一个正常的HTTP请求,结果代码为200(成功)
- 新信息暂时,看起来这个问题不会发生在iPad上的Opera Mini上。令人费解的是,这似乎是at&t的网络问题。我说"暂时"是因为我们不能排除这种可能性。我们目前有一个实习生在Opera上刷新页面并注意任何错误。:)
- New info我们对5-10秒的数据库查询做了一些快速优化。现在的停顿更像是3-5秒,而不是5-10秒。因此,Mobile Safari"连接重置"错误现在发生的几率更接近10%,而不是50%。
所以现在我不知道该怎么想。如果这是一个网络问题,为什么Opera Mini工作,而不是移动Safari在其他相同的情况下?但后来…如果是移动Safari问题,为什么移动Safari在宽带+Wifi连接上工作得很好?
是移动Safari使用不同的超时设置基于它是否在宽带或wifi?我不知道那是不是....它做或不做的事情。
奖励赏金点,我想我正在寻找一个答案,专门解决以下一个或两个问题(1)移动Safari是否根据当前活动的网络连接的类型改变其超时设置(2)是否有某种已知的特定的东西与ats代理服务器是抽搐和终止连接已经闲置了几秒钟?比如:"是的,他们会在4.25秒后终止一个空闲连接"
我认为简短的答案是3G数据连接不可靠。这部分是由于物理原因——它永远不可能像有线连接那样可靠——部分是由于运营商玩的游戏。
几乎所有的运营商似乎都在使用透明的代理服务器,这些服务器有不同程度的损坏。
我不能肯定地说at&t正在做什么,但我可以列出一些我从我的应用程序(访问REST web服务)的客户那里看到的事情:
- 截断参数字符串
- 500长参数字符串错误
- 随机503个错误 随机403错误
- 一个带有错误的200返回码,以XML或文本形式返回(即,如果不尝试解析消息,就无法区分来自web服务和代理的错误)。当然,您不知道消息的格式是什么)
- 偶尔连接缓慢
- 部分下载(没有错误)
很长一段时间,我认为这是我的代码中一个潜在的错误,但后来我在沃达丰的手机上试用了我的应用程序,而不是O2…
除非您在一个公司环境中,并且可以假设一个特定的载体,否则除了使您的代码更具弹性之外,您可以做的不多。我试着让我的代码:
- 更能容忍奇怪或意外的错误
- 使参数字符串更短(我不控制web服务,所以这很难!)
- "拨回"性能,如果我得到太多的错误(例如,请求更少的记录在每个请求)
- 尽量不要强迫最终用户处理他们实际上对 无能为力的奇怪错误
我认为最后一点是最重要的,尽管不幸的是不可能100%做到。
您应该阅读这篇文章,了解为什么您在连接at&t的3G网络时会遇到问题。
关于Opera Mini…Opera使用这种类似代理的技术将所有数据通过他们自己的服务器传递,压缩后发送给你。这导致来自&到你的移动设备,因此-更快的加载时间。
除了压缩输出和优化速度之外,你可以做的不多-甚至用单引号替换双引号(对不起,我是PHP编码人员,不知道这在ASP中是否相同)在这里有意义。今天的宽带连接——没有人真正关心这一点,但移动连接还没有那么先进,当涉及到优化技术时,有点把我们带回到拨号调制解调器时代。
我怀疑问题不在于Safari,而在于at&t的3G路由器/代理。通过切换到HTTPS,我成功地避免了类似的问题,这似乎可以防止at&t的缓冲,并有助于避免虚假的连接重置。
我的猜测是at&t正在用他们的网络玩游戏来平衡负载或防止其他带宽问题,这可能会因为某种原因破坏你的特定数据。
我建议对数据检索进行批处理以返回记录子集,并使用连续滚动模式来提高页面的性能。使用连续滚动,当您向下滚动页面时,将加载新项目。我曾在类似的情况下成功地使用过这种技术。
这篇文章解释了如何在ASP中加入连续滚动模式。. NET with JavaScript:
http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=371这是另一个使用jQuery的好例子:
http://www.eggheadcafe.com/tutorials/aspnet/b8381915 - 06 - d9 - 4538 b4bb - 5 - ac2a8e73f34/implementing -连续滚动- ui -模式-在- aspnet.aspx