https://developer.mozilla.org/zh-CN/docs/Web/API/Performance
    window.performance对象详解
    window.performance对象详解
    监听后退操作方案一
    监听后退操作方案二
    window.performance对象详解
    window.performance是W3C性能小组引入的新的API,允许网页访问某些函数来测量网页和Web应用程序的性能,包括Navigation Timing API和高分辨率时间数据。

    目前IE9以上的浏览器都支持。

    一个performance对象的完整结构如下图所示:(下方有详细介绍)

    详见下述说明:

    1. // 获取 performance 数据
    2. var performance = {
    3. // memory 是非标准属性,只在 Chrome 有
    4. // 财富问题:我有多少内存
    5. memory: {
    6. usedJSHeapSize: 16100000, // JS 对象(包括V8引擎内部对象)占用的内存,一定小于 totalJSHeapSize
    7. totalJSHeapSize: 35100000, // 可使用的内存
    8. jsHeapSizeLimit: 793000000 // 内存大小限制
    9. },
    10. // 哲学问题:我从哪里来?
    11. navigation: {
    12. redirectCount: 0, // 如果有重定向的话,页面通过几次重定向跳转而来
    13. type: 0 // 0 即 TYPE_NAVIGATENEXT 正常进入的页面(非刷新、非重定向等)
    14. // 1 即 TYPE_RELOAD 通过 window.location.reload() 刷新的页面
    15. // 2 即 TYPE_BACK_FORWARD 通过浏览器的前进后退按钮进入的页面(历史记录)
    16. // 255 即 TYPE_UNDEFINED 非以上方式进入的页面
    17. },
    18. timing: {
    19. // 在同一个浏览器上下文中,前一个网页(与当前页面不一定同域)unload 的时间戳,如果无前一个网页 unload ,则与 fetchStart 值相等
    20. navigationStart: 1441112691935,
    21. // 前一个网页(与当前页面同域)unload 的时间戳,如果无前一个网页 unload 或者前一个网页与当前页面不同域,则值为 0
    22. unloadEventStart: 0,
    23. // 和 unloadEventStart 相对应,返回前一个网页 unload 事件绑定的回调函数执行完毕的时间戳
    24. unloadEventEnd: 0,
    25. // 第一个 HTTP 重定向发生时的时间。有跳转且是同域名内的重定向才算,否则值为 0
    26. redirectStart: 0,
    27. // 最后一个 HTTP 重定向完成时的时间。有跳转且是同域名内部的重定向才算,否则值为 0
    28. redirectEnd: 0,
    29. // 浏览器准备好使用 HTTP 请求抓取文档的时间,这发生在检查本地缓存之前
    30. fetchStart: 1441112692155,
    31. // DNS 域名查询开始的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等
    32. domainLookupStart: 1441112692155,
    33. // DNS 域名查询完成的时间,如果使用了本地缓存(即无 DNS 查询)或持久连接,则与 fetchStart 值相等
    34. domainLookupEnd: 1441112692155,
    35. // HTTP(TCP) 开始建立连接的时间,如果是持久连接,则与 fetchStart 值相等
    36. // 注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接开始的时间
    37. connectStart: 1441112692155,
    38. // HTTP(TCP) 完成建立连接的时间(完成握手),如果是持久连接,则与 fetchStart 值相等
    39. // 注意如果在传输层发生了错误且重新建立连接,则这里显示的是新建立的连接完成的时间
    40. // 注意这里握手结束,包括安全连接建立完成、SOCKS 授权通过
    41. connectEnd: 1441112692155,
    42. // HTTPS 连接开始的时间,如果不是安全连接,则值为 0
    43. secureConnectionStart: 0,
    44. // HTTP 请求读取真实文档开始的时间(完成建立连接),包括从本地读取缓存
    45. // 连接错误重连时,这里显示的也是新建立连接的时间
    46. requestStart: 1441112692158,
    47. // HTTP 开始接收响应的时间(获取到第一个字节),包括从本地读取缓存
    48. responseStart: 1441112692686,
    49. // HTTP 响应全部接收完成的时间(获取到最后一个字节),包括从本地读取缓存
    50. responseEnd: 1441112692687,
    51. // 开始解析渲染 DOM 树的时间,此时 Document.readyState 变为 loading,并将抛出 readystatechange 相关事件
    52. domLoading: 1441112692690,
    53. // 完成解析 DOM 树的时间,Document.readyState 变为 interactive,并将抛出 readystatechange 相关事件
    54. // 注意只是 DOM 树解析完成,这时候并没有开始加载网页内的资源
    55. domInteractive: 1441112693093,
    56. // DOM 解析完成后,网页内资源加载开始的时间
    57. // 在 DOMContentLoaded 事件抛出前发生
    58. domContentLoadedEventStart: 1441112693093,
    59. // DOM 解析完成后,网页内资源加载完成的时间(如 JS 脚本加载执行完毕)
    60. domContentLoadedEventEnd: 1441112693101,
    61. // DOM 树解析完成,且资源也准备就绪的时间,Document.readyState 变为 complete,并将抛出 readystatechange 相关事件
    62. domComplete: 1441112693214,
    63. // load 事件发送给文档,也即 load 回调函数开始执行的时间
    64. // 注意如果没有绑定 load 事件,值为 0
    65. loadEventStart: 1441112693214,
    66. // load 事件的回调函数执行完毕的时间
    67. loadEventEnd: 1441112693215
    68. }
    69. };

    监听后退操作方案一
    后退返回

    1. window.addEventListener(‘pageshow’, function (event) {
    2. if (event.persisted || window.performance && window.performance.navigation.type == 2){
    3. // 后退的操作
    4. location.reload();
    5. }
    6. },false);

    当一条会话历史记录被执行的时候将会触发页面显示(pageshow)事件。(这包括了后退/前进按钮操作,同时也会在onload 事件触发后初始化页面时触发)

    event对象属性
    image.png

    以下示例将会在控制台打印由前进/后退按钮以及load事件触发后引起的pageshow事件:

    1. window.addEventListener('pageshow', function(event) {
    2. console.log('pageshow:');
    3. console.log(event);
    4. });

    监听后退操作方案二
    除了安卓微信端不支持,其他端暂时没有发现问题

    1. history.pushState(null, null, '#')
    2. window.addEventListener('popstate', function () {
    3. // 后退时的操作
    4. })

    版权声明:本文为CSDN博主「陈坚泓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_42752574/java/article/details/103131668