È possibile utilizzare google adsense asincrono, ovvero non bloccante?


Risposte:


6

questo lo fa:

<script type="text/javascript"><!--
// dynamically Load Ads out-of-band
setTimeout((function ()
{
    // placeholder for ads
        var eleAds = document.createElement("ads");  
        // dynamic script element
        var eleScript = document.createElement("script");  
        // remember the implementation of document.write function
        w = document.write;
        // override and replace with our version
        document.write = (function(params)
        {
        // replace our placeholder with real ads
        eleAds.innerHTML = params;
        // put the old implementation back in place
        // Aristos, add this check because called more than ones
        //  and ends, with this symbol.
        if(params.indexOf("</ins>") != -1)
            document.write=w;
        });
        // setup the ads script element
        eleScript.setAttribute("type", "text/javascript");
        eleScript.setAttribute("src", "http://pagead2.googlesyndication.com/pagead/show_ads.js");
        // add the two elements, causing the ads script to run
        document.body.appendChild(eleAds);              
        document.body.appendChild(eleScript);           
}), 1);
                //-->
        </script> 

vedere questo articolo del blog " Google Ads Async (asincrono) " sostanzialmente ho trovato un modo per ottenere il codice degli annunci per eseguire veramente asincrono.


1
+1 per la soluzione intelligente fornita nel collegamento. È molto interessante il modo in cui esegue il backup dello standard document.write functione lo ripristina in seguito. L'unico aspetto negativo è che mi chiedo se Google Adsense TOS consenta di fare questo tipo di cose?
Marco Demaio,

+1 per l'idea, lo prendo e lo faccio funzionare un po 'meglio e lo pubblico qui. Non riesco a far funzionare GS_googleAddAdSenseService con l'altra idea.
Aristos,

5

Sì, c'è un modo: usare iframe. Effettuiamo il caricamento asincrono dei contenuti degli annunci su uno dei siti dei nostri clienti.

Devi prima contattare Google per il supporto dei loro annunci in iframe (che non era ampiamente disponibile quando abbiamo costruito quel sito). Puoi quindi utilizzare JavaScript per attivare il caricamento del contenuto iframe di AdSense, che è ciò che facciamo.

La soluzione è davvero semplice una volta che hai il supporto iframe di Google.

Modifica: sembra che - dai post a cui fa riferimento Virtuosi Media - questa pratica potrebbe non essere gradita a Google ...

Modifica 2: questo è il codice che usiamo nell'iframe. Provalo per vedere se funziona, forse anche senza chiedere specificamente assistenza a Google. Rimosso type="text/javascript" language="JavaScript"per una migliore leggibilità:

<head runat="server">
    <script src="http://partner.googleadservices.com/gampad/google_service.js">
    </script>

    <script>
        GS_googleAddAdSenseService("ca-pub-YOURKEY");
        GS_googleEnableAllServices();
    </script>

    <!-- For this method, it is not necessary to define the slots in advance 
         and we do not use the FetchAds function -->
    <script>
        GA_googleUseIframeRendering(true);    //<%-- This indicates iframe rendering for all slots --%>
    </script>
</head>
<body>
    <form id="formAd" runat="server">
        <div>
            <script>
                GA_googleFillSlotWithSize("ca-pub-YOURKEY", "AdSlotId",
                                          iframeWidth, iframeHeight);
            </script>
        </div>
    </form>
</body>

Riempiamo tutti i nostri slot tramite ID adslot, quindi non vediamo alcun PSA.


1
Puoi fornire maggiori dettagli su come contattare Google a riguardo? Non vedo nulla al riguardo nel mio account AdSense.
Virtuosi Media,

Inoltre, sarei curioso di sapere se le unità pubblicitarie pubblicano ancora annunci pertinenti o solo PSA e come hai risolto il problema.
Virtuosi Media,

In realtà, riempiamo tutti i nostri slot tramite ID adslot, quindi non stiamo vedendo alcun PSA.
Oliver,

quando utilizzo questo metodo, ottengo GA_googleFillSlotWithSize errore non definito
Timo Huovinen

@YuriKolovsky: sembra che lo script di Google non si stia caricando correttamente. Vedi la mia Modifica 2: potrebbe essere necessario richiedere questo metodo con Google.
Oliver,

2

Al momento non offrono l'opzione, per quanto posso vedere. La tua migliore opzione, se fosse stata consentita da Google TOS, sarebbe stata quella di utilizzare un elemento segnaposto e sostituirlo in modo dinamico con JavaScript dopo il caricamento della pagina. Tuttavia, sembra che potrebbe essere contro il TOS. Vedi questa discussione per maggiori dettagli.


