溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VSCode中的歷史儲存策略是什么

發(fā)布時間:2022-04-08 09:05:09 來源:億速云 閱讀:227 作者:iii 欄目:軟件技術

這篇文章主要介紹“VSCode中的歷史儲存策略是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“VSCode中的歷史儲存策略是什么”文章能幫助大家解決問題。

VSCode 的策略

VSCode 1.66 版本的時間軸中可以展示文件本地歷史了,效果是這樣

VSCode中的歷史儲存策略是什么

針對這個功能,VSCode 也增加了一些配置:

There are also new settings to work with local history:

  • workbench.localHistory.enabled - Enable or disable local history (default: true).

  • workbench.localHistory.maxFileSize - File size limit when creating a local history entry (default: 256 KB).

  • workbench.localHistory.maxFileEntries - Local history entries limit per file (default: 50).

  • workbench.localHistory.exclude - Glob patterns for excluding certain files from local history.

  • workbench.localHistory.mergeWindow - Interval in seconds during which further changes are added to the last entry in local file history (default 10s).

右鍵點擊歷史條目,有菜單可以直接在系統(tǒng)管理器中找到文件某個歷史記錄的副本。

因此可以推斷出,VSCode 為每一個保存/撤銷等操作,在一定時間窗口(默認10s)內,保存一個文件到文件夾。通過特殊的文件命名(保留時間信息)來定位歷史記錄。

這也太粗暴了,一個文件就是一個版本唄。

Typora 的策略

然后說下當時調研的 Typora 的策略。Typora 在 macOS 上有非常精美的文件歷史回溯界面

看樣子它應該是用的系統(tǒng)的“時間機器”來實現(xiàn)版本回溯的。所以這個功能在 Windows 上也就沒有了。

Yank Note 的策略

我設想中的歷史版本,有幾個目標:

  • 最重要的目標是盡量避免數(shù)據(jù)丟失。

  • 歷史記錄不要占用太多體積,最好能增量記錄。

  • 極端情況下要方便用戶還原數(shù)據(jù)。

  • 歷史記錄應該可以標記和備注

針對第一個目標,我希望能保留用戶最近的編輯版本,不要舍棄。而 Yank Note 有自動保存功能,也就有了第二個目標,不要占用太多空間,也不要生成太多文件。所以最開始想的類似 VSCode 那種,時間窗口+文件保存的策略,就不行了。

針對第三個目標,我不想引入自定義的格式,如 Git,或者數(shù)據(jù)庫。因為如果用戶丟失了數(shù)據(jù),在軟件也不方便找到歷史記錄的情況(軟件損壞,文件誤刪等),用戶要可以進入歷史目錄,把文件找回來。

后續(xù):有個用戶誤刪了一個文檔,回收站也找不到了,就通過這種方法恢復的。

再考慮第四個目標,最終我選擇了使用 zip 文件的方式來保存文件歷史版本,雖然在寫入和讀取歷史上會消耗一點計算性能(10多兆大文件歷史記錄也基本沒感知),但最終效果還是很好的。

最終方案:

  • 每個文檔由文件名和路徑 Hash 拼出一個 zip 包文件名

  • 每次寫入文件,同時往這個 zip 文件中寫入一個新版本文件

  • 移動和重命名文件時候同步更改 zip 文件的名字

  • 最大歷史版本數(shù)可以做一個限制。

  • 版本備注和標記信息可以存在壓縮的備注字段中。

通常編輯一個文件的時候,由于自動保存的機制,當前版本和上一個版本之間的差異很小,因此理論上往壓縮文件中添加一個新的版本文件,壓縮文件整體大小增加應該很小才對。不過后來發(fā)現(xiàn)并非如此,這時我才意識到 Zip 文件壓縮的特性:每個文件分別壓縮,再合起來打包。也即是說往壓縮包新增文件的時候,并不會和其他文件一起壓縮。

針對這種情況,我采取兩次壓縮的策略:第一次把壓縮率設置為 0,僅僅打包,這樣 zip 包內都是文件的原始信息。第二次將整個打包文件壓縮一次,這下壓縮程序就可以考慮整體的信息來做壓縮了,這就實現(xiàn)了“增量更新”的目的。

后面編寫腳本測試,一個普通長度的文件,保存 1000 個版本,也才占用 50KB。

使用了幾個月下來,我的歷史文件目錄也才占用 700 多 KB 的空間,里面大部分歷史記錄文件只有幾 KB 大小。反觀 VSCode,使用這兩天歷史目錄就占用了 2M。

關于“VSCode中的歷史儲存策略是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI