前端页面优化:如何更快速将你的页面展示给用户?

现在许多公司往往注重后端优化,而忽略了前端优化想想如果辛苦优化了服务器,后台,排查了sql,却在最后页面加载展示的时候很慢,也得不偿失其实,前后台优化都是相辅相成的
后台优化好了,响应请求速度快,前台展示的更迅速,前台优化了不必要的请求,后台压力也会更小。

请求优化

首先我们来优化HTTP请求数

由于用户浏览的,往往只是局部网页,
所以只加载用户可视范围内的资源,就会减少一些不必要的请求,也会减少浏览器加载资源的消耗
考虑到移动端可视范围,网络流量,性能,延迟加载作用尤为明显

图片延迟加载

适合延迟加载的东西很多,最需要的当然是图片。

图片延迟加载的原理就首先将要延迟加载的图片src替换为空白图片或者参数指定的loading图
然后根据当前元素的位置(offset)来判断是否在页面可视范围(页面宽/高度+滚动宽/高度)

如果在,就将真实图片资源路径替换回src让浏览器加载

防止浏览器解析到HTML中<img>标签的src属性就开始下载资源,最好将原<img>的src属性去掉
统一配置lazyload的参数去加载loading图吧,如我们项目中这样:

 $(".main_content img").lazyload({placeholder: "/images/loading.gif",threshold:200});

再来看到lazyload的源代码,可视范围判断上下左右,写的十分完善

  $.belowthefold = function(element, settings) {var fold;if (settings.container === undefined || settings.container === window) {fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();} else {fold = $(settings.container).offset().top + $(settings.container).height();}return fold <= $(element).offset().top - settings.threshold;};$.rightoffold = function(element, settings) {var fold;if (settings.container === undefined || settings.container === window) {fold = $window.width() + $window.scrollLeft();} else {fold = $(settings.container).offset().left + $(settings.container).width();}return fold <= $(element).offset().left - settings.threshold;};$.abovethetop = function(element, settings) {var fold;if (settings.container === undefined || settings.container === window) {fold = $window.scrollTop();} else {fold = $(settings.container).offset().top;}return fold >= $(element).offset().top + settings.threshold  + $(element).height();};$.leftofbegin = function(element, settings) {var fold;if (settings.container === undefined || settings.container === window) {fold = $window.scrollLeft();} else {fold = $(settings.container).offset().left;}return fold >= $(element).offset().left + settings.threshold + $(element).width();};$.inviewport = function(element, settings) {return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&!$.belowthefold(element, settings) && !$.abovethetop(element, settings);};

关于图片这里,除了延迟加载外,用户上传的图片以及我们所用的资源图片都应该进行压缩处理
如需要进一步提高压缩率,可以使用例如:google开发的webp图片格式等..
不过不是所有浏览器都支持webp格式,需要针对浏览器响应

ajax局部加载数据

根据上面这段代码,其实我们就可以延迟加载其他内容了,
总之呢,这里我们的目的就是尽量减少不必要的请求

比如现在用的很多的下拉式翻页,就是判断到页面底部之后再ajax获取下页内容

如果考虑到网页只是局部更新的话,那使用ajax是很合适的
好处显而易见,无需重新请求整页,小巧快速,网页展示也友好一些

善用ajax对前端性能,体验都是有改善的

但是也要考虑到对搜索引擎的友好,
如果页面整体功能改变了,或者页面改动量大就要进行取舍了。

预加载

延迟加载的目的就是减少不必要的请求,在用户有需求时才请求资源
所以对于用户来说,其实是有一点点“等待”的过程的

一般会用loading图,等待文字来改善这里的用户体验

但是有一些需求是希望尽量少出现这种“等待”过程的

这里我们就可以预加载资源,如下,我们先在js中加载图片

var img  = new Image();
img.src="test.png";

提前加载好了图片,用户进行下一步时,图片则是从浏览器缓存中获取

多页数据也可以类似处理,页面初始可以默认加载两页数据
翻到第二页时,就ajax去获取第三页内容
翻到第三页时,就去获取第四页内容……
总是提前预加载一页数据

如此可一定程度上减少一些等待的过程

总的来说延迟加载是尽量少加载资源,预加载则是判断可能要的资源,尽量去提前多加载,

都是为了优化用户的体验,适用于不同场景

资源合并

我们项目内往往会引用多个javascript脚本,和多个css样式文件
所以可以把多个脚本合并到一个js文件内,然后统一引用它就能减少http请求

这里uglify-js和 clean-css 都支持多个文件合并压缩输出

>uglifyjs js1.js js2.js -m -o merge.js
>cleancss -o megar.css style1.css style2.css

也可以在服务器内合并输出,比如我们看淘宝的合并:

<script src="//g.alicdn.com/kissy/k/6.2.4/??node-min.js,node-base-min.js,dom-base-min.js,query-selector-base-min.js,dom-extra-min.js,node-event-min.js,event-dom-base-min.js,event-base-min.js,event-dom-extra-min.js,event-gesture-min.js,event-touch-min.js,node-anim-min.js,anim-transition-min.js,anim-base-min.js,promise-min.js,base-min.js,attribute-min.js,event-custom-min.js,json-base-min.js,event-min.js,io-min.js,io-extra-min.js,io-base-min.js,io-form-min.js,cookie-min.js"></script>

他们则是在web服务器内做了处理,请求多个文件,会自动合并
有条件的同学也可以这样进行合并

引用优化

引用css放在<head>内,引用js放在</body>结束标签前,现在很多朋友都会这么做了

css加载是异步的,更早的加载出样式就能更早呈现出页面
js放在尾部,防止浏览器加载js而阻塞页面,造成页面“白屏”现象

单独域名存放资源

如果有条件的话,我们还可以启用额外的服务器,域名来存放资源

这样能减少主域名的HTTP请求数,让主服务器更快响应请求
还能减少主域名的cookie请求

离线存储

离线存储在我之前一篇文章里也提到过,在移动端应用的比较多
它和缓存不同,它设置好了之后,连离线也能访问,无论用户刷新或者新窗口,链接等等

使用manifest
<html manifest=”/mobile.manifest”>
在html上添加manifest,其中文件格式内容如:

CACHE MANIFEST
##需要离线的内容
CACHE:Script/jquery.js
Script/gameconfig.jsImage/home.png
Image/logo.png##总是访问网络的内容
NETWORK:
*
##访问A失败时访问B
FALLBACK

浏览器将缓存chache内所有的内容,并且可以离线访问,只要文件发生任何改变都将会重新读取并刷新全部缓存,所以更改注释是个更新缓存的好方法

这里要注意的是
1,添加了manifest的当前网页也会被缓存 所以推荐的方式是页面缓存,页面动态内容全部用ajax获取,所以在移动网站项目设计开始就要注意这个问题
2,页面中添加iframe 然后子页面引用manifest想达到缓存资源而不缓存当前页面内容,是无效的。

本地存储localStorage

本地存储数据一直是网页端的弱项,在没有HTML5的localStorage前,用cookie可以保存一点数据
但付出的代价很大,cookie能保存的数据很少,并且它会伴随着每一次请求一起发送

localStorage就好多了,默认5MB的大小,除非用户手动清除,否则一直不过期,就连IE8浏览器都支持

这里要注意,localStorage和cookie一样受到跨域的限制
可以使用domain控制

document.domain="";

css3替换js动画

在js中,我们实现动画,就是利用定时器循环改变dom元素的属性来达到动画效果
但是许多属性更改之后会造成浏览器重绘,增加性能消耗

当然浏览器更新换代也做了许多优化,我们优化js,css减少重绘,也能改进动画性能
但是想一想,究竟应不应该让js去实现页面动画呢?

css3就是往这方面发展,让js更纯粹的去实现业务逻辑
页面效果之类的事情就让css去做吧

并且css3在动画效率上面也有增强,浏览器会单独处理css3动画,不占用js主线程,还可以硬件加速
将来还有提升的可能,所以快把我们的js动画替换为css3吧!

替换flash

同样更迭的还有flash,当初flash是为了弥补网页展现的不足而出现的“插件”
而现在网页标准一次次升级,html5的出现,再加上flash自身也有各种漏洞,性能问题
尤其是现在flash在移动端的支持很少,都加快了我们替换flash的步伐

