Category Archives: 产品

不仅是互联网产品

通过JS判断联网类型和连接状态

中国的移动网络环境复杂,为了给用户带去更好访问体验,开发者希望能了解用户当前的联网方式,然后给用户一个符合当前网络环境的请求结果。

W3C的规范中给出了一个方法来获得现在的网络状态navigator.connection;根据Working Draft 29 November 2012协议规范我们可以从接口中获得bandwidth(带宽,M/s)和metered两个参数的值;还提供了一个监听方法,来时刻监听接入环境的变化情况。现实中我们发现很多浏览器并没有返回bandwidth值,而且遵守了Working Draft 07 June 2011的协议返回给我们type(类型,wifi/2g/3g/4g)。

我们接下来就看看各家的支持情况

Android 2.3+ Browser UC Dolphin QQ浏览器 Baidu Firefox Chrome Opera Mini Maxthon
Yes No* Yes Yes* Yes Yes(New) No No Yes

说明下在iPhone中任何浏览器都无法得到相关信息。

通过上面的说明,我们发现还是可以通过这个参数了解很大一部分用户的联网情况的,并且为他们提供更加优质的体验。
接下来我们重点说说各浏览器的返回情况。

大部分浏览器会返回一个int型的类型,其中的特例是QQ浏览器,返回的就是类型名称,对应关系如下

返回值 QQ返回值 类型
0 unknown UNKNOWN
1 ethernet ETHERNET
2 wifi WIFI
3 2g CELL_2G
4 3g CELL_3G
5 4g CELL_4G(中国现在也会出现这个值,是hspa+)
? none NONE

接下去是一个更大的特例,这就是firefox,他使用了新版规范,所以返回的是bandwidth;不过很奇怪的是只要是wifi或3G他就返回20,如果是2G返回的就是0.1953125;每次都一样不管现在网络状态到底是多少。这个问题还会继续跟进。

给大家提供一个demo地址:http://honglei.net/demo/net.html

Demo中对不支持connection的浏览器直接返回了{type:0},这样就很便利解决了某些浏览器不支持的问题;对于不支持又能上网的浏览器处理为“unknown”当然也是合乎情理的。

很多工程师觉得这个功能支持还不好,还是先不使用的好;但是我觉得只要错误能被处理,风险能被把控,为什么不给那些先天优秀的客户提供更友好的体验呢。

今天同学说到让后端判断速度,这个可能有点难;不过确实可以通过每次的异步请求去得到用户大概的速度(加载的时间和文件大小其实前端都能得到),然后在选择性的提供某些服务,之后也准备向这个方向上多思考下。

另类的用户贡献

一说到用户贡献,一般都会想到UGC(User Generated Content),觉得是用户发的文章,用户发的照片,用户发的视频这类用户原创内容。

但是大家也要关注到用户无意间的贡献(也可以所是用户无意间的反馈),比如用户听首歌,看了一个视频都会产生很多的动作,这可能有转移到另外一个领域——“数据挖掘”了,但是我更愿意叫他们是用户贡献,因为这是你所有用户默默作出的贡献。

怎样设计这类“默默的用户贡献”呢?
首先用户明确业务的目标,你的设计不能打断或影响用户使用业务的方式和流程;然后抓住要们所需要的数据重点,通过技术手段采集他们,并且将他们“偷偷”的传回服务器。

“默默用户贡献”的使用?
我们之所以设计这个环节,就是希望这些用户贡献能给我们带来一些东西,所以一定要用好他们,因为这类的用户贡献基数非常大,并且不是可以进行的贡献,存在不确定性,所以需要有很好的统计算法来分析数据。

说到这个案例我现在也还会兴奋,这个是07年在雅虎音乐的时候的一个小设计;当时困扰音乐搜索质量的有几个方面,歌曲的正确定,歌曲的连通率,是否Spam(其中分成音乐直接跳转到网页,音乐只有一段,音乐中间有广告);这些问题其实都可以通过用户来帮忙搞定。
当时我设计了一个JS的小功能,插入在IE用户(FF没有办法取得某些数据,并且IE用户基数足够大)的音乐播放页面中;这个JS的功能是读取歌曲加载后的时长信息,记录用户播放到关闭(换歌)的时间,记录用户打开页面到开始播放的时间;其实就将这么简单的三个数据设置一个阀值,超过后就将它们传回服务器。
分解下设计中的三个值:
歌曲的总时长:这个可以判断出音乐是否完整,以及是否中间加了广告;我们很意外的得到了一个非常有意思的值”5.099“,如果是跳转别的页面的歌曲,时长总是5.099
用户播放歌曲的时间:如果时间较短一般可以判断歌曲有质量问题,或则不是那首歌曲
打开页面到开始播放的时长:这个恰好反映的连通的速度,也就是连通率,并且还是以用户准的连通率,不是我们自己服务器测试出来的(服务器的网络环境和用户真的差不少)
当然,以上取得的是海量数据,一定要通过统计方法得出问题最大的那些,然后人工解决。
因为上面这个小操作,雅虎音乐搜索在那个时期的品质是超越了百度音乐和搜狗音乐的(判断依据是我们内部的测试,如果大家要喷也没有办法)。

其实这样的应用还有很多,比如google的某些数据采集(我猜测的、个人没有证实过),因为Google地图手机版本的使用量很大,所以完全通过Google地图来采集基站和热点数据;用户打开地图一般都会打开GPS功能,这时Google就可以通过程序抓去能搜索到的基站和热点信息,并且和经纬度信息一起返回给服务器,这样就能非常快速有便捷的得到那些有用数据,然后通过海量数据的分析,入库后给其他用户使用。

再比如foursquare,通过一个很小的签到游戏可以得到那个经纬度的活地图,能知道那个店在那并且是否还在。