package.json中依赖的^,~的区别

^指的是安装大版本号不变的最高版本,比如^2.2.2会安装2.max.max
~指的是安装次要版本号不变的最高版本,比如~2.2.2会安装2.2.max

git命令

git config //配置详细
git init //初始化仓库
git remote //管理远程仓库 添加、删除和修改远程分支的关联
git status //显示文件状态,红色表示已修改未提交暂存区,绿色表示已提交暂存区
git add //将文件提交到暂存区
git commit //将暂存区修改提交到本地仓库
git push //将本地更新推送远程主机
git pull //获取远程主机某个分支的更新
git branch //进行分支管理,查看、创建和删除分支
git checkout //切换分支
git merge //分支合并
git diff //比较修改
git reset //修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本
git log //记录
git revert //反做,撤销某次的提交
rebase 和 merge:
git merge会让两个分支的每一次提交都按照提交时间排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式

git rebase是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性

重定向304的问题

如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
防止304发生:
目的:线上长期更新,缓存导致使用旧的资源。
方法:标签上配置no-store,nginx上配置no-store,请求头上配置no-store
案例:一个网站每隔几天都会上线新功能,会经常变动。 js hash 不一样, 但是html文件被缓存了,导致引用的旧的js css 文件

SSR

SPA(单页应用)的缺点:
首屏打开很慢,用户首次打开要下载SPA框架及应用程序的代码,然后再渲染页面
不利于SEO搜索引擎优化
SSR解决了什么:
更快的响应时间,不用等待所有的js都下载完成,浏览器变成现实比较完整的页面
更好的SEO,我们可以将SEO的关键数据直接在后台就渲染成html,从而保证搜索引擎的爬虫能爬取到关键数据
区别:
服务器端渲染会先向后端请求数据,生成完整首屏HTML后返回给客户端
客户端渲染会等待JS下载,解析完之后再向服务器请求数据,等待过程中是什么也没有的,所以会出现首屏白页的情况
SSR:
在普通的SPA是将框架及网站页面代码发送到浏览器,然后在浏览器中生成和操作DOM,SSR则是将SPA应用打包到服务器上,在服务器上渲染出HTML后发送给浏览器,但这样的HTML页面还不具备交互能力,所以还需要与SPA框架配合,在浏览器上“混合”成可交互的应用程序。所以,只要能合理地运用SSR技术,不仅能一定程度上解决首屏慢的问题,还能获得更好的SEO。
图片说明
图片说明

DNS解析

图片说明

DNS的缓存:
DNS域名解析过程后会缓存解析结果,其中主要在两个地方缓存结果,一个是本地域名服务器,一个是用户的本地机器
递归查询和迭代查询:
图片说明

大文件上传

分片

原理:Blob表示原始数据,也就是二进制数据,同时提供了对数据截取的方法slice,而 File 继承了Blob的功能,所以可以直接使用此方法对数据进行分段截图
方法:

  • 把大文件进行分段 比如2M,发送到服务器携带一个标志,暂时用当前的时间戳,用于标识一个完整的文件
  • 服务端保存各段文件
  • 浏览器端所有分片上传完成,发送给服务端一个合并文件的请求
  • 服务端根据文件标识、类型、各分片顺序进行文件合并
  • 删除分片文件

断点续传

在切片上传成功后,保存已上传的切片信息
当下次传输相同文件时,遍历切片列表,只选择未上传的切片进行上传
所有切片上传完毕后,再调用mkfile接口通知服务端进行文件合并

问题在于怎么怎么保存上传的切片信息
1。通过locaStorage等方式保存在前端浏览器中,这种方式不依赖于服务端,实现起来也比较方便,缺点在于如果用户清除了本地文件,会导致上传记录丢失
2.服务端本身知道哪些切片已经上传,因此可以由服务端额外提供一个根据文件context查询已上传切片的接口,在上传文件前调用该文件的历史上传记录

文件上传的更进一步的思考

网上看到的,正在研究中
图片说明
##缓存
s-maxage:s-maxage的优先权大于max-age,但s-maxage只能指定public缓存设备上的缓存,public:缓存设备有很多,缓存不一定是在浏览器端的,还有可能在服务器和浏览器中间还有代理服务器作为缓存设备,比如CDN上
no-cache:不是不用缓存,而是会发起请求进一步判断缓存策略
no-store:不使用任何缓存策略
last-modified存在的问题:
1.服务端无法获取精确的修改时间,做不到返回这个值
2.文件时间修改了,内容没有变
优先级:Cache-Control>Expires>Etag>Last-modify
etag:文件内容的hash值