通过具体实施后就可以获得第一手的web前端性能的数据了,然后每次新版本都跑,这就会获得大量的数据,为性能分析提供了基础的输入,同时应该还要综合使用多种工具去从不同的方向收集数据;比如showslow同时还支持yslow,pagespeed,webpagetest等测试工具传上去的数据,因此在具体的分析之前要从纵向、横向来收集数据,这样统计分析出来的结果才能有实际的参考价值。当然如果你还发现其它工具也可以提供一些性能数据,也可以收集起来,比如:httpanalyzer,httpwatcher都支持程序调用接口,很方便就可以收集http访问过程中的数据。还有像firebug,ie开发者工具都是可以提供性能调用功能的。
“工欲善其事,必先利其器”,工具有了,生产资料也有了--数据,那么后面的工作是靠我们自己的劳动力来产生价值了。性能调优的前提是分析出问题,分析问题是需要一定的准则的,不能盲人摸象人家说性能不好就不好,人家说已经调到最优了就是最优的状态了,只能这些标准还是需要结合实际情况来考虑不能一味的应用。比如:所有的最佳实践都会建议少加图片的展示,搜索网站是可以这样,但是如果是电子商务网站不可能是这样,否则网站就没有必要做了;而性能调优正是在这些现有的状况下、保证现有业务功能的前提下去找出具体可以优化的细节,帮助提高整体性能,而不是以牺牲业务功能为代价。比如:电子商务的网站虽然不能减少,但是可以把图片转换成优化格式的文件,png比bmp肯定好,png8比gif要好等等。
那么接下来就是之前N多性能评测工具的最佳实践,学习并了解这些最佳实践是入门的第一步,至少你可以有一个容易的入口来开始进行你的工作了。具体的链接见下:
yslow
page speed
dynatrace其实大概了解就可以了,因为使用工具测试后都会提示你哪些不满足,具体有哪些地方没有满足,非常的清晰方面。
而工具往往是死的,而且通常很多时候这些评测工具给出了高分但是前端性能还是会很慢的,所以规则只是保证web具备良好性能的基本要素之一,但并不是唯一或者最重要的。所以在评测工具之后我们还要看具体的载入完成时间长短,当然不同的网页载入时间是不一样的,搜索的主要就几百k,而电子商务首页都得十几M甚至更多,所以它们的页面载入的全部时间肯定是不一样的。不过没有关系,因为我们没有必要等所有内容都下载了再呈现内容给客户,所以还是可以投机来“蒙骗”过用户,比如:优先显示首屏的内容,这样用户就会从感觉上认同这个页面的高性能了。而页面的完整加载时间也是有价值的,可以内部制定一个性能标准,根据不同的页面属性来确定一个具体的网页完全加载时间应该在一个什么样的范围内;同时还可以作为下次版本再测试时的基准数据。
到这里2个重要的标准出来了,一个是用户有第一感觉时的时间,一个是完全加载所用的时间;调优的目的就是降低这2个时间,想要具体调优之前我们必须了解这些时间分别都由哪些时间判断组成的,这样就可以为达到最佳性能而提供最优秀的页面展现方案了。
第一用户感觉时间:
即浏览器开始渲染时的时间,而浏览器开始渲染之前是要解析html,解析css文件,然后生成DOM树,再转换成渲染树,再给渲染树中的节点进行布局计算【具体坐标】,然后才开始一层层树开始渲染,所以每一个步骤都可能影响到第一用户感觉时间。比如:
单个html文件过大则解析时间就会比较长
CSS格式单独放在外部就比内嵌式的效率高,因为一次性全部加载和应用,而且引用css时应该在页面的头部,因为现在的浏览器一般不会等到全部解析完DOM才去解析CSS或做其它事情,所以提前加载css文件可以加速提前达到可以渲染的时间点。
DOM树生成是从html开始的,正常的html应该解析一遍就可以完成了,但是如果html中有js调用,那么在解析时就会反复重新调整DOM树的结构,这样就会影响DOM生成的时间。
渲染树 = DOM + CSS渲染说明;所以这块的转换速度取决于具体内容,渲染的层次越多自然越长
渲染树的布局计算时间,取决去渲染树的节点数目,也就是DOM树的节点数目
最后开始渲染并展现我们看到的页面内容
第一用户感觉时间---到---最终完成载入:
用户有了第一感觉并没有结束,而且可能第一感觉只是页面上有内容,却并不是首屏的内容全部展现出来了;因此要保证良好的第一用户感觉,还得保障首屏的其他内容也是第一和时间被下载并展现出来。所以首屏用到的外部资源要优先下载,并且使用性能较好的资源服务器,资源要分布在不同的服务器【这样就可以并行下载了】,而且把较大的图片等可以切成多个小图片,然后分别下载,这样即使是一个较大的图片也是可以很快就能展现出来的。
页面所有资源下载完成后才会去加载onload事件,即页面展现完成后要自动去做的一些事情,比如某些网站的弹窗、跳页等;这些操作都是js去做的,而如果做js运行的时间太长,那么即使页面资源加载完成了,用户的使用还不是很友好,所以js的运行时间也是前端性能的一部分,不仅在加载时的js,整个页面上其它地方的js性能也是要考虑的,比如单个ajax请求的过程,某个前端操作js的使用时间;而JS除了时间性能以外还会有cpu、内存占用的性能考虑,这些dynatrace工具是可以提供的。
另外在整个外部资源下载过程中,还要尽量避免各类请求错误。
当然,除了这些还会有其它因素会影响web前端性能,比如:网速,DNS服务器配置等;如何抓住性能的瓶颈点是最重要的,一般最简单的就是看用时最长的段,然后再根据实际的情况和环境确定是不是正常的数值,进而确定是否有可调优的可能性及对应的手段等。
转自:http://blog.csdn.net/five3/article/details/7691365
转 web前端性能分析--分析篇的更多相关文章
-
转 WEB前端性能分析--工具篇
在线网站类: WebPageTest 说明: 在线的站点性能评测网站,地址http://www.webpagetest.org/ 补充: 其实这网站也是个开源项目,所以支持自己搭建一个内部的测试站点 ...
-
转 web前端性能分析--原理篇
转自http://blog.csdn.net/five3/article/details/7686715 web前端性能: 即是web用户在访问一个页面时所要花费的时间总和.即一个完全意义上的用户响应 ...
-
Web前端性能分析
Web前端性能通常上代表着一个完全意义上的用户响应时间,包含从开始解析HTML文件到最后渲染完成开始的整个过程,但不包括在输入url之后与服务器的交互阶段.下面是整个过程的各个步骤: 开始解析html ...
-
转 web前端性能分析--实践篇
当我们知道了web前端性能的关键点后,那么接下来要做的就是如何去具体实施并获取这些关键点的数据了.通过前面的学习知道了不少好的工具,经过对比后个人觉得dynatrace还是不错的. 不仅支持ie,ff ...
-
Web服务器性能监控分析与优化
Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html
-
Web前端性能优化进阶——完结篇
前言 在之前的文章 如何优化网站性能,提高页面加载速度 中,我们简单介绍了网站性能优化的重要性以及几种网站性能优化的方法(没有看过的可以狂戳 链接 移步过去看一下),那么今天我们深入讨论如何进一步优化 ...
-
Web前端性能优化教程05:网站样式和脚本
本文是Web前端性能优化系列文章中的第五篇,主要讲述内容:网站样式和脚本代码的放置位置.使用外部javascript和css.完整教程可查看:Web前端性能优化 一.将样式表放在顶部 可视性回馈的重要 ...
-
web前端性能优化指南(转)
web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网络 ...
-
web前端性能概述
1.认识前端性能 不管你的网站设计的有多好,后端有多好,对于用户来说全部都是无感知的,用户只关心页面打开的速度,而前端性能表现很大程度上影响着用户的这种感知. 改善前端的性能对用户感知的整体性能提升有 ...
随机推荐
-
Sea.js &; Require.js
Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. 自然直观的代码组织方式:依赖 ...
-
Excel 、数据库 一言不合就转换 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/52280786 ***************************************** ...
-
PL/SQL连接查询数据报错时Dynamic Performance Tables not accessible
一.产生该提示原因plsql dev在用户运行过程中,要收集用户统计信息,但是由于你现在登录的用户没有访问v$session,v$sesstat and v$statname视图的权限,所以不能收集当 ...
-
[array] leetcode - 34. Search for a Range - Medium
leetcode - 34. Search for a Range - Medium descrition Given an array of integers sorted in ascending ...
-
Django+Vue打造购物网站(十)
首页.商品数量.缓存和限速功能开发 将环境切换为本地,vue也切换为本地 轮播图 goods/serializers.py class BannerSerializer(serializers.Mod ...
-
[C#] LINQ之LookUp
声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 本文作者文采欠佳,文字表达等方面不是很好,但实际的代码例子是非常实用的,请作参考. 一.先准备要使用的类: 1.Person类: cl ...
-
sublime text3中emmet插件的使用
首先,想要快速编码需 要在编辑器中安装常用插件,下面是emmet插件的使用: html5文档结构的生成方式: 1).!+tab键 2).html:5 +tab键 头部head中meta字符集的生成: ...
-
解决使用C/C++配置ODBC链接使用SQLConnect返回-1
VS中建立空项目使用ODBC连接时,SQLConnect函数总是返回-1,mysql和命令行连接数据库都是没问题的 retcode = SQLConnect(hdbc, (SQLCHAR*)" ...
-
Evolution ZOJ2853
矩阵太大导致爆栈 解决方法:矩阵不要开在main函数里面 全部在外面处理 main函数只能处理简单的赋值和加减 损失的要自减!! 最后为 sum+=t[i]*ans.m[i][n-1]; 得 ...
-
selenium处理弹出窗口
在selenium ui自动化测试过程中,经常会遇到,弹出新窗口,那么会对我们元素定位造成哪些影响呢? 1.元素id或xpath;name都没有问题,就是定位不到. 那如何解决呢?没错webdrive ...