页面性能优化

web 前端开发,如何提高页面性能优化?

内容方面:
1.减少 HTTP 请求 (MakeFewerHTTPRequests)
2.减少 DOM 元素数量 (ReducetheNumberofDOMElements)
3.使得 Ajax 可缓存 (MakeAjaxCacheable)

针对 CSS:
1.把 CSS 放到代码页上端 (PutStylesheetsattheTop)
2.从页面中剥离 JavaScript 与 CSS(MakeJavaScriptandCSSExternal)
3.精简 JavaScript 与 CSS(MinifyJavaScriptandCSS)
4.避免 CSS 表达式 (AvoidCSSExpressions)

针对 JavaScript :
1.脚本放到 HTML 代码页底部 (PutScriptsattheBottom)
2. 从页面中剥离 JavaScript 与 CSS(MakeJavaScriptandCSSExternal)
3. 精简 JavaScript 与 CSS(MinifyJavaScriptandCSS)
4. 移除重复脚本 (RemoveDuplicateScripts)

面向图片(Image):
1.优化图片
2 不要在 HTML 中使用缩放图片
3 使用恰当的图片格式
4 使用 CSSSprites 技巧对图片优化

前端性能优化
思路:分析一个页面从输入 URL 到页面加载显示完成的所有步骤,采用 分治法 逐步优化。

  1. 优化DNS查询
    减少域名:尽量把所有的资源放在一个域名下。
    一个域名同时可以发4(IE8)或 8个请求(Chrome),请求文件少,用1个域名,文件多用多个域名。与3权衡。

  2. 优化TCP协议
    TCP连接复用,使用keep-alive:连接回复加上请求头:keep-alive。
    第一次请求不断开,第二次请求复用。
    使用http 2.0版本:多路复用,连接复用率会更高

  3. 优化发送HTTP请求
    合并JS或CSS文件
    inline image:使用data:url scheme来内连图片
    减小cookie体积,每个请求都会附带cookie,所以不要滥用cookie。
    合理使用CasheControl代替发送HTTP请求
    同时发送多个请求(浏览器自带)IE8可以同时请求下载4个的css文件,Chrome可以同时请求下载8个 。

  4. 优化接受响应
    设置Etags:浏览器重复与请求服务器一样的文件,ETag响应304。
    Gzip压缩大文件 使用macos gzip,npm server gzip gzip 文件名
    其响应头为Content-Encodinging:gzip,先压缩接收到再解压缩。缺点:耗费浏览器CPU,权衡

  5. 优化DOCTYPE
    不能不写,不能写错

  6. 优化CSS、JS请求
    使用CDN:用CDN请求静态资源同时可以增大同时下载数量,内容分发网络(CDN)可以使请求总时间降低,也可以减少cookie
    CSS放在head里:使其尽早下载,因为chrome需要下载完所有的css后才渲染页面
    JS放在body里的最后:尽早显示整个页面,获取节点。

  7. 使用懒加载
    组件懒加载

    <span style="color:#000000"><code> const xxx =()=>import('./components/xxx.vue')
    </code></span>

    路由懒加载

  8. 优化用户体验
    用户看到哪些内容就请求哪些内容
    加一个loading动画用户会感觉时间变快

  9. 减少监听器,使用事件委托

    <span style="color:#000000"><code class="language-html">    <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>body</span><span style="color:#999999">></span></span>
            <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>ul</span><span style="color:#999999">></span></span>
                <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>li</span><span style="color:#999999">></span></span>1<span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span><span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>li</span><span style="color:#999999">></span></span>2<span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span><span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>li</span><span style="color:#999999">></span></span>3<span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span><span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>li</span><span style="color:#999999">></span></span>4<span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span>
            <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>ul</span><span style="color:#999999">></span></span>
            <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"><</span>script</span><span style="color:#999999">></span></span>
                <span style="color:#cc99cc">let</span> liList <span style="color:#99cc99">=</span> document<span style="color:#999999">.</span><span style="color:#6699cc">querySelectorAll</span><span style="color:#999999">(</span><span style="color:#99cc99">'li'</span><span style="color:#999999">)</span>
    
                <span style="color:#999999">// liList[0].onclick = ()=>console.log(1)</span>
                <span style="color:#999999">// liList[1].onclick = ()=>console.log(2)</span>
                <span style="color:#999999">// liList[2].onclick = ()=>console.log(3)</span>
                <span style="color:#999999">// liList[3].onclick = ()=>console.log(4)</span>
                <span style="color:#999999">//监听太多</span>
    
                <span style="color:#cc99cc">let</span> ul <span style="color:#99cc99">=</span> document<span style="color:#999999">.</span><span style="color:#6699cc">querySelector</span><span style="color:#999999">(</span><span style="color:#99cc99">'ul'</span><span style="color:#999999">)</span>
    
                ul<span style="color:#999999">.</span><span style="color:#6699cc">onclick</span> <span style="color:#99cc99">=</span> <span style="color:#999999">(</span>e<span style="color:#999999">)</span> <span style="color:#99cc99">=></span> <span style="color:#999999">{</span>
                    <span style="color:#cc99cc">if</span> <span style="color:#999999">(</span>e<span style="color:#999999">.</span>target<span style="color:#999999">.</span>tagName <span style="color:#99cc99">===</span> <span style="color:#99cc99">'LI'</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>
                        console<span style="color:#999999">.</span><span style="color:#6699cc">log</span><span style="color:#999999">(</span>e<span style="color:#999999">.</span>target<span style="color:#999999">.</span>innerText<span style="color:#999999">)</span>
    
                    <span style="color:#999999">}</span>
                <span style="color:#999999">}</span><span style="color:#999999">//减少监听,采用事件委托</span>
            <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>script</span><span style="color:#999999">></span></span>
        <span style="color:#f2777a"><span style="color:#f2777a"><span style="color:#999999"></</span>body</span><span style="color:#999999">></span></span>
    </code></span>
  10. 优化图片大小=图片压缩

  11. 减少或合并DOM操作或使用虚拟DOM

  12. 使用setTimeout降低调用接口频率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值