Make web pages load faster by blocking ads and implementing lazy loading for images.
当前为
// ==UserScript==
// @name Speed Up Web Page Loading
// @namespace https://discord.gg/gFNAH7WNZj
// @version 1.3
// @description Make web pages load faster by blocking ads and implementing lazy loading for images.
// @author Bacon But Pro
// @match *://*/*
// @grant none
// @icon https://cdn141.picsart.com/351217840073211.png
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// Block ads and tracking scripts
const blockedDomains = [
'doubleclick.net',
'googlesyndication.com',
'google-analytics.com',
'adsafeprotected.com',
'adnxs.com',
'rubiconproject.com',
'pubmatic.com',
'scorecardresearch.com',
'bluekai.com',
'facebook.net',
'amazon-adsystem.com',
'ads-twitter.com',
'criteo.com',
'taboola.com',
'outbrain.com',
'cdn.ampproject.org',
'quantserve.com',
'googletagmanager.com',
'gemini.yahoo.com'
];
const observer = new MutationObserver(() => {
document.querySelectorAll('script[src], iframe[src]').forEach(el => {
blockedDomains.forEach(domain => {
if (el.src.includes(domain)) {
el.remove();
}
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
// Implement lazy loading for images
document.addEventListener('DOMContentLoaded', () => {
const images = document.querySelectorAll('img');
images.forEach(image => {
if (image.complete) return;
image.setAttribute('loading', 'lazy');
});
const lazyLoadObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
images.forEach(img => {
if (img.dataset.src) {
lazyLoadObserver.observe(img);
} else {
img.dataset.src = img.src;
img.src = '';
lazyLoadObserver.observe(img);
}
});
});
// Remove unwanted elements like pop-ups
const removeUnwantedElements = () => {
const unwantedSelectors = [
'.popup', // common class name for pop-ups
'.ad-banner', // common class name for ad banners
'#subscribe-modal', // common ID for subscription modals
'.overlay', // common class name for overlay ads
];
unwantedSelectors.forEach(selector => {
document.querySelectorAll(selector).forEach(el => el.remove());
});
};
const unwantedObserver = new MutationObserver(removeUnwantedElements);
unwantedObserver.observe(document.documentElement, { childList: true, subtree: true });
document.addEventListener('DOMContentLoaded', removeUnwantedElements);
// Keep essential buttons
const keepEssentialButtons = () => {
const essentialButtons = [
'button.important', // Add selectors for buttons you want to keep
'.keep-this-button',
];
essentialButtons.forEach(selector => {
document.querySelectorAll(selector).forEach(el => {
el.style.display = 'block';
});
});
};
const essentialButtonsObserver = new MutationObserver(keepEssentialButtons);
essentialButtonsObserver.observe(document.documentElement, { childList: true, subtree: true });
document.addEventListener('DOMContentLoaded', keepEssentialButtons);
})();