Enhanced Web Page Optimizer

Improve web page performance by blocking ads, lazy-loading images, and removing intrusive elements.

  1. // ==UserScript==
  2. // @name Enhanced Web Page Optimizer
  3. // @namespace https://discord.gg/gFNAH7WNZj
  4. // @version 1.4
  5. // @description Improve web page performance by blocking ads, lazy-loading images, and removing intrusive elements.
  6. // @author Bacon But Pro
  7. // @match *://*/*
  8. // @grant none
  9. // @icon https://cdn141.picsart.com/351217840073211.png
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15.  
  16. const blockedDomains = [
  17. 'doubleclick.net', 'googlesyndication.com', 'google-analytics.com',
  18. 'adsafeprotected.com', 'adnxs.com', 'rubiconproject.com',
  19. 'pubmatic.com', 'scorecardresearch.com', 'bluekai.com',
  20. 'facebook.net', 'amazon-adsystem.com', 'ads-twitter.com',
  21. 'criteo.com', 'taboola.com', 'outbrain.com',
  22. 'cdn.ampproject.org', 'quantserve.com', 'googletagmanager.com',
  23. 'gemini.yahoo.com'
  24. ];
  25.  
  26. const blockAds = () => {
  27. document.querySelectorAll('script[src], iframe[src]').forEach(el => {
  28. if (blockedDomains.some(domain => el.src.includes(domain))) {
  29. el.remove();
  30. }
  31. });
  32. };
  33.  
  34. const adObserver = new MutationObserver(blockAds);
  35. adObserver.observe(document.documentElement, { childList: true, subtree: true });
  36.  
  37. const enableLazyLoading = () => {
  38. const images = document.querySelectorAll('img:not([loading])');
  39. images.forEach(img => img.setAttribute('loading', 'lazy'));
  40.  
  41. const lazyLoadObserver = new IntersectionObserver(entries => {
  42. entries.forEach(entry => {
  43. if (entry.isIntersecting) {
  44. const img = entry.target;
  45. if (img.dataset.src) {
  46. img.src = img.dataset.src;
  47. }
  48. lazyLoadObserver.unobserve(img);
  49. }
  50. });
  51. });
  52.  
  53. images.forEach(img => {
  54. if (!img.src && img.dataset.src) {
  55. img.src = img.dataset.src;
  56. }
  57. lazyLoadObserver.observe(img);
  58. });
  59. };
  60.  
  61. document.addEventListener('DOMContentLoaded', enableLazyLoading);
  62.  
  63. const intrusiveSelectors = [
  64. '.popup', '.ad-banner', '#subscribe-modal', '.overlay'
  65. ];
  66.  
  67. const removeIntrusiveElements = () => {
  68. intrusiveSelectors.forEach(selector => {
  69. document.querySelectorAll(selector).forEach(el => el.remove());
  70. });
  71. };
  72.  
  73. const intrusiveObserver = new MutationObserver(removeIntrusiveElements);
  74. intrusiveObserver.observe(document.documentElement, { childList: true, subtree: true });
  75. document.addEventListener('DOMContentLoaded', removeIntrusiveElements);
  76.  
  77. const essentialButtonSelectors = ['button.important', '.keep-this-button'];
  78.  
  79. const preserveEssentialButtons = () => {
  80. essentialButtonSelectors.forEach(selector => {
  81. document.querySelectorAll(selector).forEach(el => {
  82. el.style.display = 'block';
  83. });
  84. });
  85. };
  86.  
  87. const buttonObserver = new MutationObserver(preserveEssentialButtons);
  88. buttonObserver.observe(document.documentElement, { childList: true, subtree: true });
  89. document.addEventListener('DOMContentLoaded', preserveEssentialButtons);
  90. })();