可取消的请求和新的浏览器数据存储

来源:四块云科技  作者:四块科技  时间:2020-05-26

  版本亮点

  可取消的请求和新的浏览器数据存储

  js-IPFS@0.44.0已经推出,支持取消请求,为浏览器提供更精简、更有效的数据存储!

  可取消的请求和新的浏览器数据存储

  可删除的请求

  用户应该能够取消长时间的异步API操作。举个例子,如果你是CID从网络获取内容,CID不是resolveable,您应该能够为请求设置一个超时值,之后的内容将不再是寻求和控制代码将返回错误信息描述发生了什么。

  这并不像在JavaScript中看起来那么简单,因为承诺是从API调用返回来解析一段内容的,而承诺规范中没有包含取消承诺的内容。

  但是,浏览器fetch API有一个AbortSignal的概念,它可以用来中止网络请求。它们通过一个AbortController进行交互:

  const controller = new AbortController()setTimeout(() => {

  controller.abort()}, 1000)try { await result = fetch('http://example.com', {

  signal: controller.signal

  })} catch (err) { console.err(err) // prints: user aborted the request}

  我们采用了这种方法,并将其集成到每个API调用中,因此现在可以使用AbortControllers来取消请求!我们还使用这个机制为每个API调用添加一个timeout选项,它在内部使用一个AbortSignal来停止请求,并在指定的时间之后抛出一个TimeoutError:

  const cid = new CID('QmWillNeverResolve')try { await ipfs.get(cid, {

  timeout: 1000// abort after 1000ms

  })} catch (err) { console.err(err) // err is a TimeoutError}

  也可以自己滚动:

  const cid = new CID('QmWillNeverResolve')const controller = new AbortController()setTimeout(() => {

  controller.abort()}, 1000)try { await ipfs.get(cid, {

  signal: controller.signal

  })} catch (err) { console.err(err)}

  AbortSignal沿着调用堆栈一直传递到支持IPFS的libp2p和ipld组件。在这个初始版本中,IPFS层支持超时,在未来的版本中,libp2p和ipld还将使用AbortSignal释放资源,并执行任何其他必要的清理,如果请求成功完成,则会执行这些清理。

  新的浏览器数据存储

  js-IPFS@0.44.0为浏览器带来了一个新的数据存储。在浏览器中,所有块和其他返回的数据目前都存储在IndexedDB中,因为这是在编写本文时保存和查询大量用户数据的惟一方法。

  在节点和go-ipfs中,LevelDB一直是应用程序数据的首选数据存储库(尽管块已经存储在文件系统中),而go-ipfs正在向Badger迁移。

  由此产生了interface-datastore——一种用于存储由IPFS使用的数据存储所实现的键/值对的规范。在浏览器中,这是由level-js支持的数据存储层,而level-js又由IndexedDB支持。

  为了删除这里的几个层,我们创建了datastore-idb,它实现了接口-数据存储规范,由IndexedDB支持,无需通过level。

  这是什么意思?

  新的数据存储更小,更快,升级是无缝的,因为它仍然是IndexedDB的引线下:

  datastore-idb up to 44% faster and69% smaller

  batch idb x 5.26 ops/sec ±4.57% (29 runs sampled)

  batch level x 2.92 ops/sec ±3.76% (19 runs sampled)

  Fastest is batch idb

  size 37.32KB to 11.41KB

新功能

  取消API调用(#2993)(2b24f59),关闭#3015

  ipfs.block.put现在接受与go-ipfs #3015一致的pin参数

错误修正

  修复浏览器脚本标记示例(#3034)(ee8b769),关闭#3027

  不再在浏览器中生成包含所有IPLD格式的浏览器包(#3025)(e6079c1)

  向dag传递超时时的错误类型。(# 3035)(026 a542)

  移除节点全局变量和内建ins的使用,为浏览器绑定器自动停止(包括它们#2932)做好准备

  源地图不再包含在生产版本ipfs/aegir#549中

接下来是什么?

  查看js-ipfs项目路线图,其中包含未来落地的顺序组织的标题功能。

  可取消的请求和新的浏览器数据存储

  只有大的功能在路线图中被调用,预计在路线图项目之间会有很多小的漏洞修复发布!

  非常感谢所有为这个版本做出贡献的人!

  @ 5310(2条评论)

  @achingbrain(55次提交,17个PR,3个问题,33条评论)

  @alanshaw(1问题,3评论)

  @aphelionz(2条评论)

  @AuHau(1条评论)

  @autonome(1条评论)

  @bertrandfalguiere(1条评论)

  @betamos(1个PR,1个问题,7条评论)

  @bluelovers(1 PR,1条评论)

  @carsonfarmer(1次提交)

  @ codecov-io(1条评论)

  @corporatepiyush(1期)

  @dapplion(2条评论)

  @dirkmc(2次提交)

  @Gozala(5个问题,15条评论)

  @hugomrdias(11提交,4 PR,1问题,17评论)

  @jacobheun(8提交,2 PR,1问题,8评论)

  @jakehemmerle(3条评论)

  @koivunej(1条评论)

  @lidel(1次提交,2条评论)

  @mdtanrikulu(1问题,1条评论)

  @mistakia(1个公关)

  @npfoss(1次提交,1个PR,1个问题)

  @ obo20(1次提交,1个PR,1条评论)

  @oed(1条评论)

  @RobertFischer(1条评论)

  @robertkiel(1条评论)

  @rvagg(1个PR,1条评论)

  @ spasimir21(1问题,3评论)

  @stensonb(1次提交,13个PR)

  @thattommyhall(1 PR,3条评论)

  @ typhu-xyz(1条评论)

  @ vasco-santos(14次提交,15个PR,2个问题,16条评论)

  @vmx(5提交,1 PR,2评论)

  @welcome(19条评论)

  @wemeetagain(2次提交,1个PR,3条评论)

相关信息:
您可能喜欢
Copyright © 2017 iIPFS.com IPFS/FileCoin资讯站