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

    网站性能优化
                         laiqun@msn.cn
     
    1. 缓存
    1. 条件GET—默认自带
      • →If-modified-since:wed,22,2006,4:15pm
      • ←Last-modified:
    2. Expires:wed,22,2006,4:15pm—需要设置
      • 缺点:要求服务器与客户端的时钟严格同步,过期后发送新的过来
    3. Expires改进 cache-control:max-age —需要设置
      • 要求:HTTP1.1
      • 改进:不再像Expires那样需要时钟同步,只需在max-age中设置好倒计时。
      • 使Expires像cache-control:max-age可以使用Apache的mod_expires插件。
    4. ETag 设置为禁止—需要设置
      • 服务器唯一标识在分布式集群服务器下很难命中缓存

    代理缓存

    • 缓存响应的各个版本,例如有压缩的,无压缩的 Vary:Accept-Encoding,useragent
    • 禁用缓存 Vary:* 或者 Cache-control:Private

    问题:

    • 缓存之后,你更新了那个文件,而这时候客户端还会使用缓存的旧文件。怎么处理这种情况?

      答:在书写html的时候,在上面加上版本号,服务器更新文件后,更新html中引用文件的版本号,这样客户端的缓存就无法命中了,强制从服务器下载更新后的文件。

    2. 其它优化

    1. 减少HTTP请求:使用图像拼合技术、文件合并
    2. 使用CDN:自动寻找最佳网络线路,加快请求响应速度
    3. css放在head里:可以防止FOUC(无样式内容闪烁)
      • 原理:浏览器用DOM树和样式表进行渲染(rending),样式表放在底部,会引起重新渲染
    4. script放在底部:防止阻塞并行下载
      • 原理:javascript肯能使用document.write来生成页面,例如两个js中都用了document.write()并行下载并执行的时候会产生冲突。
      • 备选方法1—分次下载:设置cookie后,等第二次再下载
      • 备选方法2—ajax注入下载
    5. 不使用CSS表达式
      • 原理:css 表达式的计算过于频繁,每次鼠标移动都会产生成千上万的表达式计算
    6. 使用外部的css和javascript
      • 原理:使他们可以被缓存
    7. 用去空白、混淆来精简javascript
      • 压缩:去掉空格、tab缩进等无意义的字符 要求:javascript书写式不能省略";",否则会出现语法错误
      • 混淆:用长单词代替短单词,这样文件的体积会减小,且非常不利于阅读,好处是可以防止别人破解你的代码
    8. 去重javascript
      • 如果是多人协作开发的话,很可能一个库引用了两份
    9. 使用gzip来压缩传输
    10. 避免重定向
      • 跟踪技术—知道用户离开你的网站之后去了哪里
      • url参数 假设我们的网站是www.yahoo.com url为www.yahoo.com/**http%3a//en.wikipedia.org/我们服务器放回一个302重定向,并获取到后面的url地址,就知道用户离开www.yahoo.com之后去了哪里
      • 空白的img标签-beacon信标 <a> 单机后触发一个函数 函数中有一个空的get请求,里面有url参数 <a href="www.wiki.com" onClick="result Beacon(this)" >Performance wiki</a><script>var beacon; function resultBeacon(anchor){beacon = new Image(); beacon.src="www.yahoo.com/?"++escape(anchor.href)}</script>
    11. 避免过度DNS查找

    3. 进阶

    1. 线程长时间运行导致的界面响应卡顿
      • 使用Work线程或者Gear插件来实现多线程
      • 使用定时器,有间断的执行脚本或者挂起脚本
    2. 脚本分为初始化和非初始化两部分,非初始化部分可以延迟加载
      • script标签的defer属性
    3. 无阻塞脚本
      • ajax(XHR) 注入下载 eval 或者修改script标签的src属性
    4. 脚本合并
      • 这样可以减少HTTP请求数目
    5. javascript的执行效率
      • 二分查找
      • 避免使用字符串+运算,使用字符串数组后join的方法
      • 使用事件委托:利用事件冒泡机制,减少重复代码
    6. 图像优化
      • 压缩 裁剪 降低分辨率

    4. 参考书籍

    1. 《高性能网站建设指南》—Steve Souders      俗称:狗书
    2. 《高性能网站建设进阶指南》—Steve Souders  俗称:鹿书

    5. 工具

    YSlow 图片滚动加载、渐进渲染
    chrome profle  timeline 
    使用字体图标和CSS--不过分依赖图片





  • 相关阅读:
    MVC新手指南
    BufferedReader方法-----Scanner方法
    sin=in.readLine();
    STL:string 大小(Size)和容量(Capacity)
    2014=9=24 连接数据库2
    2014=9=24 连接数据库1
    常用英语单词
    Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
    linux 常用快捷键
    启动sh文件注意的问题
  • 原文地址:https://www.cnblogs.com/laiqun/p/5478453.html
Copyright © 2011-2022 走看看