前端页面优化:如何更快速将你的页面展示给用户?相关推荐

  1. 161026、更快速将你的页面展示给用户[前端优化篇]

    现在许多公司往往注重后端优化,而忽略了前端优化 想想如果辛苦优化了服务器,后台,排查了sql,却在最后页面加载展示的时候很慢,也得不偿失 其实,前后台优化都是相辅相成的,后台优化好了,响应请求速度快, ...

  2. 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析

    背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...

  3. 企业网络推广方案教网站优化新手更合理地处理过期页面

    在SEO优化的过程中,企业网络推广方案优化人员会发现,有时候网站会出现过期页面,而过期页面的存在会影响用户体验,还会影响搜索引擎蜘蛛爬行和抓取,对网站排名非常不利,那么对于这种情况,优化人员该如何进行 ...

  4. 【HTML】前端性能优化之CDN和WPO的比较

    CDN通过将资源存储在更接近用户的位置,缩短到服务器的往返行程,加快页面加载时间来解决性能问题.WPO解决方案,如Radware的FastView,则在前端进行性能提升处理,使页面更有效地呈现在浏览器 ...

  5. 聊一聊前端性能优化 CRP

    什么是 CRP? CRP又称关键渲染路径,引用MDN对它的解释: ❝ 关键渲染路径是指浏览器通过把 HTML.CSS 和 JavaScript 转化成屏幕上的像素的步骤顺序.优化关键渲染路径可以提高渲 ...

  6. 如何利用页面点击图做网站页面优化

    有时候我们需要了解网站页面中各链接的点击情况,尤其是网站的首页和一些中间页,这对网站的内容编排.用户体验优化都能起到很好的指导作用. 页面点击图是流量统计里面的一项统计工具,大多数站长用过百度统计和C ...

  7. ios 页面即将消失_20个即将推出的页面介绍及如何正确处理它们

    对于即将推出页,所有即将到来的网站可以永远做是为了显示一个空屏幕"即将推出"端到端贴满单词. 还是? 从几种方面来说,为网站,服务和产品设计"即将推出"着陆页是 ...

  8. 前端性能优化:当页面渲染遇上边缘计算

    简介: 当前几种常见的前端性能优化方案仍然不可避免地会存在一些缺点.本文在 ESI (Edge Side Include) 的基础上,提出了一种新的优化思路:边缘流式渲染方案(ESR),即借助 CDN ...

  9. 前端性能优化:如何提高页面加载速度和用户体验

    第一章:介绍 当今互联网时代,网站的性能对于用户体验至关重要.一个快速加载的网页不仅能提高用户的满意度,还能增加页面的转化率.而在前端开发中,性能优化是一个永恒的话题.本篇博客将为大家分享一些关于前端 ...

最新文章

  1. 码农创业,6年80万我是这样一步一步实现的,创业朋友共勉[终结篇3年后我再来]...
  2. Ubuntu18.04安装Gaussian16和GaussView 6
  3. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能
  4. zoj-3624(Count Path Pair)组合数+乘法逆元
  5. Teams Bot库的JSON
  6. urlconnection java_java成神之——HttpURLConnection访问api
  7. 常用英雄胜率怎么刷_单排刷英雄胜率或者炸鱼方法。
  8. mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP
  9. 单片机定时器_单片机定时器/计数器基本原理
  10. 哈弗F7x驾舱数字化测试 语音识别精准
  11. 【跃迁之路】【468天】程序员高效学习方法论探索系列(实验阶段225-2018.05.19)...
  12. XNA Game Studio 4.0 Programming 随便读,随便记 “Rendering Text”
  13. storm无损 the wolven_TheFatRat,Maisy Kay-The Storm[FLAC格式]
  14. 【Advanced控制理论】Robust Control鲁棒控制(附Simulink程序)
  15. 三维全息显微镜成生物成像领域“新宠”
  16. Android读写日历,Android日历提醒问题总结
  17. android 360短信拦截,Android版360卫士更威武
  18. 根据计算机配置设置bios,设置BIOS让计算机每天都按时自动开机
  19. python台风动图绘制_python可视化绘图:台风路径可视化
  20. 查询显卡状态 Tesla M40

热门文章

  1. 信息系统项目管理师案例必备
  2. ADSP-21569/ADSP-21593的开发入门(上)
  3. 状态机/流程引擎/审批流的流程引擎/结合低代码开发的流程引擎 区别 业务系统中使用流程引擎
  4. 手机局域网html,局域网精灵(com.xchat.stevenzack.langenius)
  5. java中如何读取文件内容,附源代码
  6. 开关电源环路学习笔记(4)-两种误差放大器的传递函数
  7. float函数python_详解float函数类型转换
  8. MySql主要性能指标说明
  9. php 抓取所有div,快速了解PHP抓取网页内容的技巧
  10. 文本编辑器 sakura grep  指定拓展名除外