Sunt convins că orice utilizator de internet este agasat de reclame. Și asta deoarece, dacă nu ne deranjează vizual (overlayere imense, nesimțite), ne papă timp. Și asta deoarece reclamele sunt servite (cu mici excepții) de pe servere externe. Iar ca posesor de site/blog, un timeout al ad serverului înseamnă câțiva vizitatori pierduți. Și hai să-ți spun de ce:
Puțină teorie
Majoritatea reclamelor sunt încărcate cu un cod foarte simplu:
<script src="delayed.js.php" type="text/javascript" charset="utf-8"></script>
delayed.js.php este url-ul spre ad server. Problema care apare se datorează modului în care se întâmplă încărcarea paginilor: pentru a respecta diverse dependențe (de ex. vrei să se încarce întâi jQuery, după aceaea fișierul tău cu script-uri, nu?), browserul blochează orice activitate în momentul când dă de un cod asemănător cu cel de mai sus. Altfel spus, orice este după un script src este executat DUPĂ ce se primește un răspuns de la server.
De cele mai multe ori e ok. Dar în cazul în care serverul nu răspunde, site-ul tău este blocat pentru 10-20-30 secunde. Adică până browserul își dă seama că serverul are buba și nu poate încărca nimic.
delayed.js.php este un script foarte simplu (atât de simplu încât ’script’ mi se pare ușor forțat) care simulează un delay prea mare. Iată codul din script:
<?php
sleep(3);
echo "alert('Fișierul extern s-a încărcat');";
Și rezultatul:
Așa, și?
Statisticile spun că dacă un site nu se încarcă în 5-10 secunde, ai șanse destul de mari să pierzi vizitatorul. Și cum nimeni nu vrea să piardă vizitatori…
Soluția
Soluția este încărcarea asincronă a scripturilor externe. Sunt mai multe metode de a face acest lucru, dar cel mai elegant mi se pare modul în care se încarcă Google Analytics. Adică încarcă scriptul când poate, fără să blocheze pagina. În cazul în care scriptul nu se încarcă… Asta e. Nu se întâmplă nimic, site-ul este afișat complet, userul nu așteaptă inutil.
Pasul 1
Să presupunem că avem codul următor, furnizat de agenția de publicitate:
<script type="text/javascript" language="javascript" src="http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&affiliateId=302620505&adSize=728x90"></script>
Pasul 2
Șterge codul de mai sus, dar salvează undeva valoarea atributului src ( http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&affiliateId=302620505&adSize=728x90 )
<script type="text/javascript" charset="utf-8">
/* <![CDATA[ */
(function() {
var myAd = document.createElement('script');
myAd.type = 'text/javascript';
myAd.async = true;
myAd.src = 'URL_AD_SERVER';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(myAd);
})();
/* ]]> */
</script>
Pasul 3
Se înlocuiește URL_AD_SERVER cu link-ul salvat, astfel încât vei avea:
myAd.src = 'http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&affiliateId=302620505&adSize=728x90';
Salvezi și.. cam asta e
Același fișier php, același delay, o abordare ușor diferită. Rezultatul?
Pagina se încarcă fără să aștepte fișierul extern. Mi se pare un pic mai bine. Ție nu? Partea bună este că merge cam pe toate browserele: IE6+, Safari, Opera, Chrome și desigur, Firefox.
Iată cum, cu un fragment de cod poți îmbunătăți masiv experiența utlizatorului și reduci „riscul” ca vizitatorul să folosească Adblock (sau ceva asemănător). Eu, de exemplu, folosesc Adblock doar pe site-urile cu reclame nesimțite (realitatea e cel mai bun exemplu) și pe site-urile cu timeout mare al scripturilor.