利用 PWA 或者说 Service Worker 有没有可能做到完全离线的体验? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nijjba
V2EX    PWA

利用 PWA 或者说 Service Worker 有没有可能做到完全离线的体验?

  •  
  •   nijjba 2021-07-08 23:06:38 +08:00 3395 次点击
    这是一个创建于 1587 天前的主题,其中的信息可能已经有所发展或是发生改变。
    据我所知 Google Docs 这种可以做到网络断开时, 所有的操作都保存在本地, 网络恢复后再将变动更新到服务器

    那么像那些每次操作都依赖网络请求的系统, 如大部分业务系统、表格表单类的管理系统, 能否做到类似 Google Docs 的离线体验呢?
    9 条回复    2021-07-10 13:21:21 +08:00
    3dwelcome
        1
    3dwelcome  
       2021-07-08 23:16:32 +08:00
    我没用楼主提到的技术,但用了类似的理念。

    比如同一段表单提交认证代码,服务器上放一套,本地浏览器也放一套一样的,由路由来控制走哪个流程,服务器数据或者本地数据,二选一。理论上可以把用户体验优化到极致。

    这个大前提,是服务器和客户端用的语言是一致的,一套代码库。现在有了 wasm 后,世界上所有语言在我眼里看起来,长得都像 JS 。
    crclz
        2
    crclz  
       2021-07-09 02:37:25 +08:00
    谷歌能这么做是因为 Angular 强大的工程化能力允许它这么做,不是因为用了什么黑科技。
    不存在什么黑科技。离线的用户体验都是用业务逻辑代码写出来的。不存在哪一种技术可以减轻业务逻辑的负担。

    至于具体的业务逻辑,应该是和 git 一样的流程:本地 commit,然后再异步 push 到云端。如果发生冲突,则覆盖,或者强制用户保存到一个新的文档。我没用过 Google Docs,但是 Google Colab 就是这样设计的。

    “那么像那些每次操作都依赖网络请求的系统, 如大部分业务系统、表格表单类的管理系统, 能否做到类似 Google Docs 的离线体验呢?”

    回答:可以这么做,但是不推荐。如果你按照一般方法进行开发,那么 UI 就是给 api 套一层壳。如果按照能够离线使用的标准进行设计,那么还涉及到 push 的逻辑、并发修改问题、解决冲突的逻辑。既然网络不成问题,那么合并给自己额外的开发任务呢?
    test3207
        3
    test3207  
       2021-07-09 02:50:50 +08:00 via Android
    楼上说的对,手写两套逻辑+维护冲突,成本本来就很高了。另外 sw 现在在不同平台和浏览器的实现也略有不同,一不小心就会踩坑,兼容性成本更高了。非技术驱动的团队还是谨慎点考虑……
    myCupOfTea
        4
    myCupOfTea  
       2021-07-09 08:47:55 +08:00
    可以是可以 但是成本太高了
    可能比写两套系统成本都高很多
    codehz
        5
    codehz  
       2021-07-09 08:52:53 +08:00 via Android
    咱之前试过将数据保存到 sqlite 数据库,整个数据库传输到前端,然后提交时通过 session 模块( https://sqlite.org/session.html )生成 patchset,发送给服务端,然后在服务端做冲突合并。
    离线不过是推迟提交 patchset 这一步而已)
    Mark24
        6
    Mark24  
       2021-07-09 11:52:42 +08:00
    我觉得可以。很未来。
    nijjba
        7
    nijjba  
    OP
       2021-07-09 22:16:16 +08:00
    @crclz
    你说的没错,而且我 F12 看了一下 Google Docs,能做到完全离线的原因估计是这种类编辑器的产品,可以做到将所有状态存储在 IndexedDB 上,对于你说的按离线使用的标准来设计的话比较容易实现

    为什么会有这种想法,是因为我们的网页目前主要市场是东南亚、非洲、南美洲等国家,根据错误日志来看,排查到断网导致接口超时的情况非常多,想到能否利用这种技术解决该类问题

    如果按离线使用的标准重构的话,成本确实非常地高,而且 3 楼也提到了存在兼容性这块的问题
    seducer0719
        8
    seducer0719  
       2021-07-10 00:19:50 +08:00
    https://cloud.google.com/firestore/docs/manage-data/enable-offline

    google 自己的 firestore 本身就提供了类似的离线持久化功能
    opentrade
        9
    opentrade  
       2021-07-10 13:21:21 +08:00
    做不到,还是得自己写逻辑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     946 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:22 PVG 06:22 LAX 14:22 JFK 17:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86