Web前端优化www.129028.com金沙

日期:2020-05-07编辑作者:Web前端

时间: 2019-09-07阅读: 175标签: 性能前端需要性能优化么?

一、Web前端优化最佳实践之 内容

性能优化一直以来都是前端工程领域中的一个重要部分。很多资料表明,网站应用的性能优化对于提高用户留存、转化率等都有积极影响。可以理解为,提升你的网站性能,就是提升你的业务数据(甚至是业务收入)。

1. 尽量减少HTTP请求;

合并文件,比如把多个css文件合成一个;
CSS Sprites 利用CSS background 相关元素进行背景图绝对定位;
图像地图 (在一个图像上划分不同区域映射不同的链接);
内联图像(使用data:URL scheme 在实际的页面嵌入图像数据);

性能优化广义上包含前端优化和后端优化。后端优化的关注点更多的时候是在增加资源利用率、降低资源成本以及提高稳定性上。相较于后端,前端的性能优化会更直接与用户的体验挂钩。从用户体验侧来说,前端服务 5s 的加载时间优化缩减 80%(1s) 与后端服务 50ms 的响应优化缩减 80%(10ms)相比,用户的体验提升会更大。因此很多时候,与体验相关的性能的瓶颈会出现在前端。

2. 减少DNS查找:

DNS查询完成之前浏览器不能从这个主机下载任何任何文件。
方法:DNS缓存、将资源分布到恰当数量的主机名,平衡 并行下载和 DNS查询 ;

我和一些同学接触的过程中,发现作为前端工程师,大家其实都具备一定的性能优化意识,同时也有自己的优化“武器库”,例如懒加载、资源合并、避免 reflow等等。虽然大家对性能优化都有自己的思路,不过大多是分散在某几个点,较难形成一个完整的体系。业界也有很多优质的资料,例如雅虎的性能优化 35 条,但是性能优化作为一个系统性工程,大家想要系统性地去学习并不容易。

3. 避免重定向:多余的中间访问 (不是绝对的避免,尽量减少)

定义:重定向用于将用户从一个url重新路由到另一个url;
损伤:重定向的延迟也很严重,因为它延迟了整个html文档的传输,在html文档到达之前,页面中不会呈现出任何东西,也没有任何组件会被下载,在用户与html文档之间插入重定向延迟了页面中的所有东西;

一、html文档结构标签语义化1、首先什么是语义化呢?

4. 使Ajax可缓存

Ajax页面缓存是ajax处理数据时对一些重复相同数据进行一个缓存操作,这种设计使客户端对一些静态页面内容的请求,比如图片,css文件,js脚本等,变得更加快捷,提高了页面的响应速度,也节省了网络通信资源;

语义化是指用合理HTML标记以及其特有的属性去格式化文档内容。机器在需要更少的人类干预的情况下能够研究和收集信息,让网页能够被机器理解,最终让人类受益。即用正确的标签做正确的事。

5. 非必须组件延迟加载 ,未来所需组件预加载 (异步);

2、语义化的好处或者说存在的意义

6.减少DOM元素数量 ;

① 有利于搜索引擎抓取

7. 切分组件到多个域;

主要的目的是提高页面组件并行下载能力,但不要跨太多域;

② 结构清晰的HTML在团队合作中的作用:代码可读、便于维护、提高开发效率、快速达成共识、利于二次开发。

8. 最小化iframe的数量

iframes 提供了一个简单的方式把一个网站的内容嵌入到另一个网站中。 但我们需要慎重的使用iframe。iframe的创建比其它包括script和css的 DOM 元素的创建慢了 1-2 个数量级;
   使用 iframe 的页面一般不会包含太多 iframe,所以创建 DOM 节点所花费的时间不会占很大的比重。但带来一些其它的问题:onload 事件以及连接池(connection pool)。
