总字数 756
预计阅读时间 3 分钟
本着不折腾不舒服的原则, 之前的图片迁移与构建时的自动同步虽然已经实现
但是仍有很多可以改进的地方
引入二分法查找
在执行本地文件列表与仓库内的文件列表比对的过程中
直接逐个比对找差异的复杂度高达O(n²)
何况还考虑之后要把本地没有, 但仓库里有的文件删除
这个执行时间太过漫长
所以考虑对文件列表排序后采用二分法查找
先写个二分法查找的js实现
1 | /** |
二分法查找既可以使用递归方式实现, 也可以用循环实现
使用二分法查找需要保证数组是有序的
虽然现在看起来接口返回的数据本身就是有序, 但是还是执行一下排序保证不会出错
先使用Array.prototype.sort
方法, 并指定排序规则进行排序
之后考虑更换为原数组基本有序的情况下, 更为高效的插入排序
1 | let storageItems = ret.items.filter((item) => { |
整体来看效率提升不少
删除仓库内的文件
要找出本地不存在但是仓库内存在的文件, 调用删除文件的接口进行删除
方法基本雷同, 甚至简单很多
当然 imagesList 也需要是有序的
1 | // 待删除的文件列表( 仓库中存在, 本地不存在 ) |
为了节约接口的调用次数, 还是选择批量删除的接口了