Greasy Fork

网页加载分析(改)

测试网页加载速度并显示加载最慢的三个网址的域名,二改添加了对Via浏览器toast的调用。

目前为 2025-04-12 提交的版本。查看 最新版本

// ==UserScript==
// @name         网页加载分析(改)
// @version      1.08
// @description  测试网页加载速度并显示加载最慢的三个网址的域名,二改添加了对Via浏览器toast的调用。
// @description:en Test the webpage loading speed and display the domain names of the three slowest loading URLs.
// @match        *://*/*
// @run-at       document-start
// @author       yzcjd & nobody
// @author2      Lama AI 辅助
// @namespace    https://scriptcat.org/zh-CN/users/157252
// @exclude      *://*.cloudflare.com/*
// @exclude      *://*.recaptcha.net/*
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    const loadTimeElement = document.createElement('div');
    loadTimeElement.id = 'loadTimeDisplay';
    loadTimeElement.style.cssText = `
        position: fixed;
        top: 90%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: grey;
        padding: 5px;
        border-radius: 8px;
        box-shadow: 0 0 15px rgba(0,0,0,0.3);
        white-space: nowrap;
        width: 400px;
        z-index: 9999;
        background-color: #f5f5f5;
        color: black;
    `;

    const startTime = performance.now();
    let slowestRequests = [];

    const networkObserver = new PerformanceObserver((list, observer) => {
        const entries = list.getEntries();
        entries.forEach(entry => {
            slowestRequests.push({
                name: entry.name,
                duration: entry.duration
            });
            slowestRequests.sort((a, b) => b.duration - a.duration);
            slowestRequests = slowestRequests.slice(0, 3);
        });
    });

    networkObserver.observe({
        entryTypes: ['resource']
    });

    window.addEventListener('load', () => {
        const endTime = performance.now();
        const timeElapsed = endTime - startTime;

        let networkInfo = '';
        let networkInfoHTML = '';
        if (slowestRequests.length > 0) {
            networkInfo = slowestRequests.map(req => {
                try {
                    const url = new URL(req.name);
                    return `Slow: ${url.hostname} (${req.duration.toFixed(2)}ms)`;
                } catch (error) {
                    return `Slow: Invalid URL (${req.duration.toFixed(2)}ms)`;
                }
            }).join('\n');
            networkInfoHTML = slowestRequests.map(req => {
                try {
                    const url = new URL(req.name);
                    return `slow: ${url.hostname} (${req.duration.toFixed(2)}ms)<br>`;
                } catch (error) {
                    return `slow: Invalid URL (${req.duration.toFixed(2)}ms)<br>`;
                }
            }).join('');
        } else {
            networkInfo = '[none]';
            networkInfoHTML = '[none]';
        }

        // 检查是否存在 window.via.toast
        if (window.via && typeof window.via.toast === 'function') {
            const message = `Time: ${timeElapsed.toFixed(2)}ms\n${networkInfo}`;
            window.via.toast(message);
        } else {
            loadTimeElement.innerHTML = `
                <h2>Time: ${timeElapsed.toFixed(2)}ms</h2>
                ${networkInfoHTML}
            `;
            document.body.appendChild(loadTimeElement);
            setTimeout(() => {
                loadTimeElement.remove();
            }, 5000);
        }
    });
})();