web性能优化前端篇

最近在写一个智慧教室行为管理网站,网站已经完工,老师见我没事儿干了,让我尝试如何在前端实现性能优化,以前也模糊知道一些,图片加载。http请求方面的东西,但是不全,现在就来总结一下,以下是比较常见的

  • 减少http请求
  • 压缩并优化js/css/image
  • 简化,尽量静态页面

减少http请求

80%的相应时间花在下载网页内容(images,css,js,flash)等,减少请求次数是缩短响应时间的关键,可以通过简化页面设计来减少请求次数,可使用一些技巧

  • 捆绑文件:将多个脚本文件、样式表文件捆绑成一个文件,以此来减少文件下载速度
  • css雪碧图: 将多个图片拼成一幅图片,然后使用css来控制在什么地方显示着整张图片的局部
  • inline images: 通过编码的字符串将图片内嵌到网页文本中,例如将图片转为base64格式的数据编码

减少DNS查询次数

DNS查询也消耗响应时间,如果我们网页内容来自各个不同的domain(例如嵌入了开放广告或者引入了外部图片或者脚本),首次解析这些domain也需要消耗一定时间,DNS查询结果缓存在本地系统和浏览器中一段时间,所以DNS查询一般是对首次访问速度有影响

缓存ajax

ajax可以帮助我们异步下载网页内容,但是有些网页内容即使是异步的,用户还是在等待它的返回结果,例如ajax的返回是用户联系人的下拉列表,所以我们还是要注意应用一些规则提高ajax的响应速度

  • 添加Expires或Cache-Control报文头使回复可以被客户端缓存
  • 压缩回复内容
  • 减少DNS查询
  • 精简js
  • 避免跳转
  • 配置Etags

延迟加载

网页的加载其实是按照代码书写顺序加载的,这就涉及到了加载的优先级,首先应该让谁先加载,先显示,剩下的次要内容就可以延迟加载
js是典型的可以延迟加载的内容,一个比较激进的做法是在开发网页时确保网页在没有js的情况下也可以基本工作,然后通过延迟加载脚本完成一些高级功能

提前加载

与延迟加载相反,提前加载是为了提前加载接下来网页中访问的资源,下面是提前加载的了类型

  • 无条件提前加载:当网页加载完成后,马上去下载一些其他内容,例如google会在页面加载成功后马上去下载一个所有结果中都会用到的image sprite


  • 有条件加载:根据用户输入推断需要加载的内容,很常见的就是用户输入一些关键字搜索引擎就会显示很多相关词条,还没有按下搜索键就自动跳转到搜索内容
image.png

减少DOM元素数量

网页中元素过多对网页的加载和脚本的执行都是沉重负担,500个元素和5000个元素在加载速度上会有很大差别

image.png

document.getElementsByTagName('*').length

显示google首页只有358个元素

根据域名划分内容

浏览器一般对同一个域的下载连接数有所限制,按照域名划分下载内容可以浏览器增大并行下载连接,但是注意控制域名使用在2-4个之间,不然dns查询会增多
可以将静态资源放在类似于static.example.com,动态内容放example.com,这样做还有一个好处是可以在静态域名商避免使用cookie

减少iframe数量

iframe使用有优点也有缺点
优点

  • 可以用来加载速度较慢的内容,例如广告
  • 安全箱保护,浏览器会对iframe中内容进行安全控制
  • 脚本可以并行下载
    缺点
  • 即使iframe为空也消耗加载时间
  • 会阻止页面加载
  • 没有语义

避免404

404代表服务器没有找到资源,客户端发送一个请求但是服务器却返回一个无用的结果,时间浪费掉了
更糟糕的是我们网页加载中需要加载一个外部脚本,结果却返回一个404,不仅阻塞了其他脚本的下载,下载回来的内容客户端还会将其当成是js去解析

使用CDN

减少网页下载的内容,提高下载速度可以通过内容分发网络-CDN来提升,CDN通过部署在不同地区的服务器来提升客户的下载速度,可以通过免费的CDN供应商来分发网页资源

添加Expires或Cache-Control报文头

分为两个方面

  • 对于静态内容添加Expires, 将静态内容社会永不过期。
  • 对于动态内容应用合适的Cache-Control,让浏览器根据条件来发送请求

避免空的图片SRC

空的图片src仍然会使浏览器发送请求服务器,这样完全是浪费时间,而且浪费服务器的资源,这种空请求造成的伤害不容忽略

减小cookie大小

cookie被用来做认证或个性化设置,其信息被包含在http报文当中,对于cookie我们要注意以下几点,来提高请求响应速度

  • 将cookie大小减到最小
  • 注意cookie设置的domain级别,没有必要情况下不要影响到sub-domian
  • 注意设置合适的过期时间,比较长的过期时间可以提高响应速度

将css置顶

css放在网页head中会让网页显得加载速度更快,因为这样做可以使浏览器逐步加载已经下载的网页内容,这对内容多的网页很重要,用户不用一直等在一个白屏上,而是可以先看到已经下载的内容,如果将样式表放在底部,浏览器会拒绝渲染已经下载的网页,因为大多数浏览器起在实现时都会努力避免重绘

用<link>代替@import

避免使用@import,因为这个相当于将css放在网页内容底部

将js置于底部

脚本在下载时,即使是来自不同的hostname浏览器也不会下载其他资源,因为浏览器要在脚本下载之后依次解析和执行,可以考虑下面方式来脚本提速

  • 将脚本置地,优先css渲染,呈现给用户
  • 主流浏览器支持defer关键字,可以指定脚本在文档加载后执行
  • HTML5中新加了async关键字,可以让脚本异步执行

精简js和css

精简就是将js和css中空格和注释全部去掉
统计表明,精简后的文件平均减少了21%
用来帮助做精简的红菊很多
js compressors:

  • Packer
  • JSMin
  • Clouse compile
  • YUICompressor
  • AjaxMin
    css compressors:
  • CSSTidy
  • Minify
  • CSSCompressor

图片延迟加载

延迟加载时提高网页首屏显示速度的有效办法,当图片元素进入窗口可视区域的时候,它就会改变图像的src属性,从服务端加载所需的图片,这也是一个异步的郭层
推荐的简单易用的图片延迟加载插件-

优化css Sprite

  • Sprite中水平排列图片,处置排列会增加文件大小
  • Sprite中把颜色较近的组合放在一起降低颜色书,理想状况是低于256色以便适用于PNG8格式
  • 不要在Sprite图像中留有较大空隙,这虽然不大会增加文件大小,但对于用户代理来说,需要更少的内存来把图片解压为像素地图

使用小且可缓存的favicon.ico

网站文件favicon.ico不管服务器有没有,都会去尝试请求这个图标,这个图片的要求

  • 存在
  • web尽量小,小于1k
  • 设置一个较长的过期时间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92
  • 网站优化离不开前后端的互相协作,但是对于前端工程师来说,在保证后端技术方案不变时,能不能只利用前端技术来优化网站呢...
    留七七阅读 6,242评论 0 31
  • Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列...
    拉风的老衲阅读 1,792评论 0 1
  • 前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:...
    秀才JaneBook阅读 2,249评论 0 25
  • 最近两个星期都沉迷于AI制图,其实是迫于要上交作业的压力。过程中发现了很多问题,有些点虽然很简单,但一旦没有注意到...
    桃蔻阅读 1,664评论 3 2