前台页面优化全攻略(二)

标签: 页面 优化 攻略 | 发表时间:2014-09-05 09:53 | 作者:
出处:http://kb.cnblogs.com/

  在 上一篇文章中,我们讨论了一些基本的页面优化和减肥方案,现在我们的页面已经被缩减了30%-50%,如果你还没有阅读上一篇文章,我建议你完成那些基础热身之后再继续进阶的训练。

  如果你已经尝试了基础的热身,那我们就继续采取一些更极客的解决方案。

  1. 移除网站中社交网络的组件

  看到这个标题请不要惊讶,我并不是让你放弃第三方社交平台,而是希望你能放弃那些肥胖的官方组件。你的网站中有社交平台的分享按钮么?这些按钮会为你的网站增重大概0.5M。我们知道,这些分享功能都是由 JavaScript实现的,有些分享组件的网络连接会强制在加载页面之前进行。

  太大的社交组件完全没有必要,你完全可以添加一个轻量级的社交分享按钮在你的网页中,几行html代码就能搞定的事为什么要弄的这么复杂呢?很多人可能都没有在意到一个小细节,FaceBook的官方”赞“按钮就要270KB!现在你应该明白这么做的必要性了,我们应该 深入研究如何优化社交组件

  如果你觉得一个简单的按钮无法提供数据统计等功能,可以看一看 这篇文章,学习一下如果添加高性能的轻量级社交组件。

  2. 检查所有第三方组件的大小

  社交网络并不是唯一的原因,其它第三方的组件也大大增大了你网站的大小,这些组件有时候甚至会加载其它网站的内容,这些加载的数据可能高达几百KB。

  如果你必须要使用这个组件,那我们要考虑的就是如何更好的处理和简化这个组件了。理想情况下, JavaScript组件应该都是轻量级的,它们在页面底部被加载,

  3. 考虑使用懒加载或内容点播

  假设你的网站是用来显示视频供应商提供的视频。无论用户是否有意要播放,页面都会加载视频API和其它相关的资源。为什么不让用户请求之后再加载这些东西呢?

  你也可以采用滚动式页面,在用户往下拉滚动条时再开始加载新的内容,这样做虽然可能会对SEO造成影响,但是在特定的情况下,如照片展示,微博内容展示等都会有不错的效果。

  4. 用CSS取代图片

  你还在用切片技术创建图片的圆角边框等样式吗?我们都知道, CSS可以生成很多种前台效果,包括各种样式的按钮,背景……虽然他们在不同的浏览器中可能会有不同的展示样式,但用户并不会在意这些,他们不会像你一样开很多个浏览器对比同样的代码会有什么样的区别。

  你完全不用担心古代浏览器会对CSS样式造成影响,当你构建一个响应式设计的页面,你要通配各种大小的屏蔽,这个时候如果你还是用图片就会有很多问题,所以CSS是很好的选择。

  不过需要注意的是重绘CSS的阴影和梯度代价也是非常大的,特别是你同时在几十个元素中都添加了这些特性。所以你必须多次去实践,对比在你的网站中是用CSS好还是用图片好。这些都要因网站具体情况而定。

  5. 用CSS效果和动画取代JavaScript

  如果在你的 JavaScript代码中到处都是$("#x").fade() 和 $("#y").slideDown()这会对你的网站造成很大的影响。在几年前我们必须得这么做,但是现在不同了,我们可以选择用CSS3的 animationstransitions 和  transformations取代了JavaScript的效果,原因如下:

  1).  CSS3 animation是由本地浏览器自主绘制的,在没有错误的情况下,它会比 JavaScript效果好,而且快很多。

  2).  CSS3 animation代码更容易编写,而且代码量少。

  3). 如果 JavaScript不使用第三方类库,3D效果的实现会比 CSS3提供3D转换难很多。

  6. 使用可缩放矢量图(SVGs)

  SVGs 包括点,线和图形,它们被以矢量的形式被定义在XML中,SVGs是响应式设计中比更理解的解决方案,它们可以缩放成任意大小而且不会影响到显示的效果,而且文件大小一般都会小于bitmap。

  当然,SVGs并不是在任何情况下都适用,如果是相册或是混合通道的图片就应该使用JPG或是PNG格式。其他比如logo,图表可以放心选用SVGs。

  有一些工具可以直接把bitmaps格式的图转成矢量格式,但是多少影响到图片的效果。这里推荐 Inkscape 和  SVG edit,它们都是很不错的创建SVGs的工具包。 

  7. 用图标字体(icon fonts)代替图片

  利用字体工具把我们平时 Web 上用的图形图标(icons)转换成 web fonts,就成了 icon fonts,它可以借助 CSS 的 @font-face 嵌入到网页里,用以显示 icons。因为字体是矢量化图形,它天生具有「分辨率无关」的特性,在任何分辨率和PPI下面,都可以做到完美缩放,不会像传统位图,如:png,jpeg,放大后有锯齿或模糊现象。

  由于图标字体的灵活性和易用性使得图标字体使用越来越广泛了,我们经常可以看到不同的UI框架都整合了各种的图标字体。

  除了「分辨率无关」这个最大的优点之外,icon fonts 还具有:

  • 文件小:相比图片几十几百KB的容量,icon fonts 几乎是羽翼级轻量。
  • 加载性能好:因为图标都被打包进一套字体内,http request 减少。这如同我们常用的 css sprites 技术。
  • 支持CSS样式:和普通字体一样,你可以利用CSS来定义大小、颜色、阴影、hover状态、透明度、渐变等等…
  • 兼容性好:web fonts 起源很早,别说主流浏览器,连IE6/7都能良好支持。除了一些老的移动端浏览器,如Android 2.1以下的初代浏览器,Opera mini 这类自限型浏览器。

  当然 icon fonts 也有它的不足:

  • 样式单一,无法针对不同分辨率来调整icon 的细节,比如降低大尺寸icon 的线条粗细。
  • 颜色单一,CSS 无法方便的去定义彩色的 icon,倒是有通过叠加组合的方式来达到彩色图标的目的。
  • 移动端浏览器兼容性还不够完善,像Opera mini、Windows phone 7.0-7.8 都不能正常显示icon fonts。
  • 有少量的移动设备有可能会和 icon fonts 的字符编码冲突,导致icon 显示不正常(我们自己风车Android 版本就碰到了这个问题)。

  所以 icon fonts 也并不是一套完美的响应式图片的解决方案,当它适宜你的应用场景时,比如:

  • 你的网站是扁平化或简约风格,图标样式单一,颜色为纯色。
  • 你的目标用户使用桌面浏览器为主,或者,
  • 你愿意为非兼容设备做兼容hack。

  icon fonts 是一个令设计师和前端工程师都心花怒放的方案。

  icon fonts 的制作主要有两条思路:

  1. 利用字体工具手动制作
  2. 利用在线工具自动生成

  8. 使用sprite来优化图片资源

  Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏、视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要同时保持画面流畅。“Sprite”就是这样一种技术,它将许多图片组合到一个网格上,然后通过程序将每个网格的内容定位到画面上。

  Sprite被定位到一副静态图片上,并且通过简单的程序或硬件即可正确定位到画面上,一幅幅图片就像是被“变”出来的,他们并没有单独占用内存,所以被取名为“Sprite精灵”。

  时间进行到2000年,Web设计向着精致、巧妙的方向发展。设计师们开始考虑使用非 Javascript的方 式制作鼠标滑过、悬停菜单的效果,这时CSS Sprite应运而生,它基于同上文提到的游戏Sprite同样的原理,并且使用CSS更容易控制,很快的流行开来。

  当页面加载时,不是加载每个单独图片,而是一次加载整个组合图片。这是一个了不起的改进,它大大减少了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所需要的时间延迟,使效果更流畅,不会停顿。

  CSS Sprites可以用在很多场合,大型网站可以将许多单独的图片,以有机的方式组合起来,从而使其便于维护和更新。图片之间通常会留出较大的空白,使 得图片不会影响网页的内容。但同时CSS Sprite大多使用于较固定的像素定位中,它的弹性较差,收到定位等因素的制约。所以,你需要在可维护性vs降低负载之间权衡利弊,选择最适合你的项目 的方式。

  在网站图片的解决方案中, CSS3应该是首选,其次是SVG和icon font,最后才是Bitmap。经常使用的Bitmap文件应该打包放在一个单独的sprite中,这样一来图片就可以在CSS中访问到了,像这样:

.sprite {
width: 16px;
height: 16px;
background: url("sprite.png") 0 0 no-repeat;
}
.sprite.help { background-position: 0 -16px; }
.sprite.info { background-position: 0 -32px; }
.sprite.user { background-position: 0 -48px; }

  9. 使用data URIs

  假设你有一个图片,把它在网页上显示出来的标准方法是:

<img src="http://gbtags.com/images/A.png"/>

  这种取得资料的方法称为 http URI scheme ,同样的效果使用 data URI scheme 可以写成:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA

7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />

  换句话说我们把图像档案的内容内置在 HTML 档案中,节省了一个 HTTP 请求。

  data uri的主要优点是减少了http请求数,调用起来比css sprite更加灵活,缺点是增加了客户端的资源消耗。

  在所有浏览器的非缓存的模式下, CSS sprite 方式比 data URI 方式快了数百微秒。但事实上 CSS Sprite 比 Data URI 方式多发送了一次连接请求,包括 TCP 慢启动招致所有相关的连接开销。

  缓存条件下 Android 4.2 和 iOS 6 的 CSS sprite 模式都有大概 2 倍的速度提升,只是 iOS 条件下减少了 220ms 而 Android 减少了 70ms (原生浏览器)。相对来说,Chrome 和 Firefox 的情况平衡得好点,缓存和非缓存情况下只有 50% 到 60ms 左右的性能差异。

  在这里我建议将 data URIs 用于非常小的资源,并且不能在 CSS 和 内联 HTML 中多次使用它们。

  10. 使用网站评估工具

  检查是否减肥成功的最好方法就是站到称上称一下,同样,你需要使用网站评估工具评估一下你给网站瘦身的效果。很多开发者工具和免费的在线测试工具都不错,百度和Google的站长分析工具都很好用。

  总结

  大家可以明显的发现这篇文章比 第一篇不正常多了,更显极客范儿,相信能把实践跟到这的站长已经不多了。对于我们来说,极客的瘦身之道远不仅如此,在下一篇文章中,我会列出更加疯狂的瘦身技巧。成功的都是坚持到最后的那些人,共勉之~

