前端性能优化—前端工程师不得不说的痛

所属分类: 网页制作 / 应用技巧 阅读数: 1195
收藏 0 赞 0 分享
前言
在上一篇文章《我的css架构理念》中,承蒙园内的朋友们抬爱,竟然一路被推荐,让我这小小一枚前端攻城狮既意外又兴奋进而惶恐。惶恐的是资历实在有限,知识实在匮乏,相当害怕误人子弟。此真心话!但接下来我依然会坚持有时间就写写文章,既能总结,又能学到新知识,还能分享给诸位,我认为,分享---是件功德无量的事,互联网不就是因此而绚丽多彩嘛!

上篇文章的留言里有好多朋友是对我css架构就http请求的问题提出质疑,我本想回答的,但不知道从何说起。前端性能方面的知识我了解得并不深入,囫囵吞枣地看过一两本重构的书、喜欢查查资料,看看一些大牛写的文章,觉得人家那么做有道理了,就搬过来用,林林总总的做些总结,于是有了此文。都不是什么新东西,但是因为小知识点太多,希望这里面的东西有你想要的答案吧。

前端性能优化--前端工程师不得不说的痛
1.html、css、js三者相分离。分离得彻底点!为什么这三者要分离,相信大家都明白,不多说。
2.css的导入方式。css用link而不用@import,因为在 IE 中 @import 指令等同于把 link 标记写在 HTML 的底部,延长css的载入时间,还可能出现文件下载次序被更改的情况。
3.理性对待jquery。jquery让我们“write less,do more”,它有太多优势:强大的选择器、DOM操作的完美封装、完善的Ajax、良好的兼容性处理。但是,我们是否就此离不开它呢?我觉得应该根据需求,根据业务逻辑来。一个页面如果只需要几行或几十行js代码可以搞定的效果,为什么要用jquery?让页面先加载个jquery.js,再书写自己的代码?没必要吧。
4.合理布局页面的内容。DOM的加载顺序是由上而下的,遇到css,加载css,遇到js,停滞下来,加载并解析js。在布局页面的时候,把主体内容优先显示,把重要内容靠上布局,让浏览器优先解析,是种较好的方案。 
5.js的导入方式。《javascript王者归来》里有对js的导入方式进行优劣对比。我个人认为,在不考虑js代码重用及维护的前提下(但是往往这点成为我最重要的衡量指标),把具有重要业务模块的js代码置于title里,把次要的具有操作效果的js代码置于DOM相对应的对象之后。而这样做的理论依据即DOM的加载顺序。上面那话不好理解,举例来说:
 
上图是QQ音乐首页的导航,主导航的重要作用不言而喻,如下是两段相应的代码:

复制代码
代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test--js导入方式1</title>
<script type="text/javascript">
</script>
</head>
<body>
<ul>
<li><a href="">首页</a></li>
<li><a href="">乐库</a></li>
<li>
<a href="" id="mv">MV</a>
<div class="">
<a href="">MV推荐</a>
<a href="">MV库</a>
<a href="">音乐现场</a>
<a href="">MV专题</a>
</div>
</li>
<li><a href="">我的音乐</a></li>
<li><a href="">下载客户端</a></li>
</ul>
</body>
</html>


复制代码
代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test--js导入方式1</title>
</head>
<body>
<ul>
<li><a href="">首页</a></li>
<li><a href="">乐库</a></li>
<li>
<a href="" id="mv">MV</a>
<div class="">
<a href="">MV推荐</a>
<a href="">MV库</a>
<a href="">音乐现场</a>
<a href="">MV专题</a>
</div>
</li>
<li><a href="">我的音乐</a></li>
<li><a href="">下载客户端</a></li>
</ul>
<script type="text/javascript">
</script>
</body>
</html>

两段代码的js效果为鼠标移到MV菜单项时显示子菜单选项。第一段代码中,当浏览器解析到<script>标签时,会停滞下来,直到都解析完了,再继续往下,当MV显示时,我们鼠标一移上去,子菜单就会显示出来;而第二段代码中,浏览器解析到MV时,再到<script>,得先加载js,直到完成,子菜单才会显示。显然,对于这种重要功能模块,更适合采用第一段代码。关于这个原理,我理解的方向不知道有没有偏差或者错误,园中朋友有深入研究的请纠错。

