我正在开发一个GWT应用程序,我希望根据互联网带宽速度使用文件进行上传/下载。 有没有办法在GWT中检测互联网带宽/速度来决定要加载哪些文件。 感谢。
答案 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数据。替换第二个参数。