您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Boost your browsing experience with Super Fast Load! Stop YouTube autoplay (main videos only), add download buttons, block trackers with whitelist, optimize for slow internet/VPN/Tor, lazy load media, enhance video buffering, and speed up page loading while preserving all site functionality.
// ==UserScript== // @name Super Fast Load // @namespace http://tampermonkey.net/ // @version 4 // @description Boost your browsing experience with Super Fast Load! Stop YouTube autoplay (main videos only), add download buttons, block trackers with whitelist, optimize for slow internet/VPN/Tor, lazy load media, enhance video buffering, and speed up page loading while preserving all site functionality. // @match *://*/* // @grant GM_xmlhttpRequest // @grant unsafeWindow // @require https://cdn.jsdelivr.net/npm/[email protected]/umd/browser/brotli.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/zstd/1.3.8/zstd.min.js // @connect * // ==/UserScript== (function() { 'use strict'; // Configuration const CONFIG = { TRUSTED_DOMAINS: ['digikala.com', 'dkstatics-public.digikala.com', 'aparat.com', 'cdn.asset.aparat.com'], PRECONNECT_TRUSTED_DOMAINS: true, DNS_PREFETCH: true, BLOCK_EXTERNAL_FONTS: true, PREVENT_PREFETCH: true, REMOVE_NON_ESSENTIAL_ELEMENTS: true, NON_ESSENTIAL_SELECTORS: ['#disqus_thread', '.twitter-timeline', 'iframe[src*="facebook.com"]'], OPTIMIZE_INLINE_CSS: true, OPTIMIZE_INLINE_JS: true, ENABLE_YOUTUBE_TOOLS: true, BLOCK_LIST: ['ad', 'analytics', 'googletagmanager', 'tracking', 'beacon', 'facebook', 'twitter', 'hotjar', 'sentry', 'adverge', 'onesignal', 'clarity'], ALLOW_LIST: ['jquery', 'bootstrap', 'core', 'essential', 'react', 'chunk', 'runtime', 'main', 'cloudflare', 'captcha'], PARALLEL_FETCH_LIMIT: 8, REQUEST_TIMEOUT: 500, RETRY_ATTEMPTS: 3, RETRY_DELAY: 1000, CACHE_TTL: 24 * 60 * 60 * 1000, VIDEO_BUFFER_AHEAD: 10, // Seconds to buffer ahead for videos LOW_BANDWIDTH_THRESHOLD: 2 * 1024 / 8, // 2kbps in bytes/s REQUEST_RATE_LIMIT: 50, // ms between requests to avoid detection }; // Setup const currentHost = window.location.hostname; const mainDomain = currentHost.split('.').slice(-2).join('.'); const mainDomainKeyword = mainDomain.split('.')[0]; const trustedKeywords = new Set([mainDomainKeyword, ...CONFIG.TRUSTED_DOMAINS]); const processedNodes = new WeakSet(); const resourceCache = new Map(); let networkSpeed = null; // Estimated in bytes/s // Utility Functions const throttle = (func, limit) => { let lastCall = 0; return function(...args) { const now = Date.now(); if (now - lastCall >= limit) { lastCall = now; return func(...args); } }; }; const fetchWithTimeout = throttle(async (url, options = {}) => { for (let attempt = 1; attempt <= CONFIG.RETRY_ATTEMPTS; attempt++) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), CONFIG.REQUEST_TIMEOUT * (networkSpeed <= CONFIG.LOW_BANDWIDTH_THRESHOLD ? 2 : 1)); try { const response = await fetch(url, { ...options, signal: controller.signal, cache: 'force-cache' }); clearTimeout(timeoutId); if (response.ok) return response; throw new Error(`Fetch failed: ${response.status}`); } catch (error) { clearTimeout(timeoutId); if (attempt === CONFIG.RETRY_ATTEMPTS) throw error; await new Promise(resolve => setTimeout(resolve, CONFIG.RETRY_DELAY)); } } }, CONFIG.REQUEST_RATE_LIMIT); const minifyCSS = (css) => css.replace(/\s*([{}:;,])\s*/g, '$1').replace(/;}/g, '}').trim(); const minifyJS = (js) => js.replace(/\s*([{}:;,])\s*/g, '$1').replace(/;}/g, '}').trim(); const isInternalOrTrusted = (url) => { if (!url) return false; try { const resourceHost = new URL(url, window.location.origin).hostname; if (resourceHost.endsWith(mainDomain)) return true; for (const trusted of trustedKeywords) { if (resourceHost.includes(trusted)) return true; } return false; } catch (e) { return false; } }; const isBlocked = (url) => { if (!url || isInternalOrTrusted(url)) return false; const lowerUrl = url.toLowerCase(); if (CONFIG.ALLOW_LIST.some(a => lowerUrl.includes(a))) return false; return CONFIG.BLOCK_LIST.some(b => lowerUrl.includes(b)); }; const isFontRequest = (url) => { if (!CONFIG.BLOCK_EXTERNAL_FONTS || !url) return false; const lowerUrl = url.toLowerCase(); return lowerUrl.includes('fonts.googleapis.com') || lowerUrl.endsWith('.woff') || lowerUrl.endsWith('.woff2'); }; // Network Speed Detection const estimateNetworkSpeed = async () => { const startTime = performance.now(); try { const response = await fetchWithTimeout('https://www.google.com/generate_204', { method: 'GET', mode: 'no-cors' }); const endTime = performance.now(); const duration = (endTime - startTime) / 1000; // seconds networkSpeed = duration > 0 ? 204 / duration : CONFIG.LOW_BANDWIDTH_THRESHOLD; // bytes/s } catch (e) { networkSpeed = CONFIG.LOW_BANDWIDTH_THRESHOLD; // Assume low speed on failure } console.log(`Estimated network speed: ${networkSpeed.toFixed(2)} bytes/s`); adjustForNetworkSpeed(); }; const adjustForNetworkSpeed = () => { if (networkSpeed <= CONFIG.LOW_BANDWIDTH_THRESHOLD) { CONFIG.PARALLEL_FETCH_LIMIT = Math.max(2, Math.floor(CONFIG.PARALLEL_FETCH_LIMIT / 2)); CONFIG.REQUEST_TIMEOUT *= 2; CONFIG.VIDEO_BUFFER_AHEAD = 5; // Reduce buffer for very low bandwidth } else { CONFIG.PARALLEL_FETCH_LIMIT = 8; CONFIG.REQUEST_TIMEOUT = 500; CONFIG.VIDEO_BUFFER_AHEAD = 10; } }; // Resource Management const setupPreconnections = () => { const uniqueHosts = new Set(); CONFIG.TRUSTED_DOMAINS.forEach(domain => { try { if (currentHost.endsWith(domain)) return; const url = new URL(`https://${domain}`); if (!uniqueHosts.has(url.hostname)) { uniqueHosts.add(url.hostname); const preconnectLink = document.createElement('link'); preconnectLink.rel = 'preconnect'; preconnectLink.href = url.origin; preconnectLink.crossOrigin = 'anonymous'; (document.head || document.documentElement).appendChild(preconnectLink); if (CONFIG.DNS_PREFETCH) { const dnsLink = document.createElement('link'); dnsLink.rel = 'dns-prefetch'; dnsLink.href = url.origin; (document.head || document.documentElement).appendChild(dnsLink); } } } catch (e) {} }); }; const fetchResourcesParallel = async (urls, type) => { const fetchPromises = urls.map(url => { if (resourceCache.has(url)) return Promise.resolve(resourceCache.get(url)); return fetchWithTimeout(url) .then(response => response.text()) .then(text => { const minified = type === 'css' && CONFIG.OPTIMIZE_INLINE_CSS ? minifyCSS(text) : type === 'js' && CONFIG.OPTIMIZE_INLINE_JS ? minifyJS(text) : text; const blob = new Blob([minified], { type: type === 'css' ? 'text/css' : 'application/javascript' }); const blobUrl = URL.createObjectURL(blob); resourceCache.set(url, { blobUrl, timestamp: Date.now() }); return { blobUrl, type }; }) .catch(error => { console.warn(`Failed to fetch ${url}:`, error); return null; }); }).filter(Boolean); const results = await Promise.all(fetchPromises.slice(0, CONFIG.PARALLEL_FETCH_LIMIT)); results.forEach(result => { if (!result) return; const element = document.createElement(result.type === 'css' ? 'link' : 'script'); element[result.type === 'css' ? 'href' : 'src'] = result.blobUrl; if (result.type === 'css') element.rel = 'stylesheet'; else element.defer = true; (document.head || document.documentElement).appendChild(element); }); }; const cleanupCache = () => { const now = Date.now(); for (const [url, { timestamp }] of resourceCache) { if (now - timestamp > CONFIG.CACHE_TTL) { resourceCache.delete(url); } } }; // Video Buffering Optimization const optimizeVideoBuffering = () => { const videos = document.querySelectorAll('video'); videos.forEach(video => { if (video.buffered.length > 0) return; video.preload = 'auto'; video.addEventListener('canplay', () => { const range = video.buffered; if (range.length > 0 && video.currentTime + CONFIG.VIDEO_BUFFER_AHEAD > range.end(range.length - 1)) { video.currentTime = range.end(range.length - 1); // Pre-buffer next segment } }); }); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeName === 'VIDEO') { node.preload = 'auto'; } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); }; // Node Processing const observer = new MutationObserver(mutations => { for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (node.nodeType !== 1) continue; const elements = [node, ...node.querySelectorAll?.('script, link, style, iframe') || []]; for (const el of elements) { if (!processedNodes.has(el)) { processNode(el); processedNodes.add(el); } } } } }); function processNode(node) { const tagName = node.tagName.toUpperCase(); let src = node.src || node.href; if (isBlocked(src)) { if (tagName === 'SCRIPT' || tagName === 'IFRAME') { node.type = 'javascript/blocked'; node.src = 'about:blank'; } else { node.remove(); } return; } switch (tagName) { case 'LINK': if (CONFIG.PREVENT_PREFETCH && (node.rel === 'prefetch' || node.rel === 'preload')) { node.remove(); } if (isFontRequest(node.href)) { node.remove(); } break; case 'STYLE': if (CONFIG.OPTIMIZE_INLINE_CSS && node.textContent && node.textContent.length < 15000) { node.textContent = minifyCSS(node.textContent); } break; case 'SCRIPT': if (CONFIG.OPTIMIZE_INLINE_JS && node.textContent && node.textContent.length < 15000) { node.textContent = minifyJS(node.textContent); } break; } } // YouTube Download Button const addYouTubeDownloadButton = () => { if (!CONFIG.ENABLE_YOUTUBE_TOOLS || !currentHost.includes('youtube.com')) return; const runYouTubeTools = () => { if (!document.getElementById('ai-yt-dl-btn')) { const controls = document.querySelector('.ytp-right-controls'); if (controls) { const btn = document.createElement('button'); btn.id = 'ai-yt-dl-btn'; btn.className = 'ytp-button'; btn.title = 'Download Video'; btn.innerHTML = '<svg height="100%" viewBox="0 0 36 36" width="100%"><path d="M17 18v1H6v-1h11zm-.5-6.6-.7-.7-3.8 3.7V4h-1v10.4l-3.8-3.8-.7.7 5 5 5-4.9z" fill="#fff"></path></svg>'; btn.onclick = () => window.open(`https://yt1s.com/?q=${encodeURIComponent(window.location.href)}`, '_blank'); controls.insertBefore(btn, controls.firstChild); } } }; runYouTubeTools(); new MutationObserver(runYouTubeTools).observe(document.querySelector('title'), { childList: true }); }; // Network Optimizations const monitorNetwork = async () => { while (true) { try { await fetchWithTimeout('https://www.google.com/generate_204', { method: 'GET', mode: 'no-cors' }); console.log('Network stable.'); } catch (error) { console.warn('Network issue detected. Attempting reconnection...'); await reconnectNetwork(); } await new Promise(resolve => setTimeout(resolve, 5000)); } }; const reconnectNetwork = async () => { try { await Promise.all([ fetchWithTimeout('https://1.1.1.1/generate_204', { method: 'GET', mode: 'no-cors' }), fetchWithTimeout('https://8.8.8.8/generate_204', { method: 'GET', mode: 'no-cors' }) ]); console.log('DNS cache refreshed.'); } catch (error) { console.warn('DNS refresh failed:', error); } }; // Smart Site Detection const detectSiteType = () => { const scripts = Array.from(document.querySelectorAll('script[src]')).map(s => s.src.toLowerCase()); if (scripts.some(src => src.includes('react'))) return 'react'; if (scripts.some(src => src.includes('angular'))) return 'angular'; if (document.querySelector('meta[name="cloudflare"]')) return 'cloudflare'; return 'generic'; }; const optimizeForSiteType = (siteType) => { switch (siteType) { case 'react': CONFIG.PARALLEL_FETCH_LIMIT = Math.min(CONFIG.PARALLEL_FETCH_LIMIT + 2, 10); // More parallel fetches for SPA break; case 'angular': CONFIG.REQUEST_TIMEOUT += 200; // Slightly longer timeout for Angular break; case 'cloudflare': CONFIG.ALLOW_LIST.push('cloudflareinsights'); // Ensure Cloudflare scripts are allowed break; } }; // Initialization const init = async () => { await estimateNetworkSpeed(); setupPreconnections(); observer.observe(document.documentElement, { childList: true, subtree: true }); monitorNetwork(); cleanupCache(); optimizeVideoBuffering(); const siteType = detectSiteType(); optimizeForSiteType(siteType); const criticalResources = Array.from(document.querySelectorAll('link[rel="stylesheet"], script[src]')) .map(el => el.href || el.src) .filter(url => isInternalOrTrusted(url) && !isBlocked(url)); await fetchResourcesParallel(criticalResources.filter(url => url.endsWith('.css')), 'css'); await fetchResourcesParallel(criticalResources.filter(url => url.endsWith('.js')), 'js'); const onDOMContentLoaded = () => { setTimeout(() => observer.disconnect(), 5000); if (CONFIG.REMOVE_NON_ESSENTIAL_ELEMENTS) { CONFIG.NON_ESSENTIAL_SELECTORS.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.remove()); }); } addYouTubeDownloadButton(); }; if (document.readyState === 'interactive' || document.readyState === 'complete') { onDOMContentLoaded(); } else { document.addEventListener('DOMContentLoaded', onDOMContentLoaded, { once: true }); } console.log('Ultimate Web Performance (v9.0 - HyperSpeed Edition) is active.'); }; init(); })();