如何使HTML呈现速度更快
我正在使用C#/ ASP.NET开发一个Web应用程序。我们正在使用第三方控件在页面中显示网格,选项卡,树和其他复杂控件。问题在于这些控件呈现了大量的HTML。由于这个原因,页面的大小已大大增加,浏览器需要一段时间才能加载页面。我想找到一些通用技术来快速在浏览器(Internet Explorer,Firefox等)中呈现HTML。
请注意,所有页面的ViewState均已关闭。
解决方案
gzip HTML不会提高渲染速度,但是会大大减小页面大小。
确保我们未使用基于表格的布局,并确保已使用的所有javascript或者css均已缩小,压缩和链接在头部,以便可以对其进行缓存。
- 使用第三方工具或者至少使用IIS6内置压缩选项(Microsoft TechNet)压缩HTML。
- 评估第三方控件,看是否有必要。如果是这样,请为自己的需要编写自己的代码,并且/或者如果它们是"支持AJAX的",则使用其控件。最流行的第三方控件确实具有AJAX功能,并允许在页面其余部分加载后填充数据,从而向用户显示一些进度。
- 如果不需要,请关闭" ViewState"。当使用第三方控件时,
ViewState
会变得很大。
更新:我已经在http://weblogs.asp.net/jgaylord/archive/2008/09/29/web-site-performance.aspx上发布了有关此内容的博客。
我将看一下页面上控件的Viewstate。我们应该尽可能禁用它,因为它会被序列化(我认为是Base64编码)并填充在页面中。如果我们在每次回发后更新控件中的数据,则应该能够安全地禁用viewstate并可能节省大量带宽。
对于第三方控件,我们所能做的就是对该支持进行调试,以改善其性能。
但是在编码时,我们可以使用多种技术。
一键是要了解JavaScript DOM调用比html解析要慢得多。
因此,如果将innerHTML =" ...."设置为具有数千行,则与通过循环中的document.createElement()调用进行呈现相比,它的速度将非常快。
这是来自MSDN的提示:
http://msdn.microsoft.com/en-us/library/ms533019.aspx
有一个Firefox扩展程序YSlow(http://developer.yahoo.com/yslow/),它可以分析任何网页并列出要进行的特定更改,以提高速度。它建议的某些更改与Web服务器有关,与HTML的内容无关,但无论如何还是很有帮助的。
YSlow网页的屏幕截图:
替代文字http://us.i1.yimg.com/us.yimg.com/i/rt/yslow/perfview.png
我强烈建议我们查看Yahoo CSS&JavaScript Compressor,它不仅会减少CSS和JavaScript文件的大小,而且还会增加代码中的任何错误和可能的重复。在任何Web开发人员的工具箱中都必须有一个确定的内容。
如果问题出在控件本身上,也许是四处寻找新的供应商。我确实意识到这会涉及到时间和金钱上的再投资,但是如果我们无法通过前面提到的压缩方法获得所需的结果,则可能需要提交下一个主要修订版。
记住,在可以的地方将EnableViewstate设置为false
打开常规页面,然后在URL中键入此内容,然后按Enter:
javascript:var tags = document.getElementsByTagName('*');alert('Page weight: ' + tags.length + ' tags.');
(我们甚至可以将其保存为书签)
如果我们有超过500个标签,则可能希望在可能的情况下清理一些"标签汤"。
Digg的主页大约有1,000个标签!因此渲染速度很慢(第一次)
MSN的首页大约有700多个标签...因此呈现速度非常慢
雅虎的主页大约有600个标签...因此呈现速度更快
Google的首页大约有92个标签!...因此呈现得就像闪电一样!
压缩根本不加速渲染,而只是加速内容交付。
我建议对很多类型的html对象(例如表行或者某些常见的div容器)进行某种"分析"制作测试页,然后使用YSlow这样的插件来测试渲染所需的时间例如10K这样的元素。分析后,我们将看到实际的渲染瓶颈。
顺便说一句,问题可能出在内容交付而不是渲染上。 YSlow还将显示其位置。我们还可以使用一些可视化工具来验证网站的加载速度,例如http://Site-Perf.com/
要加快网格的渲染速度,请使用网格分页。
网格分页将通过减少显示的网格线数量而导致较少的渲染。
我们通常从每页50行开始,并始终将网格行数设置为系统参数,部署后可以轻松地减少或者增加网格行数。
使用标准ASP.NET控件时,还发现使用CSS Friendly控件适配器时它们的速度更快。 CSS友好控制适配器