Shapooo / WeiBack

A Tampermonkey script to backup your weibo data.
https://greasyfork.org/zh-CN/scripts/466100-%E5%BE%AE%E5%8D%9A%E5%A4%87%E4%BB%BD
GNU General Public License v3.0
7 stars 0 forks source link

使用msedge,分段下载似乎没有起作用 #4

Closed chibimiku closed 4 months ago

chibimiku commented 4 months ago

复现使用任何一个场景(自己收藏 / 其他人首页) 访问,下载全部页面或者下载前5页,设置1页或5页 最终还是out of memory或者下载全部的页数放在一起,不能分页太容易oom了,原因不明,版本已经是最新,油猴的版本

Shapooo commented 4 months ago

复现使用任何一个场景(自己收藏 / 其他人首页) 访问,下载全部页面或者下载前5页,设置1页或5页 最终还是out of memory或者下载全部的页数放在一起,不能分页太容易oom了,原因不明,版本已经是最新,油猴的版本

使用 msedge 尝试了一下,没有复现出不分页的问题。而且单纯地只是不分页不会导致 oom,原因下面解释。

我有一些猜测:

  1. 内存使用的大头是图片,微博本身只是些文字,内存占用非常非常小。
  2. 该脚本下载图片时会缓存图片,遇到相同的图片时直接使用lru缓存,而不是重复下载相同的图片。
  3. 因为分页不影响图片缓存,图片在内存的淘汰都是lru缓存控制的,所以这个问题不太可能是因为分页。
  4. 这个lru缓存容量单位是图片数量,而不是图片的总大小。
  5. 于是遇到备份图片都非常非常大的时候,虽然只缓存了 200 张图片,但占用的空间已经非常大了。这是我的猜测。

因为我没能复现你的问题,所以你可以尝试下:

  1. 换一个人的微博备份,是否出现同样的问题。
  2. 备份时改小图片的清晰度,甚至不下载图片。

如果问题消失,说明我的推测大概为真。后续我可能会删除缓存代码,或者把缓存的大小改得更小一点。

chibimiku commented 4 months ago

复现使用任何一个场景(自己收藏 / 其他人首页) 访问,下载全部页面或者下载前5页,设置1页或5页 最终还是out of memory或者下载全部的页数放在一起,不能分页太容易oom了,原因不明,版本已经是最新,油猴的版本

使用 msedge 尝试了一下,没有复现出不分页的问题。而且单纯地只是不分页不会导致 oom,原因下面解释。

我有一些猜测:

  1. 内存使用的大头是图片,微博本身只是些文字,内存占用非常非常小。
  2. 该脚本下载图片时会缓存图片,遇到相同的图片时直接使用lru缓存,而不是重复下载相同的图片。
  3. 因为分页不影响图片缓存,图片在内存的淘汰都是lru缓存控制的,所以这个问题不太可能是因为分页。
  4. 这个lru缓存容量单位是图片数量,而不是图片的总大小。
  5. 于是遇到备份图片都非常非常大的时候,虽然只缓存了 200 张图片,但占用的空间已经非常大了。这是我的猜测。

因为我没能复现你的问题,所以你可以尝试下:

  1. 换一个人的微博备份,是否出现同样的问题。
  2. 备份时改小图片的清晰度,甚至不下载图片。

如果问题消失,说明我的推测大概为真。后续我可能会删除缓存代码,或者把缓存的大小改得更小一点。

关于分页的表述可能有点问题,我问一下是否意思是每达到x页就“下载”或者说输出一个压缩包? 因为当时oom我看console是报错太大,第一个想法是图还没输出就憋得太大结果oom。目前分几页的那个选项看上去好像没有直观的作用,可能我理解得不对。

关于修改清晰度的情况是这样的,目的基本就是下载图片所以不会去改低清晰度,换其他的wb是相同的情况,我觉得问题根源是类似的。

那根据你的想法我猜测你的判断应该差不多了,根据此前实验,手动改为一次下载10页是没问题的,然后我再改成11-20…以此类推这样是没问题的,但是1-15一般就会有问题了