相关 [页面 优化 攻略] 推荐:

前台页面优化全攻略(一)

- - 博客园_知识库
   英文原文: http://www.sitepoint.com/complete-guide-reducing-page-weight/.   据调查,网页大小在2013年平均增长了32%,平均达到了1.7M,单独的HTTP请求达到96个. 这是令人震惊的数字,而且这只是个平均值,有一半的网站会大于这个值.

前台页面优化全攻略(二)

- - 博客园_知识库
  在 上一篇文章中,我们讨论了一些基本的页面优化和减肥方案,现在我们的页面已经被缩减了30%-50%,如果你还没有阅读上一篇文章,我建议你完成那些基础热身之后再继续进阶的训练.   如果你已经尝试了基础的热身,那我们就继续采取一些更极客的解决方案.   看到这个标题请不要惊讶,我并不是让你放弃第三方社交平台,而是希望你能放弃那些肥胖的官方组件.

前台页面优化全攻略(四)

- - 博客园_知识库
  通过前几篇文章,你应该已经掌握了很多优化网站的方法. 现在你的网站加载速度已经很快了,但是你必须持续的监控你的网站,了解它的大小变化,要不然一段时间过去之后,它可能又成为了一个胖子.   如今每个页面平均已经达到1.7M,每年增长大概32%. 你可以通过以下几个工具来查看你的网站是不是又在暴饮暴食,而且它们都是免费的.

前台页面优化全攻略(三)

- - 博客园_知识库
  经过前 两篇文章的实践,你的网站加载速度一定有了非常明显的变化. 能把实践跟到这篇文章的人想必一定是极客中的极客. 如果你仍对网站的加载速度不满意,可以看看再尝试一下本文中几近疯狂的终极优化方案.   你可以对网站进行快速的优化,但网站日常的节食却很难. 也许你已经花了很大的力气去优化你的 CSS和 JavaScript代码,但是你所做的努力马上又会因为老板或客户期望的新功能而付之东流.

如何做页面优化

- - 互联网的那点事
改版是在原有基础上做较大的改变;而优化是做些小的调整,快速提升效果. 但不管是改版还是优化,都需要考虑以下的步骤:. 1.问题现状(数据、用户反馈等)/  用户调研(问卷、访谈等内容,尽量结合数据看)/  竞品分析. 2.结合上面三点,确定优化目标. 3.根据目标确定设计计划(如何达成目标). 4.结果检验(数据、用户反馈等指标).

网站页面优化策略

- - 月光博客
  网站的页面优化,也即网页优化是对网页的程序、内容、版块、布局等多方面的优化调整,使其适合搜索引擎检索,满足搜索引擎排名的指标,从而在搜索引擎检索中获得的排名提升,增强搜索引擎营销的效果使网站的产品相关的关键词能有好的排位. 使网站更容易被搜索引擎收录,提高用户体验和转化率进而创造价值. 下面主要从网站代码、标签、正文等几个方面来讲述网站的页面优化.

【mysql的设计与优化专题】mysql的最佳索引攻略 - 菜问

- - 博客园_首页
所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论;.

管理好页面图片,减少页面加载时http连接,优化页面

- - ITeye博客
浏览器渲染页面的时候,遇到图片标签或者css中的背景图片设置,先会到本地缓存中寻找是否已经下载了这张图片,如果已经下载过了就直接从缓存中加载;否则会到图片指定的路径下载到本地缓存. 而且这种下载是阻塞式的(部分浏览器内核已经实现异步加载图片. 也就是说在下载这些图片的时候,页面渲染处于暂停状态,必须等到图片下载完成了再继续渲染.

[转]浏览器的加载与页面性能优化

- Allen - linux大棚-roclinux.cn
本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. 文章部分转自“百度泛用户体验平台”,本文地址为:http://www.baiduux.com/blog/2011/02/15/browser-loading/.

浏览器的加载与页面性能优化

- 彦强 - 百度泛用户体验
本文将探讨浏览器渲染的loading过程,主要有2个目的:. 了解浏览器在loading过程中的实现细节,具体都做了什么. 研究如何根据浏览器的实现原理进行优化,提升页面响应速度. 由于loading和parsing是相互交织、错综复杂的,这里面有大量的知识点,为了避免过于发散本文将不会对每个细节都深入研究,而是将重点放在开发中容易控制的部分(Web前端和Web Server),同时由于浏览器种类繁多且不同版本间差距很大,本文将侧重一些较新的浏览器特性.