关于缓存和动画

148 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

下面先来聊聊缓存

缓存分为两种:强缓存和协商缓存,根据响应的header内容来决定

强缓存和协商缓存获取资源形式都是从缓存取

但,强缓存是不发送请求到服务器,直接从缓存取,状态码是200(from cache)
而协议缓存是发送请求到服务器,通过服务器来告知缓存是否可用,可用在从缓存取,状态码是304(not modified)

强缓存相关字段有 expirescache-control。如果 cache-controlexpires同时存在的话,cache-control的优先级高于expires
协商缓存相关字段有Last-Modified/If-Modified-SinceEtag/If-None-Match

下面在来聊聊动画

动画包括JS动画和css3动画,我们来聊聊他们之间的不同吧

渲染线程分为main thread 和compositor thread,如果css动画只改变 transform和 opacity,这时整个CSS动画在compositor trhead完成;而 JS 动画则会在 main thread执行,然后出发compositor thread 进行下一步操作。特别注意的是如果改变transform 和opacity是不会layout或者paint

两者主要区别:

  1. 功能涵盖面,JS比 CSS 大
  2. 实现难度不一,CSS3比 JS 更加简单
  3. 对帧速表现不好的低版本浏览器,css3可以做到自然降级
  4. css3动画有天然事件支持
  5. css3有兼容性问题

另外我们聊聊link标签和@import 标签

我们都知道,外部引入 CSS 有2种方式,link标签和@import

link标签和@import的区别:

  1. link属于html标签,而@import 是 css提供的;
  2. 页面被加载时,link会同时被加载,而@import引用的 css 会等到页面加载结束后加载;
  3. link方式样式的权重高于@import的;
  4. link是 html标签,因此没有兼容性,而@import 只有IE5以上才能识别。

比较建议使用link标签,慎用@import方式。
这样可以避免考虑@import的语法规则和注意事项,避免产生资源文件下载顺序混乱和http请求过多的烦恼