`
阅读更多

先说说目标,前端优化的目标是什么,一个字:.两个字:更快.那么下面我们来看看慢的网页将会给我们带来什么:
1.
慢的页面可能会网站失去更多的用户.

2.
500ms意味着20%的用户将放弃访问(google)

3.
100ms意味着1%的用户将放弃交易(amazon)

4.
???ms意味着??%的用户将放弃xx(your site)

所以我们的目标很明确,就是要网页展现的速度更快.
经过实践和总结,其实要让网页展现更快只需要注意几个大的方面,下面会一一描述这几个大的方面.


[size=medium]1
减少http请求,我把它排在了第一点,为啥要在第一点呢,很简单,因为它最重要.


如何做呢.从何处着手呢.我们要从数据开始.ok,一般来说,我们从变化性上把 数据分成两种类型,变和不变.那么不变的数据可以缓存,变化的数据不能缓存,这是一个常识,也就是说要减少我们的http请求次数这个目标可以转换成把数 据分为变化和不变化两个部分.不变化的数据不需要再次请求,这样http请求的次数就减少了,下面我们分点来描述将数据分类的途径.


1.
合并脚本文件
包括脚本,样式和图片,可以有选择的把一些Jscss可以合并成一个文件,一些图片可以使用css sprites技术.这样做的原因是什么?做过web开发的人都知道,jscss基本是不变的,是静态文件,图片亦然.那么不变的文件如果适当的合并在 一起,会有什么效果呢?请求的次数从多次变成了一次.这样http请求的次数就减少了.当时合并之后,文件体积变大了,会影响速度吗?:肯定会啊,不过 这里是需要权衡的,比如我100份静态文件,合并成10份还是合并成1份这就得看你得具体情况了.

2.
指定Expires或者Cache-Control,
对于静态内容:设置文件头过期时间Expires的值为“Never expire”(永不过期)
动态页面,在代码中添加cache-control,表示多少时间之后过期,:
response.setHeader("Cache-Control", "max-age=3600");
如果使用了Expires文件头,当页面内容改变时就必须改变内容的文件名。通常是在文件内容后加版本号
这一点是大多数人都忽略得,之前很多人在坛子上发布自己得小系统,还有demo,ahuaxuan跑过去一看,my god,一堆又一堆得js,css,既没有恰当得合并,也没有设置过期时间.每次刷新页面都要重新下载这一堆又一堆的js,css.http请求那叫一个 多啊.无谓了流量就这样产生了.

这一点在企业应用的系统中也时有发生.比如我们使用extjs作为前端的技术,400k,每打开一个页面都导入,下载这个js,够无聊的. 么童子们可能就要问了,静态文件为啥不用apache,lighttpd等呢,,用了又怎么样,不设expire或者max-age不是一样要下载, 好的方法是写一个filter,filter中判断,如果url满足一定的条件(比如符合配置文件中的正则表达式),那么就设置一个max-age, 样就ok,太简单了,几行代码就可以搞定.快哉.

3.
缓存Ajax请求
缓存的方法同动态页面,ajax请求需要使用get方式,url长度为2k(ie)限制(post请求有两个过程,1发送请求headers,2 发送请求数据,根据http规范,get请求只会发送一个tcp).--------这一段话来自yahoo,先不管其真假,我们从另外一个方面来考虑 一下为什么最好使用get方式,讲一个经历过的事情,之前有一个项目的ajax请求使用了post方式,后来发现经常出错,而且抛出了 squid的错误,因为我们的网站使用了squid,问题就出在这里了,http协议上可以了解到,method=post是指把数据提交到服务器上 ,那么squid的一个特性是不会缓存post请求(事实上它确实不应该缓存,因为这样会违反http协议中的语义),ajax请求改成get方式之 ,一切恢复如常.

4.
移除重复的js
重复的js导入也有可能导致ie重新加载该脚本.没啥好说的,照做.

5.
避免重定向
有一种经常被网页开发者忽略却往往十分浪费响应时间的跳转现象。这种现象发生在当URL本该有斜杠(/)却被忽略掉时。这时候会返回一个301 状态码,然后浏览器重新发起一次请求.在企业应用里,重定向是我们在企业应用中常用的技术,不过用在网站项目上,您可要小心了,因为普通的重定向其实是 serverresponse header中设置http status=302,浏览器收到之后,判断出是302,会重新发送一个请求,目标地址是前一次返回中指定的地址.在网站项目中如果可以不用重定向就别用 .如果您做企业应用项目,ok,关系不大,您就放心的.

小节,把减少http请求次数分为了以上5个小点,每个小点之后附加一些实例,大家可以根据这些点来判断自己的项目是否可以有优化的地方.


使用cdn
让内容更靠近用户,这有啥好说呢,原理很简单,就是根据用户浏览器所在机器的ip来判断哪些服务器离用户最近,浏览器会再次去请求这些最近的机器.一般的 cdn服务商是通过开发自己的dns server来达到这个目的的.不过这个是通常情况哦,技术实力比较高,或者场景比较特殊的公司会开发自己的cdn.当然不管怎么说,使用cdn肯定可以 使页面响应更快(也包括音频,视频,图片,文本文件,等等等等)

减小返回数据的体积
1.
使用gzip压缩返回数据
Gzip
压缩所有可能的文件类型是减少文件体积增加用户体验的简单方法。比如本来400k的文件,压缩一下之后只有50k-100k,那么网络的 流量就立刻下来了,压缩的代价是服务器端要压缩文件,需要消耗cpu,浏览器需要解压文件,也需要消耗cpu,不过对于现代这么nbpc,来说,浏览器 解压一下数据带来的cpu消耗简直不值一提.所以您就压吧.不过压的时候要小心哦,有的浏览器在特定场景下会出去一些小bug,导致页面不正常.比如 ie6在跨域的时候可能会有些小麻烦,把这部分数据的gzip去掉就可以了.

2.
最小化js文件和css文件
压缩js可以使用JSMin或者YUI Compressor,后者同时可以压缩css,这个也没啥好说的,照做吧.

3.
cssjs独立成外部文件
其实这一点也可以看成是区分不变数据和变化数据.很多人喜欢在页面商写很多很多的jscss,这些数据其实都是不会变化的数据,也就是说这些数 据也是可以缓存在浏览器上的,通过把它们独立成外部文件,可以把这些数据缓存起来.这样做看上去是增加的请求的次数,但是由于第一次请求之后该部分数据已 经被缓存,所以第二次就无需再请求后端,减少了网络带宽的开销.

优化Cookie
1.
减小cookie体积
能不放就别放吧,为啥呀,cookie就象钥匙串,只有出门和回家得时候才用,但是一整天你都要带在身上,麻烦不.
2.
合理设置Cookie
由于二级域名可以拿到一级域名得cookie,那么如果,而二级域名之间确不能相互共享cookie,所以合理得设置cookie得域名也可以避免无必要得带宽浪费和响应速度得增加.
3.
设置合理的cookie过期时间
该过期就过期,不要让不必要的数据一直带在身上走来走去.
4.
使用域分离
为图片或者其他静态资源文件使用子域或者建立新的独立域名(申请新的域名),避免无必要的cookie传输,当然也是要在有必要得情况下,图片类 网站肯定有必要,javaeye上得图片并没有使用域分离,所以我们得cookie其实会带到坛子得图片服务器上去,每次请求图片都是如此(不过还好, 子里没有什么图片,所以这方面的浪费不大).

小结,其实cookie上得问题,单词请求看上去也不是什么大问题,好像是无所谓得事情,就那么几十个byte,至于吗,不过大家都听说过水滴石穿,绳锯木断的故事.所以该做的,我们还是要做,正所谓,勿以善小而不为,勿以恶小而为之.

优化浏览器加载
1. css放在页面顶部加载
把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。
      HTML
规范清 楚指出样式表要放包含在页面的<head />区域内:<a />不同,<link />只能出现在文档的<head />区域内,尽管它可以多次使用它。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文 <head />内加载你的样式表。

2. js放在页面底部加载
脚本带来的问题就是它阻止了页面的平行下载。HTTP/1.1 规范建议,浏览器每个主机名的并行下载内容不超过两个。如果你的图片放在多个主机名上,你可以在每个并行下载中同时下载2个以上的文件。但是当下载脚本 时,浏览器就不会同时下载其它文件了,即便是主机名不相同。

Js
放在底部加载其实并不影响浏览器展示页面,除非用户会在js加载完成之前就调用某个js方法,比如说页面刚展现到一半,但是恰好这一半里有一部分是调用了还未下载的js,这个时候就会出问题了,如果童子们遇到这种情况,可以把这部分js先加载.

    
总结一下下:以上这些优化点其实只是前端优化的部分内容,不过根据80/20原则,这些优化点已经覆盖了80%的情况了,同时前端优化其实也不是 什么复杂的东西,原理上是很简单的,更多的是需要我们的实践,因为我们可能会碰到各种各样的问题,而很多的这些问题其实一般是预测不到的.只有遇到过才知.

分享到:
评论

相关推荐

    web前端笔试题面试题汇总+前端优化总结

    "前端笔试题面试题汇总+前端优化总结" 前端优化的目的是什么?从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。从服务商角度而言,优化能够减少页面请求数、...

    网站Web前端优化(Html)

    网站Web前端优化主要关注提升网页加载速度、用户体验和性能效率,这一领域对于现代互联网产品至关重要。以下是关于Web前端优化的详细说明: 一、关于Web Web作为一种新媒体,它源自印刷业,但随着互联网的发展,Web...

    web前端优化方案

    web前端优化方案的知识点包括: 一、减少HTTP请求 HTTP协议无状态,每次请求都需要建立通信链路并传输数据,服务端需要为每个HTTP请求启动独立线程处理。通信和服务开销昂贵,因此减少HTTP请求可以有效提升访问性能...

    前端优化与分析之基础

    前端优化与分析是提升网站性能的关键步骤,旨在减少加载时间,提高用户体验,降低服务器压力。以下是一些基础的前端优化策略和分析方法: 首先,减少HTTP请求数是优化的基础,因为每个请求都会带来额外的网络延迟。...

    WEB应用前端优化技术与手段策略

    WEB应用前端优化技术与手段策略是提升用户体验和系统性能的关键环节。前端优化涵盖了多个方面,包括页面加载优化、缓存利用、JavaScript优化以及CSS优化。这些技术有助于加快页面加载速度,减少HTTP请求,提高响应...

    web前端优化技巧1

    【前端优化技巧详解】 在网页开发中,前端性能优化至关重要,因为它直接影响用户的浏览体验和网站的加载速度。本文将深入探讨“web前端优化技巧1”中的关键知识点,并提供实用的优化策略。 首先,减少HTTP请求...

    最全前端优化方案

    最全前端优化方案笔记

    web前端笔试题面试题汇总+前端优化总结.pdf

    【前端优化概述】 前端优化是提升网页性能的关键环节,它涉及到HTML、CSS、JavaScript、图像、Flash等资源的处理,旨在提升用户体验并降低服务器资源消耗。优化的目标是加快页面加载速度,提高用户交互响应,同时...

    web前端优化知识总结+笔试+面试总结.pdf

    Web 前端优化知识总结 本文总结了 Web 前端优化的知识点,涵盖了页面级别和代码级别的优化方法。优化的目的是提高用户体验和节省资源利用。页面级别的优化方法包括减少 HTTP 请求数、合理设置 HTTP 缓存、资源合并...

    web+笔试+面试汇总+前端优化总结+js+css

    前端优化是提升用户体验和服务器效率的重要手段。减少HTTP请求数是优化的核心策略,因为它直接影响页面加载速度和服务器负载。这可以通过设计简洁的页面、设置HTTP缓存、合并与压缩资源、使用CSS Sprites技术、内联...

    JS json随机广告 前端优化

    标题“JS json随机广告 前端优化”指的是在前端开发中使用JavaScript和JSON数据格式来实现广告的随机展示,并且关注的是如何通过优化技术提升前端性能。这通常涉及到动态加载、缓存策略以及用户体验等多个方面。 在...

    Web 前端优化最佳实践.rar

    在Web开发领域,前端优化是提升用户体验和网站性能的关键环节。"Web前端优化最佳实践"这一主题涵盖了多种技术策略和方法,旨在使网页加载更快,交互更流畅,从而提高用户满意度和搜索引擎排名。以下是一些核心的前端...

    web前端笔试题面试题汇总+前端优化总结 分享给需要的同学

    web前端笔试题面试题汇总+前端优化总结 分享给需要的同学

    较试实用--web前端优化知识总结+笔试+面试总结1

    总结来说,前端优化是一个多维度的工作,包括资源管理、网络传输效率、代码质量等多个方面。恰当的优化不仅可以提高页面加载速度,提升用户体验,还能有效降低服务器资源消耗。对于开发者而言,理解并掌握这些优化...

    vue面试题+web前端笔试题面试题汇总+前端优化总结+《Vue-框架开发》真题

    在IT行业中,Web前端开发是不可或缺的一部分,而Vue.js作为一款轻量级的前端JavaScript框架,因其易学易用和强大的功能,深受开发者喜爱。...在实际工作中,不断研究前端优化方法,能有效提升项目的性能和用户体验。

    web前端优化知识总结+笔试+面试总结[参照].pdf

    首先,前端优化分为页面级别和代码级别两大类。页面级别优化主要关注减少HTTP请求数。每个HTTP请求都有时间成本和资源成本,包括DNS解析、建立连接、发送数据、等待响应和接收数据等步骤。浏览器对并发请求的数量有...

Global site tag (gtag.js) - Google Analytics