6.图片文件格式的选择。关于这点,淘宝UED的图片格式与设计那点事儿有很深入地探讨,我个人觉得受益匪浅,但是文章太长,写得太深入,没耐心还真看不下去,所以后来我又自己总结了下,可以参考下三种图像文件格式的选择。当时总结完这篇文章后,工作的时候就严格按照这上面的来执行了。

7.sprites贴图技术。这是一项从一出现就备受争议的技术,第一、我们需要打开ps,把许多小图标有规则地排放在一起;第二、我们需要打开ps,最好再放大5倍,再水平垂直拉下两条参考线,然后对到标尺,记下left/top值,写到css文件里;第三、sprites贴图技术与height、line-height关系紧密,因为它们,第二点中定位的left/top又将变得不准确,这时你应该给图标之间留出一定的间隙,不然当心显示出来的都是一半的图标哦。我实在没精力再去截图写代码来证明我是对的,这个自己可以有。我似乎把这项技术说得一文不值,让Dave Shea情何以堪!贴图技术之所以到现在还在被广泛使用,我想最主要的原因就是它大大减少了请求数并在一定程度上减少了图片的总体积的缘故。跟这两点比起来,我前面所说的那些缺点似乎不值一提了。

8.让页面渐进增强。将分辨率、操作系统、浏览器、项目针对的用户目标群相结合,在页面制作的过程中采用渐进增强的原则。如果项目的用户目标群普遍采用的是1024*768、Mac os x、ie7+浏览器,那么在设计页面的时候,宽度要做相应的限制,最好水平不出现滚动条;字体也不再选择宋体,采用其他web安全字体;接下来我们开心了,因为可以不考虑ie6,是不是觉得工作忽然间变得很幸福?渐进增强不单单可以应用到大的方向上,还可以具体到单页面模块中;
(图1) (图2)
图1和图2是截取自一列表中的一个li,图2为鼠标移到li上的效果--显示“取消关注”。 我将在这模块中应用渐进增强原则:第一、需要考虑ie6,那么由于ie6不支持除了a标签以外的其他标签的hover效果,且“取消关注”又是个重要的功能,不要不行,所以只能采用js代码来实现鼠标移入移出效果;第二、如果不考虑ie6,那么假设“取消关注”的标签为span,就可以在css样式表里这么书写:li:hover span{display:block;};第三、如果“取消关注”功能换成无关紧要文字显示,如时间显示,那么一样可以采用第二点写法,让其他浏览器显示、ie6不显示影响也不大。

9.少用滤镜、表达式和hack。这在很多重构书上都会被提到,项目中有对滤镜进行过测试,一堵照片墙过去,全用上滤镜,浏览器加载页面速度那个慢啊,亲眼见到了!表达式不晓得。hack打一开始就在规避,几乎没用过,所以不发表意见。

10.借助一些外在的应用来减少css、js文件的请求数。php程序的可以考虑用minify来把每个页面的css和js整合到一起,再在页面中进行调用,这样页面就只请求一次css和js,性能会优化许多。
我暂时能想到的就先写到这里了。关于前端性能的优化应该还有很多,这些都是皮毛而已,慢慢再深入了。好吧,再侃点其他的!

前端与美工人员
前端工程师上衔美工、下接后端、背靠产品,缺一不可。职责分工要明确,前端要告诉美工能少用图片尽量少用、合理地选择图片的文件格式、网站页面风格尽量同一、给出网站主业务链接色、辅链接色、主文本颜色和其他文字颜色等等。美工都是单一页面做出来的,往往没办法考虑到整个网站最终的效果,这个时候前端就应该起到一个提示的作用,如果这个环节没把该确定的东西确定下来,到时候改版起来会相当痛苦。

前端与后端人员
把命名方式沟通清楚、跟后端人员解释前端css、js、image目录结构定义的想法、了解后端的工作原理。

