- 浏览: 534054 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
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 1925insertAdjacentHTML方法示例 添加HTML内 ... -
float margin padding
2009-12-23 16:46 2506今天做网站的时候发 ... -
WEB2.0标准教程:第二天 什么是名字空间
2009-12-14 10:28 1098DOCTYPE声明好以后,接下来的代码是: <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 993一、永远使用小写字母 不好的做法: <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 2153screenX:鼠标在显示屏幕上的坐标。 clientX ... -
hasOwnProperty
2009-06-26 11:19 1652JavaScript中hasOwnProperty函数方 ... -
getBoundingClientRect()
2009-06-25 15:16 1309getBoundingClientRect() 来获取页面 ... -
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将其他...
综上所述,这个项目采用了成熟的SSH框架进行开发,结合了高效的Druid数据库连接池,强大的日志系统Logback,以及用于JSON处理的Jackson库,构建了一个功能齐全、性能优秀的Java Web应用。这样的组合在企业级应用开发...
4. **性能优化**:针对高并发场景下的性能瓶颈进行分析和优化。 5. **单元测试**:加强单元测试覆盖度,确保代码质量。 以上就是关于SSH快速开发框架设计的相关知识点,包括其总体架构、老技术的应用以及新技术的...
七、安全与性能优化 Fishcart-3.2在设计时考虑了安全性和性能。它可能包含SQL注入防护、XSS防御、CSRF保护等安全措施。同时,通过缓存机制、数据库查询优化、负载均衡等手段,提升系统响应速度和并发处理能力。 综...
Hibernate5.4版本引入了更多的优化,比如对JPA 2.2的支持,性能提升,以及对Java 8日期时间API的兼容。在Struts2和Spring框架中,Hibernate可以作为数据持久层,简化数据库操作,使得业务逻辑和数据存储之间的耦合度...