javascript - Chrome 性能.计时错误输出(与开发工具不匹配)

标签 javascript browser google-chrome-extension google-chrome-devtools web-performance

我编写了一个简单的扩展程序,通过所有 URL 的内容设置禁用 JavaScript,将我的网页重定向到所需的网站。

我的代码是

  1. 我通过后台脚本等待页面状态为“完成”
  2. 页面完成后,我通过 chrome.tabs.executescript() 注入(inject)脚本
  3. 我的脚本使用 chrome.runtime.sendMessage() 将所需的统计信息发送回我的扩展程序的后台页面,我在其中打印它们。
  4. 然后我将该页面重定向到给定的网址(硬编码的“google.com”)
  5. 返回第 1 步

我的目标是多次读取“https://google.com”页面加载时间以及DOM计数和资源计数等 虽然它没有给出任何错误,但它提供的计时与开发工具计时不匹配。现在我不确定开发工具或 Performance.Timings 哪个是错误的。 只有第一次它与我重定向后的计时相匹配,它永远不会与 chrome DEV-TOOL 匹配。

如果有人想测试它,我已经包含了下面的所有代码。

我的 Chrome 版本如下

Windows 10 (64 Bit) also tested on UBUNTU 16.04 with Chromium 70.0.3538.77
Google Chrome   70.0.3538.110 (Official Build) (64-bit) 
Revision    ca97ba107095b2a88cf04f9135463301e685cbb0-refs/branch-heads/3538@{#1094}
OS  Windows
JavaScript  V8 7.0.276.40
Flash   31.0.0.153 

我的打印格式是 URL,DOM_Loaded,ON_LOAD,DOM_Count,Req_Count

Dom_loaded : performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,
on_load : performance.timing.loadEventEnd - performance.timing.navigationStart,
Dom_count : document.getElementsByTagName('*').length,              
req_count : window.performance.getEntriesByType("resource").length

enter image description here

list

{
    "name" : "JS BLOCK settings",
    "version" : "1",
    "description" : "Block JS of Brower",
    "icons":{
        "128" : "js-logo.png",
        "48" : "js-logo.png",
        "16" : "js-logo.png"
    },
    "permissions": [
        "browsingData", 
        "contentSettings",
        "tabs",
        "<all_urls>" 
    ],
    "browser_action": {
        "default_icon": "js-logo.png"


    },
    "background": {
        "scripts": ["background.js"]

    },
    "externally_connectable": {
    "ids": [
      "*"
    ],
    "matches": ["https://www.google.com/"],
    "accepts_tls_channel_id": false
  },
    "manifest_version": 2
}

self_script.js

function send_stats(){

    chrome.runtime.sendMessage(

        {
            Dom_loaded : performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,
            on_load : performance.timing.loadEventEnd - performance.timing.navigationStart,
            Dom_count : document.getElementsByTagName('*').length,              
            req_count : window.performance.getEntriesByType("resource").length

        }, function(response) {
        }
    );

    console.log("IT WORKS");

}

send_stats();

背景.js

document.addEventListener('DOMContentLoaded', blockjs);

var mytabid = 0

var b = "https://google.com" 
chrome.tabs.onUpdated.addListener(
    function (tabId , info) {
        if (info.status == 'complete') {
            mytabid = tabId
            console.log("Going to exec")
            chrome.tabs.executeScript(tabId , {
                file: "self_script.js"
            // code: new_redirect
            });

            setTimeout(function(){
                console.log("JUST BEFORE UPDATE")
                chrome.tabs.update(mytabid,{url: b})
            },5000)

      }
});


function blockjs(tab) {

    chrome.contentSettings['javascript'].set({
        primaryPattern:  "<all_urls>",
        setting: 'block'
    })

}

// URL,DOM_Loaded,ON_LOAD,DOM_Count,Req_Count
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {


    console.log(sender.tab.url+","+request.Dom_loaded+","+request.on_load+","+request.Dom_count+","+request.req_count)

    // var millisecondperhour = 3600000;
    // var onehourago = (new Date()).getTime() - millisecondperhour;
    // chrome.browsingData.remove({
    // "since": onehourago
    // }, {
    //     "appcache": true,
    //     "cache": true,
    //     "cookies": true
    //  }
    // );


});

最佳答案

enter image description here

问题出在 (Background.js) 中的 chrome.tabs.update(mytabid,{url: b}) 。通常,当我们请求网页时,它会启动navigation.start事件,但是当我们重定向网页时,chrome会在redirect.end之后花费一些时间,即DomainlookupStart。

也可以选择 fetch Start,但在这种情况下,浏览器缓存被禁用,因此没有必要选择 fetchStart。

要获得确切的答案,请更改background.js

Dom_loaded : performance.timing.domContentLoadedEventEnd-performance.timing.navigationStart,
on_load : performance.timing.loadEventEnd - performance.timing.navigationStart,
Dom_count : document.getElementsByTagName('*').length,              
req_count : window.performance.getEntriesByType("resource").length

Dom_loaded : performance.timing.domContentLoadedEventEnd-performance.timing.domainLookupStart,
on_load : performance.timing.loadEventEnd - performance.timing.domainLookupStart,
Dom_count : document.getElementsByTagName('*').length,              
req_count : window.performance.getEntriesByType("resource").length

关于javascript - Chrome 性能.计时错误输出(与开发工具不匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603906/

相关文章:

javascript - 自调用函数javascript

javascript - 为什么 SVG 不会在 chrome 扩展中加载?

javascript - Chrome 扩展中的 CKEditor

javascript - 如何将此 AJAX 请求函数(原始 Javascript)转换为使用 POST 而不是 GET?

javascript - 给定一个函数 A,new A() 和 new A 之间有什么区别吗?

javascript - 我们如何在Load Runner中生成请求 token 并在web_add_auto_header中使用它

browser - 在多个浏览器中启用 activex

javascript - 有人知道在线尾随空格去除器吗?

php - 图像/pjpeg 和图像/jpeg

javascript - 从 Chrome 扩展程序动态创建 Google 表格?