Shapooo commented 4 months ago

明白你的意思了。

分页的意思是,如果不分页,所有的博文都集中在一个 html 文件里。几千几万条堆在一起不方便浏览,所以就有了分页的功能,切分成多个 html 文件保存。

你说的分成多个压缩包的问题,考虑下确实存在,可能这才是问题的根源。

暂时的解决方法:按分页保存压缩包,一个 html 压成一个包。或者我自己设一个默认的值,比如5个html压缩成一个包。

最后,该脚本只适合少量地备份,很多情况缺乏错误处理,如果备份量比较大,推荐 https://github.com/Shapooo/weiback-rs 这个工具,目前还在开发中。

chibimiku commented 4 months ago

明白你的意思了。

分页的意思是,如果不分页,所有的博文都集中在一个 html 文件里。几千几万条堆在一起不方便浏览,所以就有了分页的功能,切分成多个 html 文件保存。

你说的分成多个压缩包的问题,考虑下确实存在,可能这才是问题的根源。

暂时的解决方法:按分页保存压缩包,一个 html 压成一个包。或者我自己设一个默认的值,比如5个html压缩成一个包。

最后,该脚本只适合少量地备份,很多情况缺乏错误处理,如果备份量比较大,推荐 https://github.com/Shapooo/weiback-rs 这个工具,目前还在开发中。

你好,感謝你的回復。 這裡有點尷尬,啟動weiback-rs,登錄後界面就消失了,從日誌裡看不出什麼問題,系統就是普通的win11 pro 系統事件查看器裡也找不到相關的東西 ,login_info.json 裡面看上登錄信息是正常的

[2024-02-24T16:01:20Z INFO weiback_rs] start running... [2024-02-24T16:01:20Z INFO weiback_rs::core] starting gui... [2024-02-24T16:01:46Z INFO weiback_rs::persister] db "D:\tools\weiback-rs-v0.2.1-x86_64-pc-windows-msvc\res/weiback.db" exists [2024-02-24T16:01:46Z INFO weiback_rs::web_fetcher] login_info saved succ [2024-02-24T16:01:46Z WARN egui_glow::painter] You forgot to call destroy() on the egui glow painter. Resources will leak!

Shapooo commented 4 months ago

明白你的意思了。 分页的意思是,如果不分页,所有的博文都集中在一个 html 文件里。几千几万条堆在一起不方便浏览,所以就有了分页的功能,切分成多个 html 文件保存。 你说的分成多个压缩包的问题,考虑下确实存在,可能这才是问题的根源。 暂时的解决方法:按分页保存压缩包,一个 html 压成一个包。或者我自己设一个默认的值,比如5个html压缩成一个包。 最后,该脚本只适合少量地备份,很多情况缺乏错误处理,如果备份量比较大,推荐 https://github.com/Shapooo/weiback-rs 这个工具,目前还在开发中。

你好,感謝你的回復。 這裡有點尷尬,啟動weiback-rs,登錄後界面就消失了,從日誌裡看不出什麼問題,系統就是普通的win11 pro 系統事件查看器裡也找不到相關的東西 ,login_info.json 裡面看上登錄信息是正常的

[2024-02-24T16:01:20Z INFO weiback_rs] start running... [2024-02-24T16:01:20Z INFO weiback_rs::core] starting gui... [2024-02-24T16:01:46Z INFO weiback_rs::persister] db "D:\tools\weiback-rs-v0.2.1-x86_64-pc-windows-msvc\res/weiback.db" exists [2024-02-24T16:01:46Z INFO weiback_rs::web_fetcher] login_info saved succ [2024-02-24T16:01:46Z WARN egui_glow::painter] You forgot to call destroy() on the egui glow painter. Resources will leak!

感谢反馈。 weiback-rs 刚更新了一个 release,对日志进行了增强,麻烦试一下新版本。 后续该问题的更新麻烦移步 weiback-rs 的 issue 区,谢谢。