Background sync是Google新推出的Web API,可延迟用户行为,直到用户网络连接稳定。这样有助于保证用户想要发送的数据就是实际发送的数据。

目前存在的问题

网络是消磨用户时间最多的途径,时间浪费在网络上等待网页加载,网页呈现等一些加载数据方面。

但是有很多时候,并不希望浪费时间,更期望达成是以下的体验:1. 拿出手机;2. 实现用户目标;3. 放回手机;4. 享受人生

然而,流畅的用户体验往往都会受糟糕的网络而影响,常常会为用户呈现空白屏幕或停滞不动的进度条,用户最多能容忍10秒。尽管“Service workers”可通过加载缓存,来解决页面问题,但当客户端会发送多个数据时,会产生问题。

此刻,如果用户点击发送阪牛,必须盯着屏幕,直到信息提交完成,如果用户尝试导航或关闭页面,则使用对话框提示用户,进度还未完成,需要你耐心等待。如果用户取消连接,则需要告诉用户“抱歉,需要您重新执行操作。”有了Background Sync 所有的问题都迎刃而解。

解决方案

之前,当用户使用即时聊天记录,发送表情时,如果无网络连接,一旦有网络连接,信息就会立马发送出去。后台异步没有随着Chrome的新版本一起发布,你需要设置:“//flags/#enable-experimental-web-platform-features”并重启浏览器。

1. 打开App

2. 关闭网络连接

3. 输入信息

4. 返回主屏幕

5. 打开网络连接

6. 后台就会发送信息

后台发送消息会提升性能。App不需要处理消息发送的问题,因此App会将消息直接加入到输出流。

如何实现后台同步

真正的可扩展Web Style,可实现任何想要的功能。当用户有网络连接时,则立即触发事件。

如推送消息,使用service worker作为事件目标,当页面无法打开的时候,可帮助你打开,下面是为页面注册同步的代码:

// Register your service worker:
navigator.serviceWorker.register('/sw.js'); // Then later, request a one-off sync:
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
Then listen for the event in /sw.js: self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
 

doSomeStuff()会返回成功标记,表明操作成功或失败,一旦它被执行了,则表明同步工作。如果失败,另外一个同步操作会被尝试重新连接。

sync 标签名必须是唯一标识的。

什么情况下使用后台同步?

可以在发送数据时使用调度,聊天,消息,邮件,文档更新,设置更改时,上传照片时,任何想要发送给服务器的数据都可以使用。即使页面关闭或用户跳转到其他页面,该页面也会将数据存到Indexed DB,并且Service Worker会检索到这些信息,并且发送。

渐进增强

并不是所有的浏览器都支持Background Sync,特别是Safari和Edge 不支持Servcie workers。渐进增强功可帮助实现该功能:

if ('serviceWorker' in navigator && 'SyncManager' in window) {
navgiator.serviceWorker.ready.then(function(reg) {
return reg.sync.register('tag-name');
}).catch(function() {
// system was unable to register for a sync,
// this could be an OS-level restriction
postDataFromThePage();
});
} else {
// serviceworker/sync not supported
postDataFromThePage();
}

service workers 或background Sync 浏览器都不支持,就采取旧方法实现。

无论用户的网络连接状态好还是差,使用Background Sync 都是最佳的解决方案,可在发送数据期间防止用户跳转或关闭页面。

Background Sync 未来发展

Google预计2016年将background Sync  嵌入到Chrome中。功能上正在研究“periodic background sync”,支持时间段内的periodicsync 请求,受时间,电池状态和网络状态。

Google 新推出Background sync API的更多相关文章

  1. Android 6.0 新功能及主要 API 变更

    运行时权限 这个版本中引入了新的权限模型,现在用户可以在运行时直接管理应用程序的权限.这个模型基于用户对权限控制的更多可见性,同时为应用程序的开发者提供更流畅的应用安装和自动升级.用户可以为已安装的每 ...

  2. 【转】如何评价 Apple 新推出的编程语言 Swift?

    如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它.   ...

  3. Android零基础入门第32节:新推出的GridLayout网格布局

    原文:Android零基础入门第32节:新推出的GridLayout网格布局 本期主要学习的是网格布局是Android 4.0新增的布局,和前面所学的TableLayout表格布局 有点类似,不过他有 ...

  4. 新浪短链接API接口示例

    <?php /** * URL地址长短切换,由sina新浪短链接API生成 * User: chenqt * Date: 2016/8/23 * Time: 18:45 */ class Url ...

  5. Google谷歌推出goo.gl缩短网址服务 - Blog透视镜

    Blog部落格文章的网址,例如本篇文章:http://blog.openyu.org/2014/01/google-goo.gl.html,通常都很冗长,分享到社群网站上,容易使得讯息内容过多,同时也 ...

  6. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

    原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...

  7. 乐字节-Java8新特性之Date API

    上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API 前言: Java 8通过发布新的Date-Time API来进一步加强对日期 ...

  8. Java 8 新的时间日期 API

    1. 概述 1.1 简介 Java 8 引入了一套全新的时间日期API,操作起来更简便.简单介绍下,LocalDate和LocalTime和LocalDateTime的使用: java.util.Da ...

  9. Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

    1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp ...

随机推荐

  1. js判断字符串中是否含有指定汉语

    核心代码: function haveChinese(str,c){ if(escape(str).indexOf(escape(c))!=-1){ retrun true; } return fal ...

  2. Runloop 深入理解(转)

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...

  3. Google Chrome 调试

    [原文地址:http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html ] 在Google Chrome浏览器出来之前,我一直使用F ...

  4. php设计模式--单例模式

    单例模式(Singleton Pattern 单件模式或单元素模式) 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式是一种常见的设计模式,在计算机系统中,线程池.缓 ...

  5. 【原创】初识懒人开发库---ButterKnife

    今天再看别人代码的时候,看到了自己没见过的代码,看起来挺方便的,具体代码如下: @InjectView(R.id.iv_left) ImageView iv_left; @InjectView(R.i ...

  6. Celery Running Environment

    After running celery in my machine, I got this: Running a worker with superuser privileges when the ...

  7. Win7 关闭Window update

    1.设置注册表关闭自动更新 按组合键“windows+r”,打开“运行”栏,输入“regedit”,打开注册表找到下面的路径HKEY_CURRENT_USER\Software\Microsoft\W ...

  8. 【DP】组合数字

    Password Attacker 题意就是给 M 个关键字,组合成 N 字符长度的结果,每一个关键字都必须在 N 位的字符中出现,有多少种可能结果. 范围 1 ≤ M ≤ N ≤ 100. 举例假设 ...

  9. 用sql取出来的list需要处理成map的两种情况

    1. 原生sql: select a.id,a.name from a SQLQuery sqlQuery=this.getSession().createSQLQuery(sb.toString() ...

  10. 无法远程到2008R2的解决方法

    运维的一台Server,昨天还很正常,今天突然远程桌面无法登陆,提示“由于没有远程桌面授权服务器可以提供许可证,远程会话被中断.....”,开始以为是权限问题,试了很多方法,都无法解决,后来上网找解决 ...