可以直接存储任何类型的数据,如 js任何类型的数据 、blob流。 可以创建索引,提供高性能搜索功能。 采用事务,保证数据的准确性和一致性。 4、cookie cookie指的就是会话跟踪技术。...(key) // 删除单个数据 sessionStorage.clear() // 删除全部 7、application cache application cache是离线缓存技术,将大部分的图片、js...CacheStorage常见方法: CacheStorage.match() - 检查给定的 Request 对象是否是 CacheStorage 对象跟踪的 Cache 对象中的键,返回Promise...CacheStorage.delete() - 删除cache对象 CacheStorage.keys() - 含有keys中字符串的任意一个,则返回一个promise对象。...9、flash缓存 flash缓存也是页面通过js调用flash读写特定的磁盘目录,达到本地数据缓存的目的。这是要基于flash的,所以基本不用。
CacheStorage 对象 ❝CacheStorage 对象是映射到 Cache 对象的字符串「键/值存储」 ❞ CacheStorage 提供的 API 类似于「异步 Map」。...CacheStorage 的接口通过全局对象的 caches 属性暴露出来。...console.log(caches); // CacheStorage {} CacheStorage 中的每个缓存可以通过给 caches.open()传入相应「字符串键」取得。...Cache 对象跟 CacheStorage 一样,类似于「异步 Map」。 Cache 键可以是 URL 字符串,也可以是 Request 对象。这些键会「映射」到 Response 对象。...()都支持可选的 options 对象,它允许通过设置以下属性来配置 URL 匹配的行为 cacheName: 只有 CacheStorage.matchAll()支持。
delete tag.attributes.src tag.attributes.async = false } tag.innerHTML = \`// From CacheStorage...inlineTag(tag, innerHTML)) ) } else { console.info(\`From CacheStorage...使用时,通过传入特定的 正则表达式,筛选出需要缓存的静态 JS、CSS 文件,在 HTML 页面中注入一段代码。...当浏览器运行到这段代码时,带有特定标识符的 js、css 文件通过 cache.add() API 下载,并储存到 CacheStorage 中,接着把下载到的代码通过 script 标签注入到 HTML...).then(r => r); }) ); } }); 此方案为使用 Service Worker 技术中对 fetch 方法的监听,当 fetch 请求失败时,自动使用 CacheStorage
caches.match() 用于检查 CacheStorage 中是否存在以 Request 为 key 的 Cache 对象。...caches.keys() 用于返回 CacheStorage 中所有 Cache 对象的 cacheName 列表。...它提供了一系列管理存储的 JS 接口: cache.put() 用于把 Request / Response 对象体放进指定的 Cache。...JS没有变化,则直接显示当前激活态。...主要使用的技术: App Manifest Service Worker cacheStorage App Manifest 添加 manifest.json 文件。
这个范围就是通过放置Service Worker的js文件的目录决定的,也就是Service Worker所在目录以及所有的子目录。...CacheStorage API 在Service Worker中,我们通常使用CacheStorage来管理缓存。 CacheStorage是一种全新的缓存层,让我们对缓存具有完全的控制权。...CacheStorage为我们提供了一系列的api来操作缓存。这些api都是基于Promise的,所有方法的返回值都是一个Promise。...CacheStorage和http缓存的关系 ? 在发送http请求的时候,请求会先到达Service Worker。...CacheStorage不能取代过去的HTTP缓存。CacheStorage因为Service Worker的作用域问题,只能控制范围内的缓存,无法控制cdn和在其他域下的接口数据。
离线应用相关接口 CacheStorage 在浏览器上的引用名叫 caches,CacheStorage 是多个 Cache 的集合,而每个 Cache 可以存储多个 Response 对象。...代码 以下是一个实现离线应用的demo – ServiceWorkerDemo 这个demo是一个简陋的离线应用,会缓存所有静态资源请求,即使你修改了index.js和index.css文件,刷新页面还是没有变化...const CACHE_KEY = 'demo'; const CACHE_FILES = [ '/', 'bg.jpg', 'index.js', 'index.css
首先,PWA的能够通过cacheStorage缓存普通的图片、JS、CSS资源。...对于直出HTML,我们可以配合PWA,将从后台直出的文件,缓存到cacheStorage,在下一次请求时,优先从本地缓存中获取,同时发起网络请求更新本地html文件。...浏览器获取到数据,并且渲染好的html,能够通过outerHTML方法,将html页面缓存到cacheStorage中,第二次访问仍然优先从本地获取,同时发起html请求,通过对比其中唯一标识的差异,决定是否需要更新...其核心思路是,借助浏览器启用一个JS-Runtime,提前将下载好的html模板及预取的feed流数据进行渲染,然后将HTML设置到内存级别的MemoryCache中,从而达到点开即看的效果。...不管从加载速度还是页面流畅度小程序都要高于H5页面,其原因是通过在架构上对开发进行规范化和约束化,小程序内部将webview渲染和js执行分离开来,然后通过离线包,页面拆分,预加载页面等一系列优化手段,
Replace([]interface{}, string) error Resync() error } type cache struct { // cacheStorage bears...the burden of thread safety for the cache cacheStorage ThreadSafeStore // keyFunc is used to
与普通 JS 运行环境相比,Service Workers 有如下特点: 无法直接访问 DOM , 可通过 postMessage 发送消息与页面通信; 能够控制页面发送网络请求; 必须在 HTTPS.../sw.js') }) } // sw.js console.log('service worker 注册成功') self.addEventListener('install...方法一:skipWaiting 问题:同一个页面,前半部分的请求是由 sw.v1.js 控制,而后半部分是由 sw.v2.js 控制。...离线缓存:配合 CacheStorage 可以将应用中不变化的资源或者很少变化的资源长久的存储在用户端,提升加载速度、降低流量消耗、降低服务器压力,提高请求速度,让用户体验更加丝滑 消息推送:激活沉睡的用户...定时同步:周期性的触发Service Worker脚本中的定时同步事件,可借助它提前刷新缓存内容 结合CacheStorage、 Push API 和 Notification API 参考链接: https
${qs.stringify(query)}` : url if (this.cacheStorage) { if (this.cacheStorage.getItem(key)...) { return Promise.resolve(this.cacheStorage.getItem(key)) } else { return...this.preSend({ url: key, headers, method: 'GET' }).then(data => { this.cacheStorage.setItem
就是真正保存数据的地方,第二个keyFunc,就是往Indexers中添加记录的时候,为该记录生成对象主键的方法 type cache struct { // cacheStorage bears the...burden of thread safety for the cache cacheStorage ThreadSafeStore // keyFunc is used to make the...NewIndexer方法的入参来设置的, func NewIndexer(keyFunc KeyFunc, indexers Indexers) Indexer { return &cache{ cacheStorage...func (c *cache) IndexKeys(indexName, indexKey string) ([]string, error) { return c.cacheStorage.IndexKeys...(indexName, indexKey) } 打开c.cacheStorage.IndexKeys方法,如下所示,没有任何意外,只要找到Index就算成功了 func (c *threadSafeMap
SW.js 的更新 SW.js 的更新不仅仅只是简单的更新,为了用户可靠性体验,里面还是有很多门道的。 首先更新 SW.js 文件,这是最主要的。只有更新 SW.js 文件之后,之后的流程才能触发。...SW.js 的更新也很简单,直接改动 SW.js 文件即可。浏览器会自动检查差异性(就算只有 1B 的差异也行),然后进行获取。...整个流程图为: 如果上述步骤成功后,原来的 SW.js 就会被清除。但是,以前版本 SW.js 缓存文件没有被删除。...它的相关操作方法也有很多: CacheStorage.match(request,{options}):在所有的 Cache Object 中进行缓存匹配。...hasCache) { // 没存在 } else { //... } }).catch(function() { // 处理异常 }); CacheStorage.open
资源更新检测:使用CacheStorage.keys()和CacheStorage.delete()方法,定期检查并清除过期的缓存。
是一个线程安全的存储 cacheStorage ThreadSafeStore // keyFunc 用于计算对象键 keyFunc KeyFunc } 我们可以看到这个 cache 包含一个...= nil { return KeyError{obj, err} } // 将对象添加到底层的 ThreadSafeStore 中 c.cacheStorage.Add(key, obj)...= nil { return KeyError{obj, err} } c.cacheStorage.Update(key, obj) return nil } // 删除cache中的对象...(c *cache) List() []interface{} { return c.cacheStorage.List() } // 得到cache中所有的对象键 func (c *cache)...() Indexers { return c.cacheStorage.GetIndexers() } // 得到对象obj与indexName索引器关联的所有对象 func (c *cache)
client-go/tools/cache/store.go type KeyFunc func(obj interface{}) (string, error) type cache struct { cacheStorage...= nil { return KeyError{obj, err} } c.cacheStorage.Add(key, obj) return nil } func (c *cache...//k8s.io/client-go/tools/cache/store.go func NewStore(keyFunc KeyFunc) Store { return &cache{ cacheStorage...map and a lock. func NewIndexer(keyFunc KeyFunc, indexers Indexers) Indexer { return &cache{ cacheStorage
JavaScript在Node.js(Node.js是一个基于Chrome V8引擎的JavaScript运行环境,使用了事件驱动、非阻塞式I/O的模型,使其轻量又高效,它使用的包管理器为npm,是目前全球最大的开源生态系统...Chrome浏览器调试模式,Application左侧列举了现代浏览器的8种缓存机制HTTP文件缓存、localStorage、sessionStorage、indexDB、Web SQL、Cookie、CacheStorage...cacheStorage:在ServiceWorker规范中定义的,用于保存每个ServiceWorker(后续博文会单独介绍)声明的Cache对象,未来可能替代Application Cache的离线方案
坑点分析及解决 开发前需要进入公众号后台配置”JS接口安全域名”及“授权回调页面域名”,如果服务端要获取token,还需要配置”IP白名单”,详细信息可以查阅官网。...// 分享标题 desc: '描述', // 分享描述 link: share_link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS...WeChatClient from wechatpy.client.api import WeChatJSAPI from wechatpy.session import SessionStorage class CacheStorage...微信客户端 wxclient = WeChatClient( appid=settings.WX_APP_ID, secret=settings.WX_APP_SECRET, session=CacheStorage...此时a,b页面域名都要做js安全域名配置。b页面需要携带用户信息,我们的策略是携带sessionid。
安装 npm install web-pwa // 或者使用 yarn yarn add web-pwa ## DEMO 首先说明一下,我们要完成的目标: * 注册 sw * 添加 app.js...例如:注册,发送消息等 * WebCaches: 用来处理 `CacheStorage` 缓存的相关操作。...#### 权限申请SW.register('sw.js') .then(reg=>{}) 它返回的是 Promise 对象。...// 只匹配 js 文件 WebCaches.table(tableName).row('/*.js') .get().then(res=>{ console.log(res); }) 通过...request 匹配: var js = new Request('/app.js'); Caches.table(tableName).row(js) .get().then(res=>{
领取专属 10元无门槛券
手把手带您无忧上云