最近在看一本名为《web性能实践日志》的书籍,其中第十三章"网络计时"中介绍了一种比较新的计算页面各部分加载时间方法,这也是W3C Web性能工作小组正在做的事情,接下来我就给大家大概介绍一下:

首先先撇开这篇文章所要介绍的,如果要你来写一段代码来计算整个页面加载的时间的话,我们一般都会这样做:获得页面开始加载的时间和结束加载的时间,两个一减便是页面加载的时间了,没错,代码如下:

 <html>
<head>
<script type="text/javascript"> var start = new Date().getTime(); //获取开始加载时间
function onLoad() {
var now = new Date().getTime(); //获取加载结束时间
var latency = now - start; //页面加载时间
alert("page loading time: " + latency);
} </script>
</head>
<body onload="onLoad()">
<!- Main page body goes from here. -->
</body>
</html>

这是计算页面加载时间的简单脚本,但是如果我们想进一步深入了解资源的加载时间呢?比如我想知道dom内容加载完毕的时间,而非页面加载的时间呢,上述代码明显做不到了。

然而W3C提供了window.performance.timing方法让我们可以轻松获得页面各个部分的加载时间,具体代码页非常简单,如下:

 <html>
<head>
<script type="text/javascript"> function onLoad() {
var now = new Date().getTime();
var page_load_time = now - performance.timing.navigationStart; //performance.timing.navigationStart即为获取页面开始加载时间
alert("User-perceived page loading time: " + page_load_time);
} </script>
</head>
<body onload="onLoad()">
<!- Main page body goes from here. -->
</body>
</html>

经过实践发现,通过上述方法获取的页面加载时间相比第一种获取的时间稍微多那么几毫秒,根据不同页面的大小可能数值会有出入,但是上述方式获取的时间肯定比我们一开始写的要更加精确,同样的,当我们想知道dom内容加载完毕的时间的话,代码改为:

 <script>
function onLoad(){
var now=new Date().getTime();
var dom_load=performance.timing.domComplete -performance.timing.navigationStart;
alert('页面加载时间为:'+dom_load);
}
</script>

这样就OK了,我们甚至可以得到更多关于页面加载的详细信息,W3C官网提供了如下可供我们获取的页面信息图示:

这张图片所提供的功能就叫导航计时(Navigation Timing),是HTML5提供的一组新API,已经在最新版的浏览器中实现了,但是不兼容低版本IE,如果大家对web前端性能比较感兴趣,可以访问W3C提供的官方文档对其进行探究:

http://www.w3.org/TR/navigation-timing/

利用Navigation Timing测量页面加载时间的更多相关文章

  1. [转载]Python & Selenium -- 页面加载时间过长&启动指定FF

    原文链接:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 1. selenium webdriver在get方法会一直等待页面加载完毕才 ...

  2. Selenium WebDriver- 指定页面加载时间

    #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...

  3. selenium学习笔记11——driver.get(url) 页面加载时间太长

    在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在加载,页面没有加载完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经加载出来了. 解决方 ...

  4. selenium学习笔记——driver.get(url) 页面加载时间太长

    # 两个同时设置才行 # 实现效果:加载状态停止,进行代码下一步操作 driver.set_page_load_timeout(10) driver.set_script_timeout(10) # ...

  5. web开发的性能准则(减少页面加载时间方面)

    准则(概述) 减少 HTTP 请求 使用CDN加速 避免空的src或href属性值 增加过期头 启GZIP压缩 把css文件放到头部 把javascript放到尾部 避免使用css表达式 删除不使用的 ...

  6. 我是如何将页面加载时间从6S降到2S的?

    写在前面 生活在信息爆炸的今天,我们每天不得不面对和过滤海量的信息--无疑是焦躁和浮动的,这就意味着用户对你站点投入的时间可能是及其吝啬的(当然有一些刚需站点除外). 如何给用户提供迅速的响应就显得十 ...

  7. 使用Filter跟踪Asp.net MVC页面加载时间

    最近,客户一直反馈系统使用慢,有时候能够指出具体是哪个页面,有时候又只是笼统地反馈慢.这种问题就像是幽灵一样,非常不好处理.因为导致这种问题的因素非常之多,而且在开发工程中,很难模拟出实际运行是的环境 ...

  8. performance.timing检测页面加载速度

    with(performance){ readyStart = timing.fetchStart - timing.navigationStart; redirectTime = timing.re ...

  9. 将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间

    以下代码: //入口函数 if (window.localStorage) { initJs(); initCss("css", "/gfdzp201508257998/ ...

随机推荐

  1. MySql学习(MariaDb)

    资料 http://www.cnblogs.com/lyhabc/p/3691555.html http://www.cnblogs.com/lyhabc/p/3691555.html MariaDb ...

  2. Git学习笔记(1)——安装,配置,创建库,文件添加到库

    初次接触git,为了记忆深刻,把学习的简单流程记录下来. 本文记录了Git在Ubuntu上的安装,配置,以及创建版本库和往库中添加文件的过程. 1.Git的安装:(Ubuntu-Linux非常友好的安 ...

  3. Visual Studio 2010 实用功能:使用web.config发布文件替换功能

    当建立ASP.NET Web应用程序项目后,默认除了生成web.config外,还生成了web.debug.config与Web.Release.config.顾名思义,根据它们的命名我可以推测到他们 ...

  4. 大叔也说Xamarin~Android篇~原生登陆与WebView的网站如何共享Session

    回到目录 事情是这样的,我们最近开了一个APP,主要使用xamarin做了一个登陆,它与服务器API进行数据通讯,当用户名密码正确去,跳转到新的activity,并在webview控件中打开服务端的H ...

  5. EF架构~linq模拟left join的两种写法,性能差之千里!

    回到目录 对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行j ...

  6. Atitit html5 Canvas 如何自适应屏幕大小

    Atitit  html5 Canvas 如何自适应屏幕大小     可以用JS监控屏幕大小,然后调整Canvas的大小.在代码中加入JS 1 2 3 4 5 6 7 $(window).resize ...

  7. 开始使用MarkDown写博客

    MarkDown 标题 #h1 ##h2 ###h3 h1 h2 h3 代码段 代码段缩进4个空格即可,如下: <div class="form-group"> < ...

  8. 开源、免费功能全面的Chart图

    简介: 每个前端都有一个Chart梦,至于真正去做的寥寥无几,无怪乎几个原因: 浏览器兼容问题 数据处理的一些算法,如自动计算坐标轴.自动排列文本等 流畅的动画 丰富的交互功能 去年一年的时间里,我一 ...

  9. Python装饰器详解

    python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...

  10. 查看 table,view,sp的定义

    1, 查看用户创建的Proc,View, UDF,trigger 的定义 sys.sql_modules Returns a row for each object that is an SQL la ...