Iframes 阻塞页面加载
  及时触发 window 的 onload 事件是非常重要的。onload 事件触发使浏览 器的 “忙” 指示器停止,告诉用户当前网页已经加载完毕。当 onload 事件 加载延迟后,它给用户的感觉就是这个网页非常慢。
  window 的 onload 事件需要在所有 iframe 加载完毕后(包含里面的元素)才会触发。在 Safari 和 Chrome 里,通过 JavaScript 动态设置 iframe 的src 可以避免这种阻塞情况。

  1. 杜绝http 404错误;

③ 有利于盲人屏幕阅读器

二. Web前端优化最佳实践之 Server篇

使用CDN ;
内容分发网络(CDN)业务是指利用分布在不同区域的节点服务器群组成流量分配管理网络平台,为用户提供内容的分散存储和高速缓存,并根据网络动态流量和负载状况,将内容分发到快速、稳定的缓存服务器上,提高用户内容的访问响应速度和服务的可用性服务。
添加Expires或者Cache-Control信息头 ;
Gzip压缩内容;
能有效减轻网络流量的压力;
配置ETags(Entity Tag 实体标签);
属于HTTP协议的一部分,也就是所有的web服务器都应该(也确实能)支持这个特性。它的作用是用一个特殊的字符串来标识某个资源的“版本”,客户端(浏览器)来请求的时候,可以比较,如果ETag一致,则表示该资源并没有修改过,客户端(浏览器)可以使用自己缓存的版本;
尽早刷新Buffer;
Ajax请求使用GET方法 ;
XMLHttpRequest POST要两步,而GET只需要一步(注意:在IE上GET能处理的最大url长度是2k);
几个需要补充的地方:
1、“当然,ETag对多数站点性能的影响并不是很大”,应该说ETag在正确使用的情况下,会让大量的请求以304头方式响应,可以相当的节省服务器资源和带宽。
2、对于尽早刷新这点,PHP几乎是做不到的,即使执行了flush以及类似的函数,也要等到请求完全执行之后,才会输出给浏览器端。
3、Ajax使用GET和POST各有好处,GET方式可以更快响应,但是可能会有被浏览器缓存的问题,一般都需要加个随机数来避免,POST方式则不会,so,最好是根据自己的情况分别使用GET和POST 方法;
避免空src的img标签

二、css、js文件数量及大小

三、Web前端优化最佳实践之 Cookie篇

缩小Cookie大小;尽量控制cookie的大小,不要塞入一些无用的信息;

优化一般对于css、js是建议使用外联式来进行导入。我们可以对css、js做相应的规划也可以减少css、js的个数以减少http请求。同时也要注重减少重复代码,注重代码重复利用,以达到用最少的代码干最多的事。同时当项目要投入上线使用的时候,可以对css、js文件进行压缩,文件的减小可以加速文件的链接导入,以便加速网页的加载渲染。

针对Web组件使用域名无关性的Cookie;

这里说的Web组件,多指静态文件,比如图片、CSS等,客户端请求静态文件的时候,减少了Cookie的反复传输对主域名的影响;

通过在线网站对html,css,js文件压缩可参考资料:前端性能优化(一)-- 文件的压缩与合并

四、Web前端优化最佳实践之 CSS篇

把CSS放到代码页上端,浏览器能够有针对性的对HTML页面从上到下进行解析和渲染;
避免CSS表达式 ;
从页面中剥离JavaScript 与 CSS,能够有针对性的对其进行单独的处理策略,比如压缩或者缓存策略;
精简JavaScript 与 CSS (语法能简写的简写);
使用<link> 而不是@import (在IE中@import指令等同于把link标记写在HTML底部);
避免使用Filter ;

可通过使用webpack,gulp等工具对Js文件进行合并。

五、Web前端优化最佳实践之 JavaScript篇

将脚本放到HTML代码页底部;
外部引入javascript和css;
压缩javascript和css ;
移除重复脚本 ;
减少DOM访问 ;
1、缓存已经访问过的元素;
2、“离线”更新节点,再将它们添加到树中;
3、避免使用JavaScript输出页面布局--应该是CSS的事儿;
合理设计事件监听器 ;

三、图片的数量和大小

六、Web前端优化最佳实践之 Image 篇

优化图片:根据实际颜色需要选择色深、压缩 ;
优化css精灵 ;
不要在HTML中拉伸图片 ;
保证favicon.ico小并且可缓存 ;

