`
xys_777
  • 浏览: 211804 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JavaScript和CSS的优化提高网站性能

 
阅读更多

在第一部分和第二部分中我们分别介绍了改善网站性能中页面内容和服务器的几条守则,除此之外,JavaScript和CSS也是我们页面中经常用到的内容,对它们的优化也提高网站性能的重要方面:
CSS:

  1. 把样式表置于顶部
  2. 避免使用CSS表达式(Expression)
  3. 使用外部JavaScript和CSS
  4. 削减JavaScript和CSS
  5. 用<link>代替@import
  6. 避免使用滤镜

JavaScript

  1. 把脚本置于页面底部
  2. 使用外部JavaScript和CSS
  3. 削减JavaScript和CSS
  4. 剔除重复脚本
  5. 减少DOM访问
  6. 开发智能事件处理程序

17、把样式表置于顶部

在研究Yahoo!的性能表现时,我们发现把样式表放到文档的<head />内部似乎会加快页面的下载速度。这是因为把样式表放到<head />内会使页面有步骤的加载显示。

注重性能的前端服务器往往希望页面有秩序地加载。同时,我们也希望浏览器把已经接收到内容尽可能显示出来。这对于拥有较多内容的页面和网速较慢的用户来说特别重要。向用户返回可视化的反馈,比如进程指针,已经有了较好的研究并形成了正式文档。在我们的研究中HTML页面就是进程指针。当浏览器有序地加载文件头、导航栏、顶部的logo等对于等待页面加载的用户来说都可以作为可视化的反馈。这从整体上改善了用户体验。

把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。

HTML规范清楚指出样式表要放包含在页面的<head />区域内:“和<a />不同,<link />只能出现在文档的<head />区域内,尽管它可以多次使用它”。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文档<head />内加载你的样式表。 CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

18、避免使用CSS表达式(Expression)

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用,因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。

表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。

一个减少CSS表达式计算次数的方法就是使用一次性的表达式,它在第一次运行时将结果赋给指定的样式属性,并用这个属性来代替CSS表达式。如果样式属性必须在页面周期内动态地改变,使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。

19、使用外部JavaScript和CSS

很多性能规则都是关于如何处理外部文件的。但是,在你采取这些措施前你可能会问到一个更基本的问题:JavaScript和CSS是应该放在外部文件中呢还是把它们放在页面本身之内呢?

在实际应用中使用外部文件可以提高页面速度,因为JavaScript和CSS文件都能在浏览器中产生缓存。内置在HTML文档中的JavaScript和CSS则会在每次请求中随HTML文档重新下载。这虽然减少了HTTP请求的次数,却增加了HTML文档的大小。从另一方面来说,如果外部文件中的JavaScript和CSS被浏览器缓存,在没有增加HTTP请求次数的同时可以减少HTML文档的大小。

关键问题是,外部JavaScript和CSS文件缓存的频率和请求HTML文档的次数有关。虽然有一定的难度,但是仍然有一些指标可以一测量它。如果一个会话中用户会浏览你网站中的多个页面,并且这些页面中会重复使用相同的脚本和样式表,缓存外部文件就会带来更大的益处。

许多网站没有功能建立这些指标。对于这些网站来说,最好的坚决方法就是把JavaScript和CSS作为外部文件引用。比较适合使用内置代码的例外就是网站的主页,如Yahoo!主页和My Yahoo!。主页在一次会话中拥有较少(可能只有一次)的浏览量,你可以发现内置JavaScript和CSS对于终端用户来说会加快响应时 间。点击这里查看网页制作教程频道内容

对于拥有较大浏览量的首页来说,有一种技术可以平衡内置代码带来的HTTP请求减少与通过使用外部文件进行缓存带来的好处。其中一个就是在首页中内置JavaScript和CSS,但是在页面下载完成后动态下载外部文件,在子页面中使用到这些文件时,它们已经缓存到浏览器了。

精简是指从去除代码不必要的字符减少文件大小从而节省下载时间。消减代码时,所有的注释、不需要的空白字符(空格、换行、tab缩进)等都要去掉。在JavaScript中,由于需要下载的文件体积变小了从而节省了响应时间。精简JavaScript中目前用到的最广泛的两个工具是JSMin和YUI Compressor。YUI Compressor还可用于精简CSS。

混淆是另外一种可用于源代码优化的方法。这种方法要比精简复杂一些并且在混淆的过程更易产生问题。在对美国前10大网站的调查中发现,精简也可以缩小原来代码体积的21%,而混淆可以达到25%。尽管混淆法可以更好地缩减代码,但是对于JavaScript来说精简的风险更小。

除消减外部的脚本和样式表文件外,<script>和<style>代码块也可以并且应该进行消减。即使你用Gzip压缩过脚本和样式表,精简这些文件仍然可以节省5%以上的空间。由于JavaScript和CSS的功能和体积的增加,消减代码将会获得益处。

21、用<link>代替@import

前面的最佳实现中提到CSS应该放置在顶端以利于有序加载呈现。

在IE中,页面底部@import和使用<link>作用是一样的,因此最好不要使用它。

22、避免使用滤镜
IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。点击这里查看网页制作教程频道内容

完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

23、把脚本置于页面底部

脚本带来的问题就是它阻止了页面的平行下载。HTTP/1.1 规范建议,浏览器每个主机名的并行下载内容不超过两个。如果你的图片放在多个主机名上,你可以在每个并行下载中同时下载2个以上的文件。但是当下载脚本时,浏览器就不会同时下载其它文件了,即便是主机名不相同。

在某些情况下把脚本移到页面底部可能不太容易。比如说,如果脚本中使用了document.write来插入页面内容,它就不能被往下移动了。这里可能还会有作用域的问题。很多情况下,都会遇到这方面的问题。

一个经常用到的替代方法就是使用延迟脚本。DEFER属性表明脚本中没有包含document.write,它告诉浏览器继续显示。不幸的是,Firefox并不支持DEFER属性。在Internet Explorer中,脚本可能会被延迟但效果也不会像我们所期望的那样。如果脚本可以被延迟,那么它就可以移到页面的底部。这会让你的页面加载的快一点。

24、剔除重复脚本

在同一个页面中重复引用JavaScript文件会影响页面的性能。你可能会认为这种情况并不多见。对于美国前10大网站的调查显示其中有两家存在重复引用脚本的情况。有两种主要因素导致一个脚本被重复引用的奇怪现象发生:团队规模和脚本数量。如果真的存在这种情况,重复脚本会引起不必要的HTTP请求和无用的JavaScript运算,这降低了网站性能。

在Internet Explorer中会产生不必要的HTTP请求,而在Firefox却不会。在Internet Explorer中,如果一个脚本被引用两次而且它又不可缓存,它就会在页面加载过程中产生两次HTTP请求。即时脚本可以缓存,当用户重载页面时也会产生额外的HTTP请求。

除增加额外的HTTP请求外,多次运算脚本也会浪费时间。在Internet Explorer和Firefox中不管脚本是否可缓存,它们都存在重复运算JavaScript的问题。

一个避免偶尔发生的两次引用同一脚本的方法是在模板中使用脚本管理模块引用脚本。在HTML页面中使用<script />标签引用脚本的最常见方法就是:

<script type="text/javascript" src="menu_1.0.17.js"></script>

在PHP中可以通过创建名为insertScript的方法来替代:

<?php insertScript("menu.js") ?>

为了防止多次重复引用脚本,这个方法中还应该使用其它机制来处理脚本,如检查所属目录和为脚本文件名中增加版本号以用于Expire文件头等。点击这里查看网页制作教程频道内容
25、减少DOM访问

使用JavaScript访问DOM元素比较慢,因此为了获得更多的应该页面,应该做到:

  • 缓存已经访问过的有关元素
  • 线下更新完节点之后再将它们添加到文档树中
  • 避免使用JavaScript来修改页面布局

有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”。

26、开发智能事件处理程序

有时候我们会感觉到页面反应迟钝,这是因为DOM树元素中附加了过多的事件句柄并且些事件句病被频繁地触发。这就是为什么说使用event delegation(事件代理)是一种好方法了。如果你在一个div中有10个按钮,你只需要在div上附加一次事件句柄就可以了,而不用去为每一个按钮增加一个句柄。事件冒泡时你可以捕捉到事件并判断出是哪个事件发出的。点击这里查看网页制作教程频道内容

你同样也不用为了操作DOM树而等待onload事件的发生。你需要做的就是等待树结构中你要访问的元素出现。你也不用等待所有图像都加载完毕。

你可能会希望用DOMContentLoaded事件来代替onload,但是在所有浏览器都支持它之前你可使用YUI 事件应用程序中的onAvailable方法。

有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”。

20、削减JavaScript和CSS

分享到:
评论

相关推荐

    前端 web素材 中级进阶 JavaScript 优化 css优化

    在前端开发领域,JavaScript 和 CSS 优化是提升网站性能、用户体验和搜索引擎排名的关键技术。中级进阶阶段,开发者需要深入理解这些技术的优化策略,以实现更高效、更流畅的网页应用。 首先,我们来探讨JavaScript...

    前端 每日代码 中级进阶 JavaScript 优化 css优化

    在前端开发领域,中级进阶阶段的开发者通常需要掌握更深入的JavaScript和CSS优化技巧,以提升网页性能和用户体验。JavaScript作为前端的核心语言,优化它能够显著提高页面加载速度和运行效率;而CSS优化则关乎页面...

    前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源.zip

    前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...

    Yahoo!网站性能最佳体验的34条黄金守则__JavaScript和CSS

    网站性能最佳体验的34条黄金守则之JavaScript和CSS优化 #### CSS优化守则 **1. 把样式表置于顶部** - **背景与意义**:这一建议来源于Yahoo!团队对自身网站性能的研究。他们发现在网页加载过程中,如果样式表位于...

    Javascript、CSS压缩

    总结来说,"Javascript、CSS压缩"是提高网站性能的重要手段,通过使用像AjaxMin这样的工具,开发者能够有效地压缩和优化JavaScript与CSS文件,降低页面加载时间,提升用户体验。而"JS、CSS压缩.exe"这样的本地工具则...

    Javascript、CSS压缩工具(支持批量压缩)

    JavaScript和CSS是网页开发中的核心元素,用于实现动态交互和美化页面样式。然而,未经优化的源代码可能会导致页面加载速度变慢,增加...结合合理的开发流程和性能优化策略,可以显著提高网站的加载速度和整体质量。

    纯html+javascript+css webpack打包的项目

    在现代Web开发中,为了提高开发效率和优化网站性能,开发者经常使用Webpack这一强大的模块打包工具。本项目以HTML、JavaScript和CSS为基础,结合Webpack进行资源的管理和打包,使得项目结构清晰,易于理解和维护。...

    在asp.net中使用javascript与css的合理用法

    总的来说,合理地在ASP.NET中使用JavaScript和CSS,不仅要求开发者掌握这两门语言的基本用法,还要懂得如何优化它们,以提供高性能、易于维护和具有良好用户体验的Web应用程序。通过持续学习和实践,开发者可以更好...

    Minify Javascript or CSS

    总的来说,"Minify Javascript or CSS" 是前端性能优化的关键步骤之一,通过合理的合并和压缩,可以有效地提升网页加载速度,优化用户体验。同时,利用自动化工具和构建流程,可以简化这一过程,使开发者能更专注于...

    基于JavaScript和CSS的毕业设计管理系统设计实现

    总的来说,基于JavaScript和CSS的毕业设计管理系统设计实现,涵盖了前端开发的多个层面,包括交互逻辑、视觉呈现、性能优化和技术选型。通过合理运用这些技术,可以构建出一个高效、易用且适应现代教育需求的在线...

    js css 优化软件

    下面,我们将深入探讨js和css优化的重要性,以及如何使用专业工具进行优化。 首先,JavaScript是一种动态编程语言,它赋予了网页交互性和动态功能。然而,未经优化的js代码可能导致浏览器解析和执行效率降低,延长...

    个人博客html+css+JavaScript完整代码

    HTML负责网站的基本结构,CSS则用于美化页面样式,而JavaScript则为交互性提供动力。以下是对这些知识点的详细说明: **HTML(HyperText Markup Language)** HTML是网页内容的基础,它定义了网页的各个元素,如...

    原生javascript实现css属性的set和get

    原生JavaScript实现CSS属性的get和set方法是前端开发的基础技能,理解并熟练掌握这一技能有助于提高代码的灵活性和性能。在实际项目中,根据具体需求选择合适的方法,结合其他技术(如CSS预处理器、CSS变量等)可以...

    基于HTML + JavaScript + CSS 实现的音乐网站

    综上所述,创建一个基于HTML、JavaScript和CSS的音乐网站是一项综合性的任务,需要理解并熟练运用这三个核心技术,同时关注用户体验、性能优化和跨平台兼容性。通过不断的实践和学习,你可以打造出一个功能齐全、...

    HTML+CSS+JavaScript国外婚纱摄影企业网站模板

    为了提高用户体验,JavaScript可能也已经优化了页面加载速度和性能。 压缩包内的文件可能包括以下组成部分: 1. HTML文件:主页面和其他子页面的源代码。 2. CSS文件:包含所有样式规则和布局设置。 3. JavaScript...

    网站前端性能优化之javascript和css篇

    网站前端性能优化是提升用户体验和网站加载速度的关键环节,尤其在JavaScript和CSS方面,有很多策略可以采用。首先,关于CSS的优化, Yahoo团队提出的第一点是将样式表置于文档的`&lt;head&gt;`区域。这样做可以使得页面...

    深入学习PHP,MySQL,javascript,CSS,html5

    本书《深入学习PHP,MySQL, JavaScript, CSS, HTML5》深入探讨了web开发的各个方面,包含前端和后端的设计与优化,以及数据库MySQL的详细讲解和优化方法。对于有志于提高Web开发技能的读者而言,这本书提供了非常...

    Javascript+css自主项目仿购物网站期末课程设计

    在本项目"Javascript+css自主项目仿购物网站期末课程设计"中,主要涵盖了JavaScript、CSS以及Web开发领域的核心概念和技术,旨在帮助初学者理解和实践网页交互功能与视觉设计。以下是对这些知识点的详细阐述: 1. *...

    javascript+css3.0完美效果实现

    在"js完美效果"的标签中,我们可以推测这可能涉及到JavaScript的各种高级用法和优化技巧,如事件处理、DOM操作、异步编程以及性能优化等。 CSS3.0则带来了丰富的样式和布局功能,如渐变、阴影、圆角、多列布局、...

Global site tag (gtag.js) - Google Analytics