网站优化

前端如何优化页面 作者:骐翔网站建设来源:http://www.datacats.cn2019-02-19 17:01 前端如何优化页面
前端如何优化页面

前端如何优化页面:

一、PC端优化策略
      主要包括网络加载类、页面渲染类、CSS优化类、JavaScript执行类、缓存类、图片类、架构协议类等几类;

1、网络加载类
(1)减少HTTP资源请求次数:
      在前端页面中,通常建议尽可能合并静态资源图片、JavaScript或CSS代码,减少页面请求数和资源请求消耗,这样可以缩短首屏加载时间,通过构建工具合并雪碧图、CSS、JavaScript文件等都是为了减少HTTP资源请求次数,另外也要尽量避免重复的资源,防止增加多余请求;
(2)减少HTTP请求大小:
      除了减少HTTP资源请求次数,也要尽量减少每个HTTP请求的大小,如减少没必要的图片、JavaScript、CSS 及 HTML 代码,对文件进行压缩优化,或者使用gzip压缩传输内容等都可以用来减少文件大小,缩短网络传输等待时延,使用构建工具来压缩静态图片资源以及移除代码中的注释并压缩,目的都是为了减少HTTP请求的大小;
(3)将CSS或JavaScript放到外部文件中,避免使用style或script标签直接引入:
      在HTML文件上引用外部资源可以有效利用浏览器的静态资源缓存,但有时候在移动端页面CSS或JavaScript比较简单的情况下为了减少请求,也会将CSS或JavaScript直接写到HTML里面,具体要根据CSS或JavaScript文件的大小和业务的场景来分析,如果CSS或JavaScript文件内容较多,业务逻辑较复杂,建议放到外部文件引入;
<link rel="stylesheet" href="/css/master.css">
<script type="text/javascript" src="//cdn.domain.com/path/main.js"></script>

(4)避免页面中空的href和src:
      当<link>标签的href属性为空,或<script>、<img>、<iframe>标签的src属性为空时,浏览器在渲染过程中仍会将href属性或者src属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程,而且最终加载到的内容是无效的,因此要尽量避免;
  <!--不推荐-->
  <img src="" alt="photo" >
  <a href="">点击链接</a>

(5)为HTML指定Cache-Control或Expires:
      为HTML内容设置Cache-Control 或 Expires可以将HTML内容缓存起来,避免频繁向服务器端发送请求,在页面中的Cache-Control 或 Expires头部有效时,浏览器将直接从缓存中读取内容,不再向服务器端发送请求;
  <meta http-equiv="Cache-Control" content="max-age=7200">
  <meta http-equiv="Expires" content="Mon,20Jul201623:00:00GMT">

(6)合理设置Etag和Last-Modified:
      合理设置Etag 和 Last-Modified使用浏览器缓存,对于未修改的文件,静态资源服务器会向浏览器端返回304,让浏览器从缓存中读取文件,减少Web资源下载的带宽消耗并降低服务器负载;
<meta http-equiv="last-modified" content="Sun,05 Nov 2017 13:45:57 GMT">

(7)减少页面重定向:
      页面每次重定向都会延长页面内容返回的等待延时,一次重定向大约需要200毫秒不等的时间开销(无缓存),为了保证用户尽快看到页面内容,要尽量避免页面重定向;
(8)使用静态资源分域存放来增加下载并行数:
      浏览器在同一时刻向同一域名请求文件的并行下载数是有限的,因此可以利用多个域名的主机来存放不同的静态资源,增大页面加载时资源的并行下载数,缩短页面资源加载的时间,通常根据多个域名来分别存储JavaScript、CSS和图片文件;
<link rel="stylesheet" href="//cdn1.domain.com/path/main.css" >
<script src="//cdn2.domain.com/path/main.js"></script>

(9)使用静态资源CDN来存储文件:
      如果条件允许,可以利用CDN网络加快同一个地理区域内重复静态资源文件的响应下载速度,缩短资源请求时间;
(10)使用CDN Combo下载传输内容:
      CDN Combo是在CDN服务器端将多个文件请求打包成一个文件的形式来返回的技术,这样可以实现HTTP连接传输的一次性复用,减少浏览器的HTTP请求数,加快资源下载速度,例如同一个域名CDN服务器上的a.js,b.js,c.js就可以按如下方式在一个请求中下载:
