- 浏览: 534040 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
rgqancy:
终于明白为啥XML里要带jdbcType=XXXX了。
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201 -
rzh0001:
Thanks a lot
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201 -
guji528:
学习了,谢谢
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201 -
AKka:
彻底清楚这个错误的原因了。向楼主学习了。
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201 -
远去的渡口:
武汉小吃,我最爱热干面和鸭脖,想念啊~~
过年时候还学习编程, ...
过年的心情
悟道web标准:前端性能优化
前端性能优化完全是一个技术话题,但是对于项目的用户体验有非常大的影响,如果你的网站打开要等待三五秒或者等到浏览器提示无法连接,那网站哪来的流量,哪来的品牌影响和用户忠诚度,挣钱就算了。
3s,作为判断一个用户忍受你网站速度的限度,如果超过3s,用户已经对这个网站产生了负面的抵触心理。
前端性能优化和web标准有什么关系,接着第一篇 悟道web标准——统一思想,遵循标准 ,这是对你遵循web标准的一个补偿或者是对标准的一个认可。
前端性能优化了解yahoo性能优化N条的同学应该不会陌生,安装一个YSlow评分并对照着优化就可以了,但是有没有想过为什么要这么做就可以提升速度,这些与Web标准有没有某种关联或者因果呢。
我把这些个条目分成三类,服务端运算优化,传输优化,客户端运算优化:
第一类,服务器端优化
服务器端就是对你的网站的动态语言的执行(asp,php),数据库查询,存储等速度,总的来说就是输入/输出的运算。这些跟前端没关系,但是影响着前端。YSlow里面没有,鬼知道你网站的服务器性能如何,看不出来,就自行优化服务器性能,数据库性能,多买点服务器扩容。
yslow有一条尽早刷新 Buffer (Flush the Buffer Early),貌似是不等html完成生成就传输。
提高域名的DNS解析速度。减少DNS的解析个数。这个不好归类,暂时放到这里吧。
第二类,传输优化
这类是大头,很烦,首先是字节,字节越小越好,怎么能小下来,最有效的方式就是google的方案,把首页做的极其精简,图片,html,静态文件都很小,再就是缓存,把文件放到本地缓存区读取。还有http请求数,减少文件传输中的排队等待。
字节优化:
1. 减少冗余html,结构化,语义化的html来实现,行为,表现,结构分离,独立的html文件将变得很小。
2. 压缩文本文件,css,html,js去掉注释、空格、换行等。
3. 降低图片字节,选择合适的图片类型,png-8是一个好东西,再用工具将图片进行压缩去掉,比如png-8的压缩工具。用合适的图片尺寸,不要把大图控制一下宽高就用上了。
4. gzip压缩一下,减小服务器端传输到客户端时候的字节。
5. flash文件和flash+xml的动态flash也减小字节
缓存:
服务器端配置一下,提高缓存的命中率和把不经常修改的文件缓存了。
Add Expires headers、Etags、ajax使用get方式便于缓存。
把能分离出来的css,js分离成外部文件便于缓存。
使flash和xml文件可缓存。
打通不同运营商的限制
CDN提高不同类型运营商的网络传输速度,电信,网通,铁通,教育网统统搞定。
请求数:
减少文件请求数,能合并到一起的合并一下,css,js,图片等,减小排队等待和服务器端开销。
分域提高同时加载数,优化排队等待。
避免404无效请求数。
避免重定向。
延迟加载和预载:
把暂时不用的文件等主体页面加载完了再加载,把用户稍后要看浏览的内容预先加载进来,相册浏览就是很好的例子,先用小图片放大再把大图展示出来,看本张图片时把下一张预载进来等等。
第三类:客户端优化
1. 讨厌的IE的滤镜和CSS expressions少用,小心把浏览器搞挂,CUP 100%死机。
2. CSS放到前面,js能放到后面的放在代码后面。将页面尽早展示给用户。
3. 减少iframe的使用,避免CPU扛不住。
4. 减少DOM个数,减低浏览器解析压力。
5. 使用 <link> 而不是@importChoose <link> over @import,在 IE 中 @import 指令等同于把 link 标记写在 HTML 的底部。而这与第一条相违背。
6. 提高js的执行效率,话题太大不提了
7. 缩小 Cookie,针对 Web 组件使用域名无关性的 Cookie (Use Cookie-free Domains for Components)
8. 还有小图片的repeat背景会提高浏览器的CPU占用。
9. 合理的DOM排序,把重要的内容代码前置,优先加载。
再就是些没对号入座的雅虎性能优化的条目。至此可以检验到页面工程师不是盖的,需要对代码、文件,http协议,缓存,服务器等精准的学习和控制,达到提供用户最最基本的体验——访问速度的体验。
Web标准的分离思想和结构化语义化html促成了以上很多条的实施,这是美工时代所不能比拟的。
2011-12-21
http中Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,注意,在这
Last-Modified 是由服务器往客户端发送的 HTTP 头,另一个
If-Modified-Since是由客户端往服务器发送的头,可以看到,再次请求本地存在的 cache 页面时,客户端会通过
If-Modified-Since 头将先前服务器端发过来的 Last-Modified
最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则
返回 304 告诉客户端其本地 cache
的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。而且在一些ajax应用中,要
求获取的数据永远是最新的,而不是读取位于缓存中的数据,做这样的设置是非常有必要的。<br><br>无意中测试发现nginx与apache对此有不同的算法:<br><br>APACHE:<br><br>(1)直接发送请求,返回200,Last-Modified: Mon, 26 Apr 2010 13:22:17 GMT<br><br>[root@test ~]# curl -I http://www.pengyao.org/test.html<br><br>HTTP/1.1 200 OK<br>Date: Mon, 26 Apr 2010 14:59:09 GMT<br>Server: Apache/1.3.41 (Unix)<br>Last-Modified: Mon, 26 Apr 2010 13:22:17 GMT<br>ETag: “92c027-897-4bd59389″<br>Accept-Ranges: bytes<br>Content-Length: 2199<br>Content-Type: text/plain<br>(2)指定与Last-Modified时间相同的If-Modified-Since 发送GET请求,返回304<br><br>[root@test ~]# curl -I -G -H “If-Modified-Since: Mon, 26 Apr 2010 13:22:17 GMT” http://www.pengyao.org/test.html<br><br>HTTP/1.1 304 Not Modified<br>Date: Mon, 26 Apr 2010 15:02:06 GMT<br>Server: Apache/1.3.41 (Unix)<br>ETag: “92c027-897-4bd59389″<br><br>(3)调后If-Modified-Since 1小时,再次发送GET请求,返回依然为304<br>[root@test ~]# curl -I -G -H “If-Modified-Since: Mon, 26 Apr 2010 14:22:17 GMT” http://www.pengyao.org/test.html<br><br>HTTP/1.1 304 Not Modified<br>Date: Mon, 26 Apr 2010 15:05:02 GMT<br>Server: Apache/1.3.41 (Unix)<br>ETag: “92c027-897-4bd59389″<br><br>说明Apache 在判断浏览器cache是否过期时,依据从If-Modified-Since开始,文件Last-Modified是否修改过来判断的,与RFC1945中对If-Modified-Since描述吻合.<br><br>那么再看下nginx对于此的测试结果:<br><br>(1)直接发送请求,返回200,Last-Modified: Wed, 21 Apr 2010 13:14:21 GMT<br>[root@test pengyao.org]# curl -I http://www.pengyao.org/index.html<br>HTTP/1.1 200 OK<br>Server: nginx/0.7.61<br>Date: Mon, 26 Apr 2010 15:18:29 GMT<br>Content-Type: text/html; charset=UTF-8<br>Content-Length: 323<br>Last-Modified: Wed, 21 Apr 2010 13:14:21 GMT<br>Connection: keep-alive<br>Accept-Ranges: bytes<br><br>(2)指定与Last-Modified时间相同的If-Modified-Since 发送GET请求,返回304<br><br>[root@test pengyao.org]# curl -I -G -H “If-Modified-Since: Wed, 21 Apr 2010 13:14:21 GMT” http://www.pengyao.org/index.html<br>HTTP/1.1 304 Not Modified<br>Server: nginx/0.7.61<br>Date: Mon, 26 Apr 2010 15:20:45 GMT<br>Last-Modified: Wed, 21 Apr 2010 13:14:21 GMT<br>Connection: keep-alive<br><br>(3)调后If-Modified-Since 1小时,再次发送GET请求,发现返回的结果为200,与Apache不同<br><br>[root@test pengyao.org]# curl -I -G -H “If-Modified-Since: Wed, 21 Apr 2010 14:14:21 GMT” http://www.pengyao.org/index.html<br>HTTP/1.1 200 OK<br>Server: nginx/0.7.61<br>Date: Mon, 26 Apr 2010 15:21:19 GMT<br>Content-Type: text/html; charset=UTF-8<br>Content-Length: 323<br>Last-Modified: Wed, 21 Apr 2010 13:14:21 GMT<br>Connection: keep-alive<br>Accept-Ranges: bytes<br>由此可以判断出,nginx在判断浏览器cache是否过期时,判断If-Modified-Since与Last-Modified是否匹配,如果不匹配,则认为cache过期,返回200重新下载.<br><br>要
说更喜欢哪种算法,个人更倾向于nginx的这种,因为在对文件更新前,本人习惯于对需要修改的文件进行备份(保留时间戳),一旦测试出现问题,及时的回
滚,使用nginx的这种算法就能保障回滚前后浏览器cache失效,而Apache的这种策略导致回滚到之前的时间戳的话(Last-
Modified),本地由于进行了测试,本地cache文件的If-Modified-Since时间一般比回滚后的Last-Modified新,这
样本地的cache认为依然有效,返回304,而实际上文件已经不是最新的。当然,Apache的这样设计完全遵守RFC,个人喜好不代表真实需求.<br><br><br><br>如何利用客户端缓存对网站进行优化? If-Modified-Since & If-None-Match<br><br><br>介绍<br> 你的网站在并发访问很大并且无法承受压力的情况下,你会选择如何优化?<br>
很多人首先会想从服务器缓存方面着手对程序进行优化,许多不同的服务器缓存方式都有他们自己的特点,像我曾经参与的一些项目中,根据缓存的命中率不同使用
过 Com+/Enterprise Libiary Caching/Windows服务,静态文件等方式的服务器端缓存和 HTTP
Compression技术,但客户端缓存往往却被人们忽略了,即使服务器的缓存让你的页面访问起来非常地快,但她依然需要依赖浏览器下载并输出,而当你
加入客户端缓存时,会给你带来非常多的好处.因为她可以对站点中访问最频繁的页进行缓存充分地提高 Web
服务器的吞吐量(通常以每秒的请求数计算)以提升应用程序性能和可伸缩性。<br>
一个在线购物调查显示,大多数人愿意去商店排队,但在在线购物时却不愿意等待。Websense调查公司称多达70%的上网者表示不愿意在页面读取上超过
10秒钟。超过70%的人会因为中途速度过慢而取消当前的订单。<br><br><br> 基础知识<br> 1) 什么是”Last-Modified”?<br><br>
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期
端最后被修改的时间,格式类似这样:<br><br> Last-Modified: Fri, 12 May 2006 18:53:33 GMT<br><br> 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:<br><br> If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT<br><br>
如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not
Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而
保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。<br><br> 2) 什么是”Etag”?<br><br>
HTTP 协议规格说明定义ETag为“被请求变量的实体值” (参见 —— 章节 14.19)。
另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单
独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:<br><br> ETag: "50b1c1d4f775c61:df3"<br><br> 客户端的查询更新格式是这样的:<br><br> If-None-Match: W/"50b1c1d4f775c61:df3"<br><br> 如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。本人测试Etag主要在断点下载时比较有用。<br> <span class="Apple-converted-space"> </span><br><br> Last-Modified和Etags如何帮助提高性能?<br>
聪明的开发者会把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生
Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客
户端)缓存。<br> 过程如下:<br> 1. 客户端请求一个页面(A)。<br>
2. 服务器返回页面A,并在给A加上一个Last-Modified/ETag。<br>
3. 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。<br>
4. 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。<br>
5. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。<br><br>示例代码<br> 下面的例子描述如何使用服务器端代码去操作客户端缓存:<br><br> <span class="Apple-converted-space"> </span><br>Code<br>1//默认缓存的秒数<br>2 int secondsTime = 100;<br>3<br>4 //判断最后修改时间是否在要求的时间内<br>5 //如果服务器端的文件没有被修改过,则返回状态是304,内容为空,这样就节省了传输数据量。如果服务器端的文件被修改过,则返回和第一次请求时类似。<br>6
if (request.Headers["If-Modified-Since"] != null &&
TimeSpan.FromTicks(DateTime.Now.Ticks -
DateTime.Parse(request.Headers["If-Modified-Since"]).Ticks).Seconds <
secondsTime)<br>7 {<br>8 //测试代码,在这里会发现,当浏览器返回304状态时,下面的日期并不会输出<br>9 Response.Write(DateTime.Now);<br>10<br>11 response.StatusCode = 304;<br>12 response.Headers.Add("Content-Encoding", "gzip");<br>13 response.StatusDescription = "Not Modified";<br>14 }<br>15 else<br>16 {<br>17 //输出当前时间<br>18 Response.Write(DateTime.Now);<br>19<br>20 //设置客户端缓存状态<br>21 SetClientCaching(response, DateTime.Now);<br>22 }<br>23<br>24 /**//// <summary><br>25 /// 设置客户端缓存状态<br>26 /// </summary><br>27 /// <param name="response"></param><br>28 /// <param name="lastModified"></param><br>29 private void SetClientCaching(HttpResponse response, DateTime lastModified)<br>30 {<br>31 response.Cache.SetETag(lastModified.Ticks.ToString());<br>32 response.Cache.SetLastModified(lastModified);<br>33 //public 以指定响应能由客户端和共享(代理)缓存进行缓存。<br>34 response.Cache.SetCacheability(HttpCacheability.Public);<br>35 //是允许文档在被视为陈旧之前存在的最长绝对时间。<br>36 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));<br>37 //将缓存过期从绝对时间设置为可调时间<br>38 response.Cache.SetSlidingExpiration(true);<br>39 }<br><br>如果你的缓存是基于文件的方式,如XML或http中的.ashx处理,也可以使用下面的基于文件方式的客户端缓存:<br><br>SetFileCaching<br>1/**//// <summary><br>2/// 基于文件方式设置客户端缓存<br>3/// </summary><br>4/// <param name="fileName"></param><br>5private void SetFileCaching(HttpResponse response, string fileName)<br>6{<br>7 response.AddFileDependency(fileName);<br>8 //基于处理程序文件依赖项的时间戳设置 ETag HTTP 标头。<br>9 response.Cache.SetETagFromFileDependencies();<br>10 //基于处理程序文件依赖项的时间戳设置 Last-Modified HTTP 标头。<br>11 response.Cache.SetLastModifiedFromFileDependencies();<br>12 response.Cache.SetCacheability(HttpCacheability.Public);<br>13 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));<br>14 response.Cache.SetSlidingExpiration(true);<br>15}<br>16<br> <span class="Apple-converted-space"> </span><br><br>结论<br>
我们已经看了如何使用客户端缓存减少带宽和计算的方法,如前所述,如果能正确合理的利用各种不同的缓存,他们会给你带来很多的好处.我希望本文已为你当下
或将来基于Web的项目提供了精神食粮,并正确地在底层利用Last- Modified和ETag响应头去优化你的项目。
发表评论
-
html focus 引入 类似微博的效果
2012-09-18 18:01 1384<!DOCTYPE html PUBLIC &q ... -
javascript 类编程(未完)
2010-07-20 18:03 1509最近想总结一下JavaScript类编程,有时间写一点。 J ... -
正则表达式
2010-01-20 14:48 1033正则表达式用于字符串 ... -
insertAdjacentHTML 用法
2010-01-09 21:13 1924insertAdjacentHTML方法示例 添加HTML内 ... -
float margin padding
2009-12-23 16:46 2505今天做网站的时候发 ... -
WEB2.0标准教程:第二天 什么是名字空间
2009-12-14 10:28 1097DOCTYPE声明好以后,接下来的代码是: <html ... -
CSS兼容:如何解决IE7和IE8的BUG
2009-12-14 10:04 2330CSS兼容问题已经是CSS网页布局技术中的重要组成部分,也让 ... -
JavaScript对象探讨
2009-12-13 11:39 1074由于JavaScript的灵活性,可以让每个人按照自己的习惯进 ... -
用css网站布局之十步实录
2009-12-10 11:32 1319首先需要规划网站,本教程将以下图为例构建网站 其基本布局见 ... -
WEB标准最佳实践:五个需要注意的地方
2009-12-09 21:32 992一、永远使用小写字母 不好的做法: <DI ... -
不要内置JavaScript脚本 并将它置于HTML文档底部
2009-12-09 21:27 1537不要内置JavaScript脚本,这不是1996年了! ... -
javascript uri 编码
2009-10-19 10:53 1964对比 javascript url编码 javascript ... -
javascript 购物车
2009-10-17 13:13 3365购物车相当于现实中超 ... -
doument.execomand 用法
2009-07-11 15:54 14072D-Position 允许通过拖曳移动绝对定位的对象。 ... -
clientX pageX
2009-06-26 15:21 2152screenX:鼠标在显示屏幕上的坐标。 clientX ... -
hasOwnProperty
2009-06-26 11:19 1652JavaScript中hasOwnProperty函数方 ... -
getBoundingClientRect()
2009-06-25 15:16 1308getBoundingClientRect() 来获取页面 ... -
jquery 选择器 使用
2009-06-15 17:01 1489[翻译]jQuery 选择器的使用 ... -
Ext 3.0 core 简要pdf 下载
2009-06-07 11:02 1252今天早上 无意中看到Ext中文 网站有Ext3.0 core ... -
settimeout 返回值
2009-06-07 10:32 2570setTimeout() 方法的返回值是一个唯一的数值,这个数 ...
相关推荐
7. **Web性能优化**: - **Web性能权威指南**:讲解如何提高网站加载速度和用户体验,包括图片优化、缓存策略、资源加载优先级等。 8. **WebAssembly**: - **WebAssembly实战**:了解如何使用WebAssembly将其他...
### 悟道:一位IT高管20年的职场心经 #### 第一章:修炼!修炼! 本章主要探讨了个人在职场中的成长路径以及如何通过不断的自我提升达到事业的成功。 1. **工作与事业的区别**:作者指出,工作是为了生存而进行的...
悟道:一位IT高管20年的职场心经.pdf
### 驯服烂代码 在编程操练中悟道 #### 核心概念与知识点解析 **1. 烂代码定义与识别** - **定义**:烂代码是指那些难以理解、难以维护、效率低下、易出错的代码。这类代码通常违背了一些基本的编码规范与最佳...
悟道:一位IT高管20年的职场心经,讲述个人的管理生涯和心经
《28位游资悟道心法》pdf
《悟道:一位IT高管20年的职场心经》是一本深入探讨信息技术行业职场经验与智慧的书籍。作者以其在IT领域20年的高级管理经验为基础,分享了他在职业道路上的感悟、挑战与成功之道。这本书是对于那些希望在IT行业中...
《悟道:一位IT高管20年的职场心经》是一本深入探讨IT行业职场生涯的著作,由刘博老师倾力撰写。这本书以其独特的视角,分享了作者在IT领域摸爬滚打二十年的经验与感悟,旨在帮助读者理解并应对职场中的种种挑战。...
《悟道:一位IT高管20年的职场心经》这本书由IT行业的资深人士撰写,深入浅出地分享了其在IT领域长达20年的职场经验和感悟。以下是对书中的几个核心章节及其蕴含的知识点的详细解析: ### 第一章:修炼!修炼! - ...
本书是一位有20多年职场经验的IT企业高管撰写的一系列有关职场悟道的短文集成,讲述的是在企业里如何修炼自己,如何摆平自己的心态,怎样做到“世事洞明”和“人情练达”,如何“搞定老板”,怎样做到工作和生活平衡...
三是遵循Web标准,确保应用在不同浏览器和设备上的兼容性;四是考虑可访问性和可用性,使所有用户都能轻松使用。 总的来说,"仿桌面Web框架"是一个旨在提升Web应用用户体验的技术,它通过模拟桌面环境的交互模式,...
20年的职场生涯,必定涵盖了对性能优化的理解。Java中的并发编程是提升系统效率的重要手段,线程池、锁机制、并发容器等都是需要熟练掌握的工具。而Java虚拟机(JVM)的调优,如堆内存设置、垃圾收集器选择,也是...
这是一位IT高管的20年的职业心经 职场是一个战场,很多人几十年在这里战斗。 职场是一个熔炉,很多人大半生在这里修炼。 如果在办公室里得不到快乐,生活就不会快乐。 如果公司里头感觉不到幸福,人生就不会幸福...
他认为,无论读史还是悟道,最终追求的是内心的宁静与淡泊,如同诗酒田园般的生活态度。 【对世界的理解】 南怀瑾认为这个世界是“缺陷”的,正如佛学中的“娑婆世界”和《易经》的观念。他指出,生命、事物都有...
企业管理培训课件:企业家悟道明术.ppt
"悟道3.0全面开源!LeCun VS Max 智源大会最新演讲" 大模型GPT AI知识点: 1. 悟道3.0全面开源:悟道3.0是一个开源的大语言模型,具有中英双语知识、商用许可,符合国内数据要求。 2. 自监督深度学习:黄铁军院长...
NULL 博文链接:https://ryee.iteye.com/blog/600957