使GWT应用程序即使在低带宽下也能正常工作

时间:2014-11-03 09:38:54

标签: java gwt bandwidth

我正在开发一个GWT应用程序,我希望根据互联网带宽速度使用文件进行上传/下载。 有没有办法在GWT中检测互联网带宽/速度来决定要加载哪些文件。 感谢。

3 个答案:

答案 0 :(得分:1)

上传速度可能会在测量后几秒钟发生变化,然后反复变化。如果你在加载每个文件之前尝试测量它,那么这样做的开销可能会超过任何好处。

如果这对您的应用程序至关重要,您可以提供一个完整的"和"简化"您的应用版本,让用户选择。这是Chess.com使用的一种方法,例如,连接速度对于玩家体验非常重要。许多网站都提供更轻便的移动设备。他们的应用程序版本与更完整的桌面相比#34;版本,通常也意味着图像的分辨率不同。

另一种方法是允许用户在"标准"之间进行选择。和" HD"媒体文件的分辨率,但也可以应用于其他文件类型。这是YouTube,iTunes(电影)和许多其他网站使用的方法。

答案 1 :(得分:1)

您可以将GWT应用程序拆分为多个部分,以便仅在需要时加载部件。这已完整记录,请参阅here。非常强大的东西。 无论您的连接速度如何,它都可以使初始负载更小更快。每次新的"功能"使用时,会下载一个小的附加包(仅在第一次使用时)。如果您遵循文档,这将透明地工作。

另外,请确保正确配置Web服务器,以便充分利用GWT *.cache.js部分的可缓存性。

答案 2 :(得分:0)

嗯,除非您尝试下载或上传某些内容并在客户端测量时间,否则没有提供此信息的任何内容。

测量下载带宽可以像计算应用程序加载时间一样简单,也可以更好地向服务器发送请求以请求已知大小的请求。

1.-案例1(为简单起见,我使用gquery

index.html

中设置此项
<script>
  window._app_start_loading = new Date().getTime();
</script>

然后计算你的应用花费的时间

onModuleLoad() {
  double start = $(window).prop('_app_start_loading');
  double millisecs = start - Duration.currentTimeMillis();

}

根据您的应用JS的大小和经验,您可以计算用户是否使用质量较差的网络。

2.-案例2:但是下面的示例存在问题,用户浏览器将缓存请求,因此它仅在用户第一次运行您的应用时才有效。做以下事情更加准确和可行:

onModuleLoad() {
  final double start = Duration.currentTimeMillis();
  double millisecs = start - Duration.currentTimeMillis();
    GQuery.post("my_app/a_fixed_sized_request?" + Duration.currentTimeMillis(), null, new Function() {
        public void f() {
            double millisecs = start - Duration.currentTimeMillis();
        }
    });
}

现在您知道大小始终相同,并且请求未被缓存。

3.-测量上传。您可以执行与情况2相同的操作,但在请求中以已知大小发送一些POST数据。替换第二个参数。