<script src="//cdn.domain.com/path/a.js,b.js,c.js"></script>

(11)使用可缓存的AJAX:
      对于返回内容相同的请求,没必要每次都直接从服务端拉取,合理使用AJAX缓存能加快AJAX响应速度并减轻服务器压力;
$.ajax({
     url: url,
     type: 'get',
     cache: true, //推荐使用缓存
     data: {},
     success() {},
     error() {}
    });

(12)使用GET来完成AJAX请求:
      使用XMLHttpRequest时,浏览器中的POST方法会发起两次TCP数据包传输,首先会发送文件头,然后发送HTTP正文数据,而使用GET时只发送头部,所以在拉取服务端数据时使用GET请求效率更高;
$.ajax({
  url: url,
  type: 'get', //推荐使用get完成请求
  data: {},
  success() {},
  error() {}
});

前端如何优化页面

(13)减少Cookie的大小并进行Cookie隔离:
      HTTP请求通常默认带上浏览器端的Cookie一起发送给服务器,所以在非必要的情况下,要尽量减少Cookie来减少HTTP请求的大小,对于静态资源,尽量使用不同的域名来存放,因为Cookie默认是不能跨域的,这样就做到了不同域名下静态资源请求的Cookie隔离;
(14)缩小favicon.ico并缓存:
      有利favicon.ico的重复加载,因为一般一个Web应用的favicon.ico是很少改变的;
(15)推荐使用异步JavaScript资源:
      异步的JavaScript资源不会阻塞文档解析,所以允许在浏览器中优先渲染页面,延后加载脚本执行,例如JavaScript的引用可以如下设置,也可以使用模块化加载机制来实现;其中使用async时,加载和渲染后续文档元素的过程和main.js的加载与执行是并行的;使用defer时,加载后续文档元素的过程和main.js的加载是并行的,但是main.js的执行要在页面所有元素解析完成之后才开始执行;
<script src="main.js" defer></script>
<script src="main.js" async></script>

(16)消除阻塞渲染的CSS及JavaScript:
      对于页面中加载时间过长的CSS或JavaScript文件,需要进行合理拆分或延后加载,保证关键路径的资源能快速加载完成;
(17)避免使用CSS import引用加载CSS:
      CSS中的@import可以从另一个样式文件中引入样式,但应该避免这种用法,因为这样会增加CSS资源加载的关键路径长度,带有@import的CSS样式需要在CSS文件串行解析到@import时才会加载另外的CSS文件,大大延后CSS渲染完成的时间;

<!--不推荐-->
<style>
@import "path/main.css";
</style>

<!--推荐-->
<link rel="stylesheet" href="//cdn1.domain.com/path/main.css" >

2、页面渲染类
(1)把CSS资源引用放到HTML文件顶部:
      一般推荐将所有CSS资源指定在HTML文档<head>中,这样浏览器可以优先下载CSS并尽早完成页面渲染;
(2)JavaScript资源引用放到HTML文件底部:
      JavaScript资源放到HTML文档底部可以防止JavaScript的加载和解析执行对页面渲染造成阻塞,由于JavaScript资源默认是解析阻塞的,除非被标记为异步或者通过其他的异步方式加载,否则会阻塞HTML DOM解析和CSS渲染过程;
(3)尽量预先设定图片等大小:
      在加载大量的图片元素时,尽量预先限定图片的尺寸大小,否则在图片加载过程中会更新图片的排版信息,产生大量的重排;
(4)不要在HTML中直接缩放图片:
      在HTML中直接缩放图片会导致页面内容的重排重绘,此时可能会使页面中的其他操作产生卡顿,因此要尽量减少在页面中直接进行图片缩放;
(5)减少DOM元素数量和深度:
      HTML中标签元素越多,标签的层级越深,浏览器解析DOM并绘制到浏览器中所花的时间就越长,所以应尽可能保持DOM元素简洁和层级较少;
<!--不推荐-->

<div>
  <span>
      <a href="javascript:void(0);">
          <img src="./path/photo.jpg" alt="图片">
      </a>
   </span>