多个服务器请求会对站点的性能产生显著的影响。对一张图片进行导入又是一个http请求,因此我们应该减少图片的导入数量以便减少http请求。此处,我们必须提到一个名词“css精灵spirit”。css精灵是指包含多个不同的图标、按钮或图形的单个图像。因此我们可以把多张背景图片合并为一张然后对背景图片进行相应的定位。同时使用PNG8格式的图片相对于GIF来说比较少。而对于内容图片,可以对其进行适当的压缩,可以加快文档内容加载,或者如果是需要用户下载的图片,小的图片可以加快用户下载的速度。

七、Web前端优化最佳实践之 Mobile(iPhone) 篇

Web前端优化最佳实践最后一部分是针对移动应用的,其实只是针对iPhone的,目前只有两条规则;

使用较为广泛的web图片格式有:JPEG/JPG、PNG、WEBP、Base64、SVG。

单个数据对象小于25k(Keep Components under 25k);

Apple官方信息指出可缓存到内存中的Web数据对象最大支持到10M,但经过测试,发现也就是25k左右;
Pack Components into a Multipart Document
--- 将Web页面组件打包成一个多部分组成的文档,其目的是减少HTTP请求。

1.JPEG/JPG

特点是有损压缩,体积小,加载快,不支持透明。

使用场景:JPG适合用于呈现热菜丰富的图片,在日常的开发中,JPG图片经常作为大的背景图、轮播图或是Banner图。比如两大电商网站对大图片的处理,就是对JPG图片应用场景的最佳写照。用JPG来呈现大图片,既可以保留图片的质量,又不会担心图片的体积,是一种比较广泛使用的方案。

缺点:在处理一些矢量图形和logo等这些线条感很强、颜色对比强烈的图片时,认为压缩就导致图片模糊非常明显。另外,JPG图像不支持透明度处理,透明图片只能用PNG来呈现了。

2.PNG-8和PNG-24

特点是无损压缩、质量高、体积大、支持透明

优点:无损压缩的高保真图片格式。8和24都是二进制数的位数,8位的PNG支持256中颜色,24位的PNG可以支持1600万种颜色。在不考虑文件大小只在乎最佳的显示效果时,推荐使用PNG-24。但是在适合使用PNG时会优先选择PNG-8

应用场景:主要用PNG来呈现小的LOGO、颜色简单对比强烈的图片或是背景。

3.SVG

特点是文本文件,体积小,不失真,兼容性好

优点:SVG是一种基于XML语法的图像格式。SVG对图像的处理不是基于像素,而是基于对图像的形状描述。

和JPG、PNG相比较,SVG文件体积更小,可压缩性更强。SVG作为矢量图最大的优点在于图片可以无限放大还不失真,一张SVG图片可以适配多种分辨率。另外SVG是文本文件,可以像写代码一样定义SVG,放在HTML中称为DOM的一部分。也可以把对图像的描述写入以.svg为后缀的文件中,在img标签中引入即可。img src="文件名.svg" alt=""

本文由www.129028.com金沙发布于Web前端,转载请注明出处:Web前端优化www.129028.com金沙

关键词:

vue限制文本框输入数字的正确姿势

时间: 2019-09-06阅读: 279标签: 数字 最近遇到一个需求,需要限制文本框输入数字,而number类型的输入框有箭头,个人不...

详细>>

www.129028.com金沙学习掌握__proto__与prototype

时间: 2019-09-08阅读: 87标签: prototype一,前言 理解 javascript 的原型链及继承 class Shape{}class Circle extends Shape{}const circle...

详细>>

jQuery选择器

时间: 2019-09-10阅读: 190标签: 选择器 选择器是Query的一个核心基础,正是有了各种丰富的选择器,才使得开发人员可以...

详细>>

Css媒体查询以及常用设置www.129028.com金沙

或者 rem是相对单位,px为固定单位。rem相对于根元素(html)定义的font-size大小而言。 @media 媒体类型 and|not|only (媒体特性...

详细>>