V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
LeeReamond
V2EX  ›  问与答

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

  •  1
     
  •   LeeReamond · Mar 16, 2021 · 2445 views
    This topic created in 1871 days ago, the information mentioned may be changed or developed.

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

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

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

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

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