</div>

<!--推荐-->
<img src="./path/photo.jpg" alt="图片" >

(6)尽量避免在选择器末尾添加通配符:
      CSS解析匹配到渲染树的过程是从右到左的逆向匹配,在选择器末尾添加通配符至少会增加一倍多计算量;
(7)减少使用关系型样式表的写法:
      直接使用唯一的类名即可最大限度的提升渲染引擎绘制渲染树的效率;
(8)尽量减少使用JS动画:
      JS直接操作DOM极容易引起页面的重排;
(9)CSS动画使用translate、scale代替top、height:
      尽量使用CSS3的translate、scale属性代替top、left和height、width,避免大量的重排计算;
(10)尽量避免使用<table>、<iframe>:
      <table>内容的渲染是将table的DOM渲染树全部生成完并一次性绘制到页面上的,所以在长表格渲染时很耗性能,应该尽量避免使用它,可以考虑使用列表元素<ul>代替;尽量使用异步的方式动态添加iframe,因为iframe内资源的下载进程会阻塞父页面静态资源的下载与CSS及HTML DOM的解析;
(11)避免运行耗时的JavaScript:
      长时间运行的JavaScript会阻塞浏览器构建DOM树、DOM渲染树、渲染页面,所以任何与页面初次渲染无关的逻辑功能都应该延迟加载执行,这和JavaScript资源的异步加载思路是一致的;
(12)避免使用CSS表达式或CSS滤镜:
      CSS表达式或CSS滤镜的解析渲染速度是比较慢的,在有其他解决方案的情况下应该尽量避免使用;
//不推荐
.opacity{
    filter : progid : DXImageTransform.Microsoft.Alpha( opacity = 50 );
}

二、移动端优化策略
1、网络加载类
(1)首屏数据请求提前,避免JavaScript文件加载后才请求数据:
      为了进一步提升页面加载速度,可以考虑将页面的数据请求尽可能提前,避免在JavaScript加载完成后才去请求数据,通常数据请求是页面内容渲染中关键路径最长的部分,而且不能并行,所以如果能将数据请求提前,可以极大程度缩短页面内容的渲染完成时间;
(2)首屏加载和按需加载,非首屏内容滚屏加载,保证首屏内容最小化:
      由于移动端网络速度相对较慢,网络资源有限,因此为了尽快完成页面内容的加载,需要保证首屏加载资源最小化,非首屏内容使用滚动的方式异步加载,一般推荐移动端页面首屏数据展示延时最长不超过3秒,目前中国联通3G的网络速度为338KB/s (2.71Mb/s),所以推荐首屏所有资源大小不超过1014KB,即大约不超过1MB;
(3)模块化资源并行下载:
      在移动端资源加载中,尽量保证JavaScript资源并行加载,主要指的是模块化JavaScript资源的异步加载,例如AMD的异步模块,使用并行的加载方式能够缩短多个文件资源的加载时间;
(4)inline首屏必备的CSS和JavaScript:
      通常为了在HTML加载完成时能使浏览器中有基本的样式,需要将页面渲染时必备的CSS和JavaScript通过<script>或<style>内联到页面中,避免页面HTML载入完成到页面内容展示这段过程中页面出现空白;
<!DOCTYPE html>

<head>
  <meta charset="UTF-8">
  <title>样例</title>
  <meta>
  <style>
    /*必备的首屏CSS*/
    html,
    body {
      margin: 0;
      padding: 0;
      background-color: #ccc;
    }
  </style>
</head>

<body>
</body>

</html>

(5)meta dns prefetch设置DNS预解析:
      设置文件资源的DNS预解析,让浏览器提前解析获取静态资源的主机IP,避免等到请求时才发起DNS解析请求,通常在移动端HTML中可以采用如下方式完成:
<!--cdn域名预解析-->
<meta http-equiv="x-dns-prefetch-control" content="on" >
<link rel="dns-prefetch" href="//cdn.domain.com" >

(6)资源预加载:
      对于移动端首屏加载后可能会被使用的资源,需要在首屏完成加载后尽快进行加载,保证在用户需要浏览时已经加载完成,这时候如果再去异步请求就显得很慢;
