zoukankan      html  css  js  c++  java
  • 性能优化

    性能优化清单:(完整了解)
      yohoo:https://github.com/JohnsenZhou/Front-End-Performance-Checklist
      google:https://developers.google.cn/web/fundamentals/performance/why-performance-matters/
      可以看下自己的网站或页面是否达到要求

    http缓存:

    • http1.0:    

        一、expires,设置缓存有效期 // (不用去服务器监测,直接在本地取)
          问题:如果系统时间不对,则缓存会出错(如:当前时间是2019-9-9,系统时间是2020-9-9,则缓存永远都会过期)

        二、last-modified,设置对象的最后修改时间 // (需要去服务器监测)
          带上last-modified去服务区check一下有没有过期,如果返回304,就会直接从缓存里面返回,否则会返回一个实际的文件
          问题:文件被修改但内容没有变。因为last-modified的问题,导致了E-tag出现

    • http1.1

        一、1.max-age=num(s),设置最大缓存时间 // (不用去服务器监测,直接在本地取)
          2.public,缓存能被多用户共享
          3.private,缓存不能再用户间共享
          4.no-cache,不会被缓存
          5.no-store,不能被存储
        二、E-tag,可能在同一秒保存两次,也可能在服务器上文件修改时间不一致 // (需要去服务器监测)

          max-age + Last Modified + Etag:如果支持Etag,会优先使用Etag作为验证的标准

          让我们去设计一个资源缓存方案,应当怎么做?
            1.HTML (no-cache)
            2.CSS、JavaScript (MD5/timestamp/version + 长缓存)
            3.Image (随机名字[uid 唯一的名字] + 长缓存

    本地存储:

    • Cookies:存储数据量优先,并且每次都会带到服务器,占用带宽  

        一般不推荐在cdn上带cookie,html文件与资源文件要分域

    • localstorage:有大小限制,数据不安全;

        例:百度把所有的js和css都放在localstorage中以此来提速

        把多个数据存在一个key好?还是分开多个key存储比较好?
        存多个key读写效率更快。

        localstorage存爆了应该怎么处理?
        无论是get还是set都需要用try catch包裹,不然可能会出错

        怎么解决数据需要踢出,用什么方式踢出?
        在命名的时候需要分级,分别代表数据的重要程度,先将重要程度低的数据踢出

    • sessionStorage:很少使用,会话关闭就没有了
    • IndexDB:很少使用

        IndexDB是异步的,有可能页面都完全返回了,异步还没完成;IndexDB需要先初始化数据库

    • App Cache:大坑货,不要用

        1.可能会缓存错误页面,设置缓存运营商的劫持广告,
        2.更新中有一个文件失败了,就会全部退回上一个版本,
        3.由于是Lazy更新,如果后台接口有break change将会是大麻烦
        4.manifest文件 (一定要设置no-cache) 也有可能不小心被缓存了

    • Service Worker:App Cache太失败,以至于W3C终于明白用户需要更细致的缓存控制

    Hybrid App:
      在app中提供一个webview,在里面直接写代码,可以通过js调一些native使用的api,如图片上传能力、原生接口等。
      离线包技术:可以看成是私有service worker。

    Weex:
      尽量不要用react native和weex
      Weex,rn(react native)性能好的原因(如何解决性能问题):来自于被删减的浏览器渲染实现。
      例:在weex和rn中,css只能使用flex-box,其他如border-box不能被使用

      weex和rn解决的问题:1、可以让前端写native;2、用户可以更容易调用原生组件;
      不适合在高交互场景使用,所以在大量表单之类的场景千万不要使用

    了解flutter

    AMP(google):
      类似:MIP(百度),抄AMP
      AMP是谷歌推荐的有利于它搜索引擎做优化的网页的标准,组件非常受控。如电商网站等

  • 相关阅读:
    剑指offer(链表)
    设计模式
    谷歌Colab使用(深度学习)
    Consul与python API注册与注销
    【日志收集】之Loki
    【消息队列】之 RabbitMQ安装
    【消息队列】之NSQ安装
    Docker基础
    Python3 , Mysql5.7 , Smb 安装
    SkyWalking部署
  • 原文地址:https://www.cnblogs.com/jingouli/p/11503178.html
Copyright © 2011-2022 走看看