19 Maggio 2023

RUCSS: Remove Unused CSS, una vista ai pro e contro nei vari contesti reali.

Quando la tecnica del Remove Unused CSS può rendere più lento il tuo sito e rovinare la user experience.

Introduzione

Nell’attuale panorama di ottimizzazione delle performance del web, i Google Core Web Vitals sono diventati un aspetto fondamentale nella definizione di un’esperienza utente di qualità. Fra i numerosi fattori che influenzano questi parametri, uno dei più significativi è la gestione dei fogli di stile CSS. Classiche tecniche come il caricamento asincrono di CSS, sebbene utili, possono portare a problemi di spostamento di layout, penalizzati dal Cumulative Layout Shift (CLS).

Una soluzione promettente a questo problema è rappresentata dalla tecnica del Remove Unused CSS (RUCSS), che prevede l’eliminazione dei codici CSS non utilizzati all’interno di una specifica pagina web.

Come funziona il RUCSS e l’implementazione di WP Rocket

L’approccio RUCSS si basa sulla riduzione del peso del codice CSS inviato al browser attraverso l’identificazione e l’eliminazione dei selettori CSS non necessari per la visualizzazione di una specifica pagina web. Questo processo avviene attraverso una minuziosa scansione del contenuto HTML della pagina, un’analisi approfondita delle regole CSS definite nei fogli di stile ad essa collegati, e infine la creazione di un CSS ‘pulito’ che contiene solo gli stili utilizzati nella pagina corrente. Tale processo contribuisce a migliorare l’efficienza del caricamento della pagina e ridurre il tempo di blocco del rendering.

remove-unused-css

Prendiamo un esempio più concreto: se un sito web dispone di un foglio di stile di 200 kilobytes, ma ne utilizza effettivamente solo il 20% per una determinata pagina, RUCSS eliminerà l’80% di CSS non utilizzato. Il risultato sarà un foglio di stile di soli 40 kilobytes, migliorando significativamente il tempo necessario per il download del CSS e la velocità di caricamento della pagina.

WP Rocket, uno dei più noti plugin per la performance in WordPress, implementa la tecnica del RUCSS salvando i CSS ‘puliti’ nella tabella ‘wp_rocket_css’. Tuttavia, questa pratica può portare a un considerevole aumento dell’utilizzo dello storage, in particolare nei siti web con un gran numero di pagine. Infatti, la tabella ‘wp_rocket_css’ può raggiungere dimensioni di svariati gigabyte, soprattutto in ambienti ad alta disponibilità di pagine.

Non capita di raro infatti, eseguendo operazioni amministrative e di manutenzione sui siti web di clienti, sia a livello applicativo che a livello sistemistico di imbattersi in situazioni in cui un database di poche decine di megabyte sia letteralmente esploso a svariate decine di gygabyte, producendo anche importartanti rallentamenti a livello di DBMS MySQL.

Ad esempio un utente su Github fa notare la sua esperienza e le sue rimostranze :

Per un sito con 10 mila prodotti (di 50 attributi) la tabella è di 5GB.

Non penso che creare CSS per ogni singola pagina/prodotto sia la soluzione, indipendentemente dal metodo di archiviazione. Ovviamente, quando si utilizza un filesystem, non si avranno i requisiti di memoria aumentati che stiamo affrontando ora. Il nostro sito, consuma 15GB di RAM anche quando è “inattivo” – grazie alla vostra enorme tabella che è otto volte la dimensione del resto del contenuto.

Quello che dovete fare, signori, è seguire l’esempio di TagDiv e creare SOLO UN CSS ottimale per ogni modello di pagina, NON UNO PER OGNI SINGOLA PAGINA. Ad esempio, UN file CSS per la pagina del prodotto, uno per la pagina della categoria, UNO per la homepage ecc. Presumendo ovviamente il “worst case scenario”, ad esempio una pagina che include prodotti correlati, cross-sell, up-sell ecc. e applicare questo UNICO modello a tutte le pagine dei prodotti.

Se non siete sicuri, permettete agli utenti finali di eseguire manualmente l’ottimizzatore sulla loro… pagina del prodotto più complessa, come fa TagDiv per ogni modello. Mi piacerebbe davvero utilizzare il vostro ottimo lavoro di ottimizzazione CSS in un altro progetto. Purtroppo ha oltre 150 mila prodotti e la vostra architettura lo rende proibitivo.

Come possiamo vedere dal commento sopra, che tratta un caso specifico reale, dunque il problema non è tanto nella tecnica utilizzata (ovvero quella di rimuovere i css inutilizzati), quanto la pessima implementazione di un plugin famosissimo come WP Rocket.

Valutazioni sulla saggezza dell’utilizzo del RUCSS

L’utilizzo del RUCSS, sebbene possa sembrare attraente dal punto di vista teorico, richiede una valutazione ponderata. Il motivo principale risiede nel costo computazionale associato alla generazione dei fogli di stile ‘puliti’. L’analisi necessaria per individuare i selettori CSS inutilizzati su ciascuna pagina del sito richiede risorse significative in termini di CPU e memoria.

Un altro aspetto da considerare riguarda la gestione dello storage: i CSS ‘puliti’ generati devono essere salvati da qualche parte, con un conseguente impatto sull’utilizzo dello storage.

Come già accennato, nel caso di WP Rocket, questi vengono memorizzati nella tabella ‘wp_rocket_css’ del database MySQL, che può crescere fino a raggiungere dimensioni di svariati gigabyte. Questa circostanza, oltre a richiedere un notevole spazio su disco, comporta anche un elevato costo computazionale per l’esecuzione delle query SQL, sia in fase di inserimento che di selezione dei dati.

In contesti come gli e-commerce, l’adozione del RUCSS potrebbe portare all’esigenza di scaricare numerosi, sebbene piccoli, file CSS a ogni visita di una nuova pagina. In termini di user experience, può risultare più accettabile un leggero ritardo durante il caricamento iniziale del sito, piuttosto che riscontrare ripetuti ritardi su ogni pagina.

RUCSS in diversi contesti: siti di prodotti e e-commerce

Siti web focalizzati su prodotti, come quelli di cosmetici, occhiali o abbigliamento, richiedono particolare attenzione. In tali casi, l’utente tende a visitare numerose pagine di prodotti e una navigazione fluida è fondamentale. L’approccio più sensato potrebbe essere quello di servire un file CSS più grande inizialmente, che verrà poi riutilizzato dalle successive pagine HTML.

Prendendo ad esempio un e-commerce come quelli di prodotti cosmetici, occhiali o abbigliamento, dove l’utente tende a visitare numerose pagine di prodotti, sarebbe preferibile avere una navigazione più fluida possibile. Si potrebbe finire con il dover scaricare molti piccoli file CSS a ogni visita di una nuova pagina. Questo può avere poco senso se consideriamo l’esperienza dell’utente: è probabilmente più accettabile attendere un secondo in più durante il caricamento iniziale del sito, piuttosto che riscontrare piccoli ritardi ripetuti su ogni pagina.

Consigli per l’uso del RUCSS

Sebbene l’ottimizzazione dei punteggi Google Core Web Vitals possa sembrare allettante, un e-commerce che riceve principalmente traffico da campagne sponsorizzate su Facebook o Google Adsense potrebbe non trarre benefici significativi da questo approccio. Questo è particolarmente vero in presenza di plugin come WP Rocket, Autoptimize o RapidLoad, che possono causare notevoli ritardi nel caricamento delle pagine sopratutto laddove il CSS non è ancora presente e deve essere generato a runtime, creando un paradosso in presenza di sistemi con cache che ovviamente cache l’HTML e non cacha file statici come JS e come CSS.

Ci si è trovati in alcuni casi ad avere un caricamento dell’HTML in 40 millisecondi, e l’attesa del CSS a 9 secondi, generando un’esperienza utente a dir poco terrificante, laddove avrebbe dovuto essere praticamente immediata.

Nonostante dunque,  l’approccio RUCSS possa risultare efficace in certi contesti, non è una soluzione universale. Prima di implementare questa tecnica, è fondamentale prendere in considerazione l’intero ecosistema del sito web, incluse le caratteristiche del pubblico, la struttura del sito, le priorità in termini di SEO e user experience, nonché le risorse disponibili per la gestione del database e dello storage.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto