V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiafaner
V2EX  ›  浏览器

在浏览器里面大多用什么方式做存储

  •  
  •   jiafaner · 2018-10-14 16:25:26 +08:00 · 3761 次点击
    这是一个创建于 2230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    过去从没在浏览器里写过存很多数据的事情,都是用 ajax 传到服务器里,在 localstorage 只存几个标志位

    现在公司项目里有一个需求,就是在浏览器本地存储一些标题,时间,作者昵称之类的,有点 sns 风格的产品,这样就能够避免过多的 ajax 请求了,毕竟感觉 80%的数据都是不变的

    百度了点资料,说浏览器的存储能力有限,localstorage 只能存 2M 的东西,我试了一下,好像我们的产品最多的情况下需要大约 15MB 到 40MB 的 json 才能存下所有不怎么变化的数据

    除了 localstorage 还有没有更好的方法做这种浏览器端的存储?

    补充一下需求,客户要求浏览器要支持 Chrome,Firefox,edge, Android, iOS, 360,猎豹

    17 条回复    2018-10-18 15:23:56 +08:00
    yingfengi
        1
    yingfengi  
       2018-10-14 16:34:08 +08:00 via Android
    有点奇葩的需求。。。
    1iuh
        2
    1iuh  
       2018-10-14 16:45:02 +08:00   ❤️ 1
    把这些数据放一个 js 文件里面,正常引用就好,服务器这边设置好返回的 Header 即可, 静态文件浏览器自己会缓存。
    fyibmsd
        3
    fyibmsd  
       2018-10-14 16:57:33 +08:00
    一本红楼梦才 1MB 好吗
    hronro
        4
    hronro  
       2018-10-14 16:58:51 +08:00   ❤️ 1
    indexDB
    jiafaner
        5
    jiafaner  
    OP
       2018-10-14 17:05:37 +08:00
    @yingfengi
    @fyibmsd

    很奇葩的需求,场景其实是因为最初用 C#给客户做的本地软件,有很多很多数据都是本地存储,后来做了第二版是 WEB 的,现在只用 WEB 导致访问太多了
    jiafaner
        6
    jiafaner  
    OP
       2018-10-14 17:06:10 +08:00
    @1iuh 用这样的方法还是有点问题,因为有时候还会变更这些数据,所以更新的时候用 js 文件,会不知道什么时候更新
    jiafaner
        7
    jiafaner  
    OP
       2018-10-14 17:09:42 +08:00
    @hronro 我百度到了这个 http://www.ruanyifeng.com/blog/2018/07/indexeddb.html

    能存 250M,足够用了

    浏览器好强大,有数据库一样的东西,谢谢啦
    imn1
        8
    imn1  
       2018-10-14 17:09:51 +08:00
    访问太频繁,请使用 APP 扫码访问
    mahonex
        9
    mahonex  
       2018-10-14 17:36:11 +08:00 via iPhone
    https://github.com/localForage/localForage 正在用 和你使用场景差不多 我们用来存二进制 效果还可以
    yhxx
        10
    yhxx  
       2018-10-14 18:27:23 +08:00
    15-40M.。。真可怕

    Web SQL 或者 IndexedDB 吧
    whileFalse
        11
    whileFalse  
       2018-10-14 18:27:25 +08:00
    你们在用客户端的思路做 web。
    如果服务器请求太多,看看是不是接口没设计好,拆的太散了。
    jiafaner
        12
    jiafaner  
    OP
       2018-10-14 18:29:00 +08:00
    @whileFalse 接口都是原来 CS 系统时候的接口改成了 HTTP 的,改服务端的成本太高了,很多逻辑都不清楚没办法只能想办法在客户端搞搞
    whileFalse
        13
    whileFalse  
       2018-10-14 18:35:11 +08:00
    @jiafaner
    几个办法:
    1. 搞个中间层服务器,把你们原始服务器上的数据添加上那些静态的玩意再返回客户端
    2. 浏览器用到哪个数据再缓存到 localstorage 里。别一上来就直接拉 15m 的缓存啊。
    3. 向楼上说的,搞个 js 存数据。js 带版本号。数据变了之后页面引用的版本号改一下。
    jiafaner
        14
    jiafaner  
    OP
       2018-10-14 18:47:15 +08:00
    @whileFalse 我们现在还准备搞一个进度条,在第一次加载的时候拉 15M 的东西回来,这样的思路好像不对

    多谢你的方案,我得想想,这些接触得少,一下子不好理解
    wbrobot
        15
    wbrobot  
       2018-10-14 21:12:24 +08:00 via iPhone
    个人变成 V2EX 网友任务系列……
    otakustay
        16
    otakustay  
       2018-10-14 22:14:00 +08:00
    那啥,其实不考虑直接用 HTTP Cache 搞定么,也没慢到哪里去
    dalieba
        17
    dalieba  
       2018-10-18 15:23:56 +08:00 via Android
    @yhxx WebSQL 已经要淘汰了,W3C 推荐用 Web Storage 或者 IndexedDB
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:56 · PVG 03:56 · LAX 11:56 · JFK 14:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.