- 浏览: 555798 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (162)
- 软件开发过程 (15)
- Java基础 (16)
- web开发 (20)
- Workflow应用 (0)
- 心情 (18)
- Oracle数据库 (26)
- MySQL数据库 (11)
- Struts应用 (9)
- Hibernate应用 (3)
- Spring应用 (1)
- C#开发 (0)
- iBatis应用 (0)
- Tomcat (10)
- PHP开发 (1)
- Linux (13)
- 设计原则总结 (1)
- 网站开发管理 (6)
- PowerDesigner (3)
- 系统架构 (3)
- 算法 (1)
- 国外接job (0)
- Lucene (1)
- Android (1)
- SEO技术 (1)
- Javascript (1)
最新评论
-
yu_meiguang:
真心感谢啊,找了半天才知道是这个以时间戳问题导致的问题
oracle分页查询数据重复问题 -
funnyone:
[u][b][i][flash=200,200][url][i ...
Oracle - Round函数 -
字母哥:
不错 今天用到了 时间戳排序的话有一样的就排序数据乱了
oracle分页查询数据重复问题 -
lelong:
xuhu_java 写道您好!我想问一下
select rou ...
Oracle - Round函数 -
xuhu_java:
您好!我想问一下select round(123456.788 ...
Oracle - Round函数
,其实这些经验本身都是来自yahoo的优化原则,不过经过ahuaxuan自身的实践和再次的思考,把原来的原则都进行了分组和分析.不过由于ahuaxuan涉及到的东西有限,并没有经历过全部的优化点,所以只把自己做过的拿出来和大家讨论讨论,其中不免加入自己一些观点,希望大家指正.
先说说目标,前端优化的目标是什么,一个字:快.两个字:更快.那么下面我们来看看慢的网页将会给我们带来什么:
1. 慢的页面可能会网站失去更多的用户.
2. 慢500ms意味着20%的用户将放弃访问(google)
3. 慢100ms意味着1%的用户将放弃交易(amazon)
4. 慢 ???ms意味着??%的用户将放弃xx(your site)
所以我们的目标很明确,就是要网页展现的速度更快.
经过ahuaxuan的实践和总结,其实要让网页展现更快只需要注意几个大的方面,下面会一一描述这几个大的方面.
[size=medium]1减少http请求,我把它排在了第一点,为啥要在第一点呢,很简单,因为它最重要.
如何做呢.让ahuaxuan带着大家分析一下这个问题.从何处着手呢.ahuaxuan大声疾呼,我们要从数据开始.ok,一般来说,我们从变化性上把数据分成两种类型,变和不变.那么不变的数据可以缓存,变化的数据不能缓存,这是一个常识,也就是说要减少我们的http请求次数这个目标可以转换成把数据分为变化和不变化两个部分.不变化的数据不需要再次请求,这样http请求的次数就减少了,下面我们分点来描述将数据分类的途径.
1. 合并脚本文件
包括脚本,样式和图片,可以有选择的把一些Js和css可以合并成一个文件,一些图片可以使用css sprites技术.这样做的原因是什么?做过web开发的人都知道,js和css基本是不变的,是静态文件,图片亦然.那么不变的文件如果适当的合并在一起,会有什么效果呢?请求的次数从多次变成了一次.这样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作为前端的技术,400多k啊,每打开一个页面都导入,下载这个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方式,讲一个ahuaxuan经历过的事情,之前有一个项目的ajax请求使用了post方式,后来发现经常出错,而且抛出了squid的错误,因为我们的网站使用了squid,问题就出在这里了,从http协议上可以了解到,method=post是指把数据提交到服务器上去,那么squid的一个特性是不会缓存post请求(事实上它确实不应该缓存,因为这样会违反http协议中的语义),把ajax请求改成get方式之后,一切恢复如常.
4. 移除重复的js
重复的js导入也有可能导致ie重新加载该脚本.没啥好说的,照做.
5. 避免重定向
有一种经常被网页开发者忽略却往往十分浪费响应时间的跳转现象。这种现象发生在当URL本该有斜杠(/)却被忽略掉时。这时候会返回一个301的状态码,然后浏览器重新发起一次请求.在企业应用里,重定向是我们在企业应用中常用的技术,不过用在网站项目上,您可要小心了,因为普通的重定向其实是server在response header中设置http status=302,浏览器收到之后,判断出是302,会重新发送一个请求,目标地址是前一次返回中指定的地址.在网站项目中如果可以不用重定向就别用吧.如果您做企业应用项目,ok,关系不大,您就放心的”定”吧.
小节,ahuaxuan把减少http请求次数分为了以上5个小点,每个小点之后附加一些实例,大家可以根据这些点来判断自己的项目是否可以有优化的地方.
使用cdn
让内容更靠近用户,这有啥好说呢,原理很简单,就是根据用户浏览器所在机器的ip来判断哪些服务器离用户最近,浏览器会再次去请求这些最近的机器.一般的cdn服务商是通过开发自己的dns server来达到这个目的的.不过这个是通常情况哦,技术实力比较高,或者场景比较特殊的公司会开发自己的cdn.当然不管怎么说,使用cdn肯定可以使页面响应更快(也包括音频,视频,图片,文本文件,等等等等)
减小返回数据的体积
1. 使用gzip压缩返回数据
Gzip压缩所有可能的文件类型是减少文件体积增加用户体验的简单方法。比如本来400k的文件,压缩一下之后只有50k-100k,那么网络的流量就立刻下来了,压缩的代价是服务器端要压缩文件,需要消耗cpu,浏览器需要解压文件,也需要消耗cpu,不过对于现代这么nb的pc,来说,浏览器解压一下数据带来的cpu消耗简直不值一提.所以您就压吧.不过压的时候要小心哦,有的浏览器在特定场景下会出去一些小bug,导致页面不正常.比如ie6在跨域的时候可能会有些小麻烦,把这部分数据的gzip去掉就可以了.
2. 最小化js文件和css文件
压缩js可以使用JSMin或者YUI Compressor,后者同时可以压缩css,这个也没啥好说的,照做吧.
3. 将css和js独立成外部文件
其实这一点也可以看成是区分不变数据和变化数据.很多人喜欢在页面商写很多很多的js和css,这些数据其实都是不会变化的数据,也就是说这些数据也是可以缓存在浏览器上的,通过把它们独立成外部文件,可以把这些数据缓存起来.这样做看上去是增加的请求的次数,但是由于第一次请求之后该部分数据已经被缓存,所以第二次就无需再请求后端,减少了网络带宽的开销.
优化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%的情况了,同时前端优化其实也不是什么复杂的东西,原理上是很简单的,更多的是需要我们的实践,因为我们可能会碰到各种各样的问题,而很多的这些问题其实一般是预测不到的.只有遇到过才知道.
说的不对的地方请大家拍砖,或者童子们也可以把自己的经验在这里和大家分享一下.代表其他童子表示十分的感谢.
当然,由于ahuaxuan水平有限,文章中难免有不到之处,还望不吝指正,谢谢.
发表评论
-
F5负载均衡算法及基本原理(转载)
2011-12-07 15:25 1609F5负载均衡算法及基本原理 BIGIP支持以下负载均衡选项: ... -
Nginx 在RedHat5安装过程
2011-06-09 22:24 1739一、Nginx相关资料 主站:http://www. ... -
网站地图制作,用于gongle
2011-03-10 15:38 1006建立Google地图的作用 ... -
ie和火狐兼容问题
2010-07-02 09:32 10221. document.form.item 问题 (1)现 ... -
JQuery blockUI 使用
2010-06-09 10:14 01.首先,引入两个js文件 <script langu ... -
FreeMarker 笔记
2010-05-13 17:07 610FreeMarker 主页:http://www.freema ... -
meta标签
2010-05-03 12:07 905转载自百度百科 1、meta标签 meta是html语 ... -
JQuery Validate Remote
2010-03-11 16:18 2801"timIte ... -
log4j 各种方式配置
2009-07-09 23:06 1712Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志 ... -
Jquery 组件
2009-04-17 11:35 1520File upload Ajax File Upload ... -
WebBrowser打印总结
2009-01-18 23:31 2206WebBrowser.ExecWB(1,1) 打开 Web.E ... -
javascript 子窗体向父窗体文本框传数据
2009-01-13 10:21 1620<html> <body> <f ... -
框架编程概述
2008-10-25 23:39 1016一个HTML页面可以有一个 ... -
UrlRewriter技术简单运用
2008-10-25 23:27 1038如何增强你网站中地 ... -
eWebEditor漏洞分析
2008-10-17 12:20 7070现在eWebEditor在线编辑器 ... -
XML和HTML常用转义字符
2008-07-27 17:42 2372XML和HTML中都有一些特殊的字符,这些字符在XML和HTM ... -
中文文件名附件下载解决办法
2008-07-01 14:10 1834很简单,就如下设定: 附件下载 response.setC ... -
深入认识javascript中的eval函数(转载)
2007-10-08 10:53 1663来源:Terry的专栏 发现 ... -
Ajax初始调用
2007-09-11 00:13 19js 代码 function initAjax( ... -
用JavaScript刷新框架子页面的七种方法
2007-07-20 11:17 1561下面以三个页面分别命名为framedemo.html,top. ...
相关推荐
网站Web前端优化主要关注提升网页加载速度、用户体验和性能效率,这一领域对于现代互联网产品至关重要。以下是关于Web前端优化的详细说明: 一、关于Web Web作为一种新媒体,它源自印刷业,但随着互联网的发展,Web...
"前端笔试题面试题汇总+前端优化总结" 前端优化的目的是什么?从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。从服务商角度而言,优化能够减少页面请求数、...
### 大型网站性能优化实战从前端网络CDN到后端大促的全链路性能优化 #### 一、基于用户体验的性能优化要素 在现代互联网应用中,用户体验是衡量一个网站成功与否的重要标准之一。良好的用户体验不仅仅体现在美观的...
另外,前端优化还包括代码压缩和合并,通过压缩JavaScript和CSS文件减小传输大小,合并多个文件以减少HTTP请求。此外,利用懒加载技术,可以按需加载非首屏内容,进一步提高首屏加载速度。利用HTTP/2的多路复用功能...
作为腾讯的Web前端高级工程师,对性能优化有着丰富经验,以下是一些具体的优化技巧: - 精简代码:去除无效和冗余的代码,只保留必要的逻辑。 - 使用Web Workers处理复杂计算:避免JavaScript在主线程中执行大量...
最后,使用JSON进行数据交换是前端优化的另一个重要方面。JSON是一种轻量级、语言无关的数据交换格式,与XML相比,其数据量更小,解析更快。由于JSON天然就与JavaScript兼容,使得数据操作更加直观和高效。JSON数据...
web前端优化方案的知识点包括: ...主要手段包括合并CSS、JS和图片,减少...以上是web前端优化方案的主要知识点,从减少HTTP请求到优化JS代码,涵盖了前端性能优化的多个方面,可以帮助提升网站的加载速度和用户体验。
《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全链路性能优化详解》的初衷就是将实践经验分享给读者,展示性能优化相关知识的全貌。《大型网站性能优化实战:从前端、网络、CDN到后端、大促的全链路性能...
在前端开发领域,性能优化是提升用户体验和网站可访问性的重要环节。这本"前端性能优化原理与实践"小册子深入探讨了如何通过一系列技术手段优化前端页面,旨在帮助开发者构建更快、更流畅的Web应用。以下是该压缩包...
此外,郭碧青也谈到了前端优化在移动端的应用,特别是在手机QQ兴趣部落项目中的实践。因为移动端设备的资源和网络条件通常受限,所以对于性能优化的要求更高。他分享了使用了如React Native和Vue等现代前端框架的...
美团买菜iOS工程师王梓童分享了前端性能优化的实践经验,包括性能优化思路、措施和未来规划。 一、前端页面加载性能优化思路 前端页面加载性能优化的思路包括多个方面: 1. 首屏优化:首屏时间是用户体验的关键...
前端性能优化是指通过对网站或Web应用的前端部分进行改进,以提升用户体验的过程。优秀的前端性能优化能够显著提高网页加载速度、减少资源消耗、增强用户交互体验,进而提升整体的业务表现。本指南将深入探讨几个...
通过深入研究这个“前端网站实例100套源码”的资源,无论是初学者还是有经验的开发者,都能从中汲取到宝贵的知识和实践经验,提升自己的前端技能。每个案例都是一个活生生的教程,通过实际动手操作,可以更好地理解...
通过这样的学习路径,你不仅可以创建出美观且功能齐全的政府网站前端页面,还能深入理解网页开发的原理,为未来的项目打下坚实基础。在实践中,还可以参考其他优秀的政府网站,分析其设计特点,吸取其中的精华,以...
Web前端、模块化、组件开发、性能优化 随着互联网技术的发展,人们越来越习惯通过网络获取信息,在线学习平台 也因此应运而生。同时,人们对于网站的易用性和交互体验的要求也越来越高, 设计良好、性能优良的网站...
【企业网站前端代码】是指构建企业官方网站所使用的...以上是关于“企业网站前端代码”涉及的关键知识点,涵盖了从网页结构、样式到交互、性能优化等多个方面,是构建一个专业且用户体验良好的企业官网所必需的技术栈。