模拟移动连接

时间:2012-10-24 09:44:03

标签: javascript ajax mobile connection emulation

我们在移动页面上有大约3-5个XHR请求 - 有时它们中的一部分不起作用,仅在真实设备上,仅在慢速连接时。我想提高移动Web应用程序的可持续性。

所以我的问题是..如何模仿边缘连接,随机破坏?

在像MobiOne这样的模拟器中 - 连接速度限制工作,但连接具有桌面稳定性 - 所以一切都运行缓慢。

2 个答案:

答案 0 :(得分:4)

您可以使用Charles。这允许你模拟较慢的互联网连接,并且是跨平台的吗?

答案 1 :(得分:2)

为什么不写单元测试?您可以为xhr函数创建模拟/间谍。这样做可以预测地强制破坏各种基于ajax的组件。这会强制您始终通过执行操作(例如再次尝试)来确定已断开的连接,并确保在事情失败时显示加载屏幕和消息。

我认为通过采取这些步骤,您将创建一个更加简单的应用程序。一个糟糕的连接模拟器将向您证明事情是不可预测的。如果您要修复一件事,那么下次运行模拟器时,它会无限地发现其他错误。

以下是使用jasmine / jquery的示例:

it("Will allow failed ajax events", function() {
    var dfd = $.Deferred();
    spyOn($, "ajax").andReturn(dfd);
    dfd.reject(); // calls all failed events
});

it("Will allow done ajax events", function() {
    var dfd = $.Deferred();
    spyOn($, "ajax").andReturn(dfd);
    dfd.resolve(); // calls all done events
});

您的来源可能如下所示:

$.get("url").then(function() { 
    //done
}, function () {
    //fail
});

$.ajax("url")
    .done(function() {})
    .fail(function() {});

var dfd = $.post("url");
$.when(dfd).done(fn).fail(fn);

这可以测试个别的ajax事件。您还可以尝试概括一些默认行为。

如果您不使用jquery,您仍然可以使用延迟。还有其他延迟库或你可以从jquery源获取dfd,这应该有助于所有这些。如果您正在使用其他一些XHR或家庭酿造的东西,您应该能够通过始终返回dfds并在正常回调中解决或失败来集成2。

最后,要真正测试您的应用的功能,只需用不起作用的东西暂时替换普通网址。并观察您的应用程序的反应。如果您的所有网址都不正确,那么基本上应该模拟没有互联网连接。