Chrome performance.timing неправильные выходы (НЕ СООТВЕТСТВУЯ DEV-TOOLS)

Я написал простое расширение для перенаправления своей веб-страницы на нужный сайт с отключенным JavaScript через настройки контента для всех URL-адресов.

Мой код

  1. Я жду, пока статус страницы будет "завершен", хотя мой фоновый скрипт
  2. Когда страница заполнена, я внедряю скрипт через chrome.tabs.executescript()
  3. Мой скрипт использует chrome.runtime.sendMessage() для отправки желаемой статистики обратно на фоновую страницу моего расширения, где я их распечатываю.
  4. Затем я перенаправляю эту страницу по указанному URL-адресу (жестко запрограммированный "google.com").
  5. Вернуться к шагу 1

Моя цель - многократное чтение времени загрузки страницы " https://google.com/" со счетчиком DOM, счетчиком ресурсов и т. Д. Хотя это не дает никаких ошибок, но предоставляемое время не совпадает с таймингами Dev-Tool. Теперь я не уверен, что неправильно Dev-Tool или Performance.Timings. Только в первый раз он совпадает с таймингами после моих перенаправлений и никогда не совпадает с chrome DEV-TOOL.

Если кто-то хочет проверить это, я включил весь код ниже.

МОЙ ХРОМ СТРОИТ НИЖЕ

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

введите описание изображения здесь

манифест

{
    "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();

background.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
    //  }
    // );


});

1 ответ

Проблема в chrome.tabs.update(mytabid,{url: b}) в (Background.js). Обычно, когда мы запрашиваем веб-страницу, она запускает событие navigation.start, но когда мы перенаправляем веб-страницу, chrome требуется время после redirect.end, то есть DomainlookupStart.

Можно также выбрать начало выборки, но для этого случая кеш браузера был отключен, поэтому нет смысла брать 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