前端与产品经理
每个职位的人员都不容易,产品经理更是,最终对产品负责的还是产品经理。不知是否是这样的原因,我所遇到的产品经理都格外细致,有的甚至细致到跟原型效果图差2、3px他都能看得出来!产品经理如果过于追求细节,前端会很悲催。怎么处理这样的情况?和产品经理一样站在产品和用户的角度去思考问题,千万不要站在个人的职位上去想问题,不然永远无法说服他。当然,这有点难度...
终于侃完了,做个总结吧,关于程序设计的些许想法:程序跟人生一样,有的时候需要妥协,不能说为了减少请求数,就不注重代码维护,对待使用2M的用户和10M的用户是不能使用同样的处理方式的,网站访问量的多少也应该考虑在内,多个方面综合考虑、权衡,给出一个最优化方案。我想这才是最合理的。
更多精彩内容其他人还在看

32个典型的以分栏/网格为基础的网站

如果你正在寻找网页分栏设计的灵感,这里收集了32个典型的以分栏/网格为基础的网站。它们显示了在网页设计中分栏/网格的重要性,无论对于信息量巨大的站点还是个人博客。 1.The New York Times 2.National Post 3.Guardian 4.Times
收藏 0 赞 0 分享

理论普及——用户体验

一、概念分析1:UE用户体验 英文叫做user experience,缩写为UE, 或者UX。 当指电子商务网站的时候也被称作顾客体验(CUSTOMER EXPERIENCE). 它是指用户访问一个网站或者使用一个产品时的全部体验。他们的印象和感觉,是否成功,是否享
收藏 0 赞 0 分享

分页案例和好的实践

结构和层次降低了复杂性并提高了可读性。你的文章或站点组织的越深入,用户就越容易理解你观点和得到你想传达的信息。在网页上,这点被通过多个方式做到。 在正文头条和列举被用做逻辑上独立的数据块来呈现信息。另一种解决方法是一种叫分页的机制,它在给定文章的单一部
收藏 0 赞 0 分享

建立用户体验

也许你刚刚来到一家公司,他们希望进行一些“可用性”工作。你可能是一名UI设计师,业务分析师,或前端开发人员,一名产品经理,或者负责用户体验部门的经理或副总。你知道,如果更好地了解使用产品/软件/网站的人,就可能开发出更好的产品/软件/网站。不管怎么样
收藏 0 赞 0 分享

网页图片快速显示的方法和技巧

1. Use .gifs rather than .jpgs. GIFs are smaller in size when compared to JPGs. 1.用.gifs格式保存图片,最好不要用.jpgs格式。因为前者的尺寸比后者小。 2.Use 'Height
收藏 0 赞 0 分享

推荐60种分页案例和好的实践

结构和层次降低了复杂性并提高了可读性。你的文章或站点组织的越深入,用户就越容易理解你观点和得到你想传达的信息。在网页上,这点被通过多个方式做到。 在正文头条和列举被用做逻辑上独立的数据块来呈现信息。另一种解决方法是一种叫分页的机制,它在给定文章的单一部
收藏 0 赞 0 分享

全面的网站评估方案

有时会被问到“看看XXX网站如何?”之类的问题。 谈到评估,通常都是指产品级的网站,如果模式很新,了解需要花一定时间。于是,很多人又问“那么你仅从UI/UE的角度看看呢?”首先我们得达成共识,一切花里胡哨都在为功能服务,如果功
收藏 0 赞 0 分享

网页的栅格设计思考

原文地址:http://andymao.com/andy/post/82.html 网页设计中的脏、乱、差,是我们在设计过程中常会遇到的问题。通常"脏"是由对色彩使用不当所产生的,而色彩使用不当产生的不好效果也分为:"花、灰",花哨、
收藏 0 赞 0 分享

设计理论设计中的层次感

原文:http://andymao.com/andy/post/80.html 这段时间我一直在说设计需要有层次感,这种层次感可能有很多类型,比如色彩的层次感,或是元素的层次感。当一个设计缺乏层次感的时候页面所表现出来的无非是两种可能,一种是单调,一种是花哨。在设计中我们常
收藏 0 赞 0 分享

网页心得:网页色彩的搭配

网页的色彩是树立网站形象的关键之一,色彩搭配却是网友们感到头疼的问题。网页的背景,文字,图标,边框,超链接...,应该采用什么样的色彩,应该搭配什么色彩才能最好的表达出预想的内涵呢?这里谈一些心得,希望对你有所启发。 首先我们先来了解一些色彩的基本知识:
收藏 0 赞 0 分享
查看更多