(7)合理利用MTU策略:
      通常情况下,我们认为TCP网络传输的最大传输单元(Maximum Transmission Unit,MTU)为 1500B,即一个 RTT(Round-Trip Time,网络请求往返时间)内可以传输的数据量最大为1500字节,因此在前后端分离的开发模式中,尽量保证页面的HTML内容在1KB以内,这样整个HTML的内容请求就可以在一个RTT内请求完成,最大限度地提高HTML载入速度;
2、缓存类
(1)合理利用浏览器缓存:
      除了上面所说的Cache-Control、Expires、Etag 和 Last-Modified来设置HTTP缓存外,在移动端还可以使用localStorage等来保存AJAX返回的数据,或者使用localStorage保存CSS或JavaScript静态资源内容,实现移动端的离线应用,尽可能减少网络请求,保证静态资源内容的快速加载;
(2)静态资源离线方案:
      对于移动端或Hybrid应用,可以设置离线文件或离线包机制让静态资源请求从本地读取,加快资源载入速度,并实现离线更新;
(3)尝试使用AMP HTML
      AMP HTML可以作为优化前端页面性能的一个解决方案,使用AMP Component中的元素来代替原始的页面元素进行直接渲染;
<!--不推荐-->
<video width="400" height="300" src="//www.domain.com/videos/myvideo.mp4"
poster="path/poster.jpg">
<div fallback>
    <p>Your browser doesn’t support HTML5 video</p>
</div>
<source type="video/mp4" src="foo.mp4">
<source type="video/webm" src="foo.webm">
</video>

<!--推荐-->
<amp-video width="400" height="300" src="//www.domain.com/videos/myvideo.mp4" poster="path/poster.jpg">
<div fallback>
   <p>Your browser doesn’t support HTML5 video</p>
</div>
<source type="video/mp4" src="foo.mp4">
<source type="video/webm" src="foo.webm">
</amp-video>

(4)尝试使用PWA模式:
      PWA(Progressive Web Apps)是 Google 提出的用前沿的 Web 技术为网页提供 App 般使用体验的一系列方案;
3、图片类
(1)图片压缩处理:
      在移动端,通常要保证页面中一切用到的图片都是经过压缩优化处理的,而不是以原图的形式直接使用的,因为那样很消耗流量,而且加载时间更长;
(2)使用较小的图片,合理使用base64内嵌图片:
      在页面使用的背景图片不多且较小的情况下,可以将图片转化成base64编码嵌入到HTML页面或CSS文件中,这样可以减少页面的HTTP请求数,需要注意的是,要保证图片较小,一般图片大小超过2KB就不推荐使用base64嵌入显示了;
.class-name{
    background-image : url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAMAAABxsOwqAAAAYFBMVEWnxwusyQukxQudwQyZvgyhxAyfwgyxzAsUHQGOuA0aJAERGAFIXwSTugyEqgtqhghQZgUwQQIpOQKbuguVtQuKrAuCowp2kQlheghTbQZHWQU7SwVAVgQ6TgQlLwMeKwFOemyQAAAAVElEQVQI1y3JVRaAIAAF0UconXbvf5ei8HfPDIQQhBAAFE10iKig3SLRNN4SP/p+N08VC0YnfIlNWtqIkhg/TPYbCvhqdHAWRXPZSp3g3CWZvVLXC6OJA3ukv0AaAAAAAElFTkSuQmCC');
}

(3)使用更高压缩比格式的图片:
      使用具有较高压缩比格式的图片,如webp(需要设计降级兼容方案)等,在同等图片画质的情况下,高压缩比格式的图片体积更小,能够更快完成文件传输,节省网络流量;
<img src="//cdn.domain.com/path/photo.webp" alt="webp格式图片" >

(4)图片懒加载:
      为了保证页面内容的最小化,加速页面的渲染,尽可能节省移动端网络流量,页面中的图片资源推荐使用懒加载实现,在页面滚动时动态载入图片;
<img data-src="//cdn.domain.com/path/photo.jpg" alt="懒加载图片" >

(5)使用MediaQuery 或 srcset根据不同屏幕加载不同大小图片:
      针对不同的移动端屏幕尺寸和分辨率,输出不同大小的图片或背景图能保证在用户体验不降低的前提下节省网络流量,加快部分机型的图片加载速度,这在移动端非常值得推荐;
(6)使用iconfont代替图片图标:
      在页面中尽可能使用iconfont来代替图片图标,这样做的好处有:使用iconfont体积较小,而且是矢量图,因此缩放时不会失真;可以方便地修改图片大小尺寸和呈现颜色;但是需要注意的是,iconfont引用不同webfont格式时的兼容性写法,根据经验推荐尽量按照以下顺序书写,否则不容易兼容到所有的浏览器上;
@font-face{
   font-family:iconfont;
   src:url("./iconfont.eot");
   src:url("./iconfont.eot?#iefix") format("eot"),
   url("./iconfont.woff") format("woff"),
   url("./iconfont.ttf") format("truetype");
}


(7)定义图片大小限制:
      加载的单张图片一般建议不超过30KB,避免大图片加载时间长而阻塞页面其他资源的下载,因此推荐10KB以内,如果用户上传的图片过大,建议设置告警系统,帮助我们观察了解整个网站的图片流量情况,做出进一步的改善;
(8)强缓存策略:
      对于一些永远不会变的图片可以使用强缓存的方式缓存在用户的浏览器上;

网站建设 > 网站优化 >

网站建设

排行榜

淄博网站建设,网站设计,网站优化

  • 双十一来啦!骐翔网络为企业加油 双十一来啦!骐翔网络为企业加油
  • 淄博网站建设行业是夕阳产业吗?为什么我们一 淄博网站建设行业是夕阳产业吗?为什么我们一 淄博网站建设行业是夕阳产业吗?为什么我们一直坚持在做呢? 网站建设行内人都知道,网站是PC时代的产物,在移动互联网没有出现之前,网站是几乎每个企业在互联网展示和推广品
  • 什么叫靠谱,你需要做到这三点 什么叫靠谱,你需要做到这三点 如果你问一个老板,最理想的员工是什么样的,答案里一定有一条是靠谱;如果你问一个年轻人,最理想的另一半是什么样的,答案里也肯定有靠谱。 靠谱,是对一个人的最高评价之一
  • 淄博网站建设,小数据的价值是否有用? 淄博网站建设,小数据的价值是否有用? 淄博网站建设,小数据的价值是否有用? 无论是针对哪个个别要素品牌的剖析,一个显见的事实是这些品牌常常并不只是与一个单一的产品联络起来,一个品牌常常能随同着多种各具特
  • 淄博网站制作经费的明细 淄博网站制作经费的明细 网站制作经费的明细 网站制作经费的明细 ,网站制作建设费用没有固定的价格,影响网站建设费用的因素有哪些呢? 一、影响网站建设费用的建站模式,建站模式可分为:定制开发、
  • 新时代下,如何做好网站的建设与管理? 新时代下,如何做好网站的建设与管理? 新时代下,如何做好淄博网站的建设与管理? 近几年,网站建设十分火爆,很多企业纷纷从线下搬到线上,都在赶时髦,建立一个属于自己企业的网站。网站的建设和管理就成一个网络

关于骐翔网站建设

骐翔网站建设提供淄博网站建设,淄博网站制作,淄博做网站的一站式流程化服务,纯手工原创切图制作,满足追求高品质原创网站用户的品牌宣传需要,上云就上牛逼云。
骐翔网站建设团队有六年从业经验,整合一站式互联网智能运营服务和行业解决方案,满足企业个性化、多样化的互联网转型需求。随时、随需提供智能经营与管理服务,帮助企业全面提升经营效率,实现企业数字化智能运营,打造智慧企业,持续为客户创造商业价值。
骐翔网站建设已为1.2万家企业提供互联网运营服务和行业互联网运营解决方案,业务内容包括网站建设、搜索引擎优化、多平台竞价开户、竞价托管等。
用户遍布制造、专业服务、IT服务、建筑与房地产、流通与物流、零售等百余个行业。业务内容包括网站建设、搜索引擎优化、多平台竞价开户、竞价托管等。