V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

有关 LocalStorage 没有过期时间,岂不是僵尸存储越来越多?

  •  1
     
  •   LeeReamond · 2021-03-16 22:00:26 +08:00 · 1878 次点击
    这是一个创建于 1136 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,读到 localstorage 不像 cookie,没有过期时间这一说法,产生了一个疑惑。

    我感觉大多数网站应该都有使用 localstorage 的需求,毕竟谁不想存点东西呢,cookie 又太小了。但是存下去之后,如果用户关闭了网页界面,那么页面当中的 js 脚本应该是立即关闭的,不会有什么上下文管理器一类的东西来确保资源被正确释放。

    如果用户之后再次访问该网站那还好说,如果用户从此不再访问该网站的话,岂不是意味着被这个网站储存的 localstorage 存储空间会被一直占用下去直到天荒地老?

    19 条回复    2021-03-18 06:38:28 +08:00
    ASpiral
        2
    ASpiral  
       2021-03-16 23:45:57 +08:00
    @devld 按照第一个链接本地测了下,向 localStorage 存储一个长度大于 5242876 的字符串时报错,也就是容量接近 5M ?
    第二个链接是 IndexedDB,不是 localStorage 吧
    Quarter
        3
    Quarter  
       2021-03-16 23:46:22 +08:00 via iPhone
    我记得浏览器清缓存是可以清 localStorage 里面的东西的
    iConnect
        4
    iConnect  
       2021-03-17 00:08:57 +08:00 via Android
    存大文件之前还需要判断,满了或存不下,先清后用
    autoxbc
        5
    autoxbc  
       2021-03-17 00:20:13 +08:00
    @ASpiral #2 文章里说 IndexedDB,asm.js caching,Cache API,Cookies 被同一个配额工具管理
    wolfan
        6
    wolfan  
       2021-03-17 00:39:55 +08:00
    localStorage 还是可以手动清理的,而且你们都不会不定期的清扫浏览器缓存垃圾吗?
    LeeReamond
        7
    LeeReamond  
    OP
       2021-03-17 00:45:46 +08:00
    @wolfan 手动清理当然可以,不可以就太奇怪了。不过一般不会手动清理的吧,手动清理不是某安全卫士干的活?正常人就装个 chrome,chrome 又不会提示你清理
    LeeReamond
        8
    LeeReamond  
    OP
       2021-03-17 00:52:04 +08:00
    @ASpiral 这个 5M 要如何理解,是单 key 对应 5M,还是所有数据加起来不能超过 5M ?
    wolfan
        9
    wolfan  
       2021-03-17 00:56:40 +08:00
    @LeeReamond 呃…… 你真的会用浏览器?还是说你只会浏览网页?清理个缓存垃圾为什么需要 XX 卫士,右上角=更多工具=清理浏览数据 或者设置里找。都是很明显的。

    手机浏览器上不也都在设置里有个清理的选项么。
    yyfearth
        10
    yyfearth  
       2021-03-17 01:02:18 +08:00
    @LeeReamond 整个不超过 5M
    LeeReamond
        11
    LeeReamond  
    OP
       2021-03-17 01:55:12 +08:00   ❤️ 1
    @wolfan 建议提高阅读理解能力,“chrome 又不会提示你清理”的意思是 chrome 不会提示你清理,不是 chrome 不会清理。
    love
        12
    love  
       2021-03-17 09:00:04 +08:00 via Android   ❤️ 1
    这个完全不需要特别关心,因为浏览器整个占用空间不会超过可用空间的一半,否则就会开启清理进程,越长时间不用的就会被优先清理。所以呢你存储空间少的时候他会自动清理,多的时候你也不用关心,这个就相当于一个缓存而已
    ASpiral
        13
    ASpiral  
       2021-03-17 11:27:46 +08:00 via iPhone
    作为程序员应该从开发的角度去看吧,比如已有的 localStorage 数据量较大时如何清理,当向 localStorage 写入大量数据时如何处理。
    不用考虑用户怎么清理 localStorage 的数据,大部分用户根本不知道 localStorage 的存在
    ch2
        14
    ch2  
       2021-03-17 13:05:27 +08:00
    localStorage 一般用于保存只适合在本地使用的元数据,它毕竟不是保存文件或者当数据库用的,不会占多大的空间,否则就是误用
    LeeReamond
        15
    LeeReamond  
    OP
       2021-03-17 16:16:32 +08:00
    @ch2 话说,那这么说的话比如视频网站之类的,已经播放过的进度条不用重新加载,不是靠 js 存在哪个存储里,而是单纯靠浏览器的缓存策略在支撑?
    ch2
        16
    ch2  
       2021-03-17 16:44:39 +08:00
    @LeeReamond #15 浏览记录是保存在云端的
    LeeReamond
        17
    LeeReamond  
    OP
       2021-03-17 21:01:35 +08:00
    @ch2 并非浏览记录,你加载完一段视频后,不关闭网页的情况下拖动进度条是不需要再加载的,指这件事
    ch2
        18
    ch2  
       2021-03-17 21:05:41 +08:00
    @LeeReamond #17 那个包括在内
    LeeReamond
        19
    LeeReamond  
    OP
       2021-03-18 06:38:28 +08:00
    @ch2 ?我觉得你说的是另外一个东西
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3195 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:31 · PVG 22:31 · LAX 07:31 · JFK 10:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.