都是风景,幸会。

什么是浏览器缓存

浏览器缓存,又称 HTTP 缓存;浏览器将用户请求过的静态资源(html、css、js、图片等),存储到电脑本地磁盘或内存中,当浏览器再次访问时,就可以直接从本地加载而不需要再去服务端请求了,这样一种行为就是浏览器缓存;

浏览器缓存是浏览器的一种机制,即浏览器缓存机制,其机制是根据 HTTP 报文的缓存标识进行的,所以也叫 HTTP 缓存机制;

••••••

A: 你本地新增的文件(服务器上没有)

C: 文件的一个新拷贝

D: 你本地删除的文件(服务器上还在)

M: 文件的内容或者mode被修改了

R: 文件名被修改了

T: 文件的类型被修改了

U: 文件没有被合并(你需要完成合并才能进行提交)

X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)

背景

当我们在做后台管理系统时,经常会遇到非常复杂的表单:

  • 表单项非常多
  • 在各种表单类型下,显示不同的表单项
  • 在某些条件下,某些表单项会关闭验证
  • 每个表单项还会有其他自定义逻辑,比如输入框可以插入模板变量、输入字符数量显示、图片上传并显示、富文本。。。
  • 在这种错综复杂的情况下,完成表单的验证和提交
  • 可以查看具体例子:例子中省略了很多琐碎的功能,只保留整体的复杂表单框架,用于展示解决方案
••••••

这几天想要把一个 git 仓库中已经存在的一个子文件夹独立成一个新的 git 仓库,并且保留之前关于此文件夹的所有提交历史。不过我对 git 并没有这么精通,只好上网搜索之。可能是因为我关键词抓得不准,搜了好一会儿才找到可行的方案,所以写篇博文记录一下,希望能帮到后来人。

另外,在 git 里这种掌控历史的感觉真棒(笑)

0x01 需求分析

我为什么会有如本文标题所述这样的需求呢?这是因为我之前把所有为 Blessing Skin 这个程序编写的插件源码都放在一个 git repo 中了,每个子文件夹中都是一个独立的插件(因为嫌麻烦所以一股脑给塞进一个仓库里了),并且对每个子文件夹中的代码的修改最后都是在这个统一仓库中提交的。该仓库差不多长这样:

••••••

功能需求

  1. 点击/滑屏切换;
  2. Tab 选项卡置底;
  3. 底部按钮悬浮,点击切换至第三个选项卡;
  4. Tab 切换内容区可滚动;
••••••

功能需求

  1. 可以拍照、单张/批量选择图片:因为应用场景是在微信小程序里边,所以单次选择图片最多9张,可以多次选择图片,图片总数量不收限制;
  2. 对选择的图片(批量)压缩:使用 Canvas 对图片进行重绘制再压缩;
  3. 显示压缩后的预览图:在页面上显示压缩后的图片;
  4. 删除图片;
  5. 最后批量上传:全部图片选择完成后,统一上传操作;
  6. 上传图片远程地址:图片上传完成之后会返回图片在服务端的远程地址,将图片远程地址上传至服务端;
••••••

Gvm 是 Go 语言多版本安装及管理的一个工具,类似于 Ruby 中的 RVM,Java 中的 Jenv(国产),Python 中的 virtualenv,Nodejs 中的 Nvm;可用于方便管理 Go 的版本,它有如下几个主要特性:

  1. 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本
  2. 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本
  3. 管理多个 GOPATH,并可编辑 Go 的环境变量
  4. 可将当前目录关联到 GOPATH
  5. 可以查看 GOROOT 下的文件差异

尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式;

••••••