I “motori” JavaScript dei vari browser sono negli ultimi anni tutti notevolmente migliorati dal punto di vista delle prestazioni. Google continua la sua guerra per primeggiare anche di soli pochi millisecondi e l’ultima beta di Chrome disponibile per gli sviluppatori integra nuovi miglioramenti e ottimizzazioni su questo fronte.
Per l’esecuzione del codice JavaScript, Chrome utilizzata due compilatori decidendo con un algoritmo in fase di preprocessamento quale engine utilizzare. Usando ad esempio, SunSpider, un benchmark che si focalizza su una batteria di test a esecuzione rapida, la velocità di V8 è migliorata del 25%. Quando deve eseguire codice JavaScript, V8 compila il codice in modo veloce, senza applicare ottimizzazioni. V8 prevede ad ogni modo un compilatore ottimizzato in grado di generare codice ancora più veloce, un metodo utilizzabile con programmi che richiedono tempi di esecuzione più lunghi. Il nuovo V8 analizza dettagliatamente il programma, tenendo conto di quante spesso sono richiamate le funzioni JavaScript e quanti cicli sono richiesti, approssimando il tempo richiesto per l’esecuzione di ogni funzione, individuando colli di bottiglia e ottimizzando le funzioni più richiamate. L’algoritmo in questione è già incluso nelle ultime versioni beta di Chrome.
// 1. Configura l'URL e l'identificativo esatto per questo articolo
var disqus_config = function () {
this.page.url = window.location.href.split('?')[0]; // Prende l'URL pulito della pagina
this.page.identifier = window.location.pathname; // Usa il percorso come ID univoco
};
document.addEventListener("DOMContentLoaded", function() {
var disqus_shortname = 'macitynet'; // INSERISCI QUI IL TUO SHORTNAME DISQUS
var disqus_loaded = false;
function loadDisqus() {
if (!disqus_loaded) {
disqus_loaded = true;
var dsq = document.createElement('script');
dsq.type = 'text/javascript';
dsq.async = true;
dsq.setAttribute('data-timestamp', +new Date()); // Obbligatorio per le nuove policy Disqus
dsq.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
}
}
// 2. Lazy load: carica quando arrivi al div
var observer = new IntersectionObserver(function(entries) {
if(entries[0].isIntersecting === true) {
loadDisqus();
observer.disconnect();
}
}, { threshold: [0] });
// Se l'elemento esiste, avvia l'osservatore
var thread = document.getElementById("disqus_thread");
if(thread) observer.observe(thread);
});