2

Puoi utilizzare un segnaposto, chiamare il codice Adsense e quindi cambiare il segnaposto con l'annuncio. Sto usando qualcosa del genere sul mio sito:

if ( ad1 = document.getElementById('ad-top') )
{
    ad2 = document.getElementById('banner_tmp468');
    ad1.appendChild(ad2);
    ad2.style.display = 'block';
}

Google consiglia persino di farlo quando dicono che dovresti avere la posizione dell'annuncio più importante prima nel tuo codice HTML. Se vuoi realizzare che dovrai usare JS o CSS per spostare le unità pubblicitarie meno importanti nella parte superiore (visiva) della tua pagina.

Ma per quanto ne so, AdSense esegue già il rendering degli annunci in modo asincrono. Ho visto molto raramente bloccare il pageload. Non sono sicuro di questo però.


0

Perché google dice "consente di rendere il Web più veloce", cambio il codice sopra per caricare gli annunci google solo quando sono visibili. Il codice funziona "così com'è" solo per un annuncio google place, ma penso che tu possa facilmente modificarlo per più annunci. I diversi con l'altro codice sono

  • Carica annunci solo se sono visibili all'utente
  • Carica annunci e posizionali su un div (non alla fine della pagina)
  • Funziona con tutti i browser perché carico tutti gli elementi necessari (non solo il primo)

A partire dal divche inserisco gli annunci in un secondo momento.

<div id="adSpot" ></div>

<script type="text/javascript">
    // load the script with cache
    function getScriptCcd(url, callback)
    {
        jQuery.ajax({
                type: "GET",
                url: url,
                success: callback,
                dataType: "script",
                cache: true
        });
    };

    // to unbind the scroll I keep the total binds of scroll
    // in this example I have only one.
    var cPosaScrollExo = 0;
    // bind the scrool to monitor if ads are visible    
    function addThisScroll(RunThisFunction)
    {
        jQuery(window).scroll(RunThisFunction);
        cPosaScrollExo++;
    }
    // unbind all scroll if all they not needed any more
    function unBindScroll()
    {
        cPosaScrollExo--;

        if(cPosaScrollExo <= 0)
        {
            cPosaScrollExo = 0;
            jQuery(window).unbind('scroll');
        }
    }

    // here I check if the element is visible to the user with a 100pixel advanced.
    function isScrolledOnMatia(pioSimio) 
    {
        var SimioPouTheloNaFenete = (jQuery(pioSimio).offset().top - 100 );
        var scrollPosition = jQuery(window).height() + jQuery(window).scrollTop();

        return (scrollPosition >= SimioPouTheloNaFenete );
    }   

    // the ads informations
    google_ad_client = "pub-XXXXXXXXXXXXXXX";
    google_ad_slot = "XXXXX";
    google_ad_width = 468;
    google_ad_height = 60;

    var GoogleIsVisible = false;
    // we call this function on every window scroll
    function CheckAdsVisibility()
    {
        if(!GoogleIsVisible)
        {
            if(isScrolledOnMatia("#adSpot"))
            {
                unBindScroll();
                GoogleIsVisible = true;

                            // finally I go to show the ads
                LoadAdsLater();
            }
        }
    }

    // here is a modification of the function that load the ads
    function LoadAdsLater()
    {
        try
        {
                    // Aristos: nice trick here 
            // remember the implementation of document.write function
            w = document.write;

            // override and replace with our version
            document.write = (function(params)
            {
                jQuery("#adSpot").append(params);

                // put the old implementation back in place when
                            //  all writes are finish
                if(params.indexOf("</ins>") != -1)
                    document.write=w;
            });             

            // loading script
            getScriptCcd("http://pagead2.googlesyndication.com/pagead/show_ads.js");
        }
        catch(e)
        {
            // check for errors on debug
        }
    }

    // and here we setup the hole thin
    jQuery(document).ready(function() 
    {       
            // check if all ready is visible !
        CheckAdsVisibility();
            // bind the scroll
        addThisScroll(CheckAdsVisibility);
    });
</script>

Ho provato e lavorando con tutti i browser, uso jQuery per essere più sicuro di evitare i browser difficili.

ps, ho creato un codice simile per caricare google plus, e facebook e tutti quegli elementi che si caricano senza motivo il più delle volte.


0

Non è più necessario farlo. Show_ads.js di Google AdSense ora è in qualche modo asincrono. Puoi leggere di più sui dettagli cruenti sul blog ufficiale:

La tua rete, mezzo secondo prima

Non è necessario modificare il codice dell'annuncio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.