Caricamento di reCAPTCHA in corso...

Questo documento illustra le best practice per il caricamento del tag script reCAPTCHA. Queste informazioni sono applicabili sia a reCAPTCHA v2 che a v3.

Caricamento di reCAPTCHA in modo asincrono

Tutte le versioni di reCAPTCHA possono essere caricate in modo asincrono. Il caricamento di reCAPTCHA in modo asincrono non influisce sulla sua capacità di identificare il traffico sospetto. A causa degli vantaggi in termini di prestazioni degli script asincroni, in genere è consigliabile caricare reCAPTCHA in modo asincrono.

<script async src="https://www.google.com/recaptcha/api.js">

Quando carichi reCAPTCHA in modo asincrono, tieni presente che non è possibile utilizzata fino al termine del caricamento. Ad esempio, il seguente codice potrebbe interrompersi:

<script async src="https://www.google.com/recaptcha/api.js"></script>
<script>
  // If reCAPTCHA is still loading, grecaptcha will be undefined.
  grecaptcha.ready(function(){
    grecaptcha.render("container", {
      sitekey: "ABC-123"
    });
  });
</script>

In alcune situazioni, la modifica dell'ordine degli script può essere sufficiente per evitare le condizioni di traffico. In alternativa, puoi impedire le condizioni di gara includendo il seguente snippet di codice nelle pagine che caricano reCAPTCHA. Se utilizzi grecaptcha.ready() per eseguire il wrapping delle chiamate API, aggiungi il seguente snippet di codice per assicurarti che reCAPTCHA possa essere chiamato in qualsiasi momento.

<script async src="https://www.google.com/recaptcha/api.js"></script>
<script>
  // How this code snippet works:
  // This logic overwrites the default behavior of `grecaptcha.ready()` to
  // ensure that it can be safely called at any time. When `grecaptcha.ready()`
  // is called before reCAPTCHA is loaded, the callback function that is passed
  // by `grecaptcha.ready()` is enqueued for execution after reCAPTCHA is
  // loaded.
  if(typeof grecaptcha === 'undefined') {
    grecaptcha = {};
  }
  grecaptcha.ready = function(cb){
    if(typeof grecaptcha === 'undefined') {
      // window.__grecaptcha_cfg is a global variable that stores reCAPTCHA's
      // configuration. By default, any functions listed in its 'fns' property
      // are automatically executed when reCAPTCHA loads.
      const c = '___grecaptcha_cfg';
      window[c] = window[c] || {};
      (window[c]['fns'] = window[c]['fns']||[]).push(cb);
    } else {
      cb();
    }
  }

  // Usage
  grecaptcha.ready(function(){
    grecaptcha.render("container", {
      sitekey: "ABC-123"
    });
  });
</script>

In alternativa, i siti che utilizzano l'API v2 possono trovare utile utilizzare il callback onload; il callback onload viene eseguito al termine di reCAPTCHA Caricamento in corso. Il callback onload deve essere definito prima di caricare lo script reCAPTCHA.

<script>
  const onloadCallback = function() {
    console.log("reCAPTCHA has loaded!");
    grecaptcha.reset();
  };
</script>
<script async src="https://www.google.com/recaptcha/api.js?onload=onloadCallback”></script>

Se non è possibile caricare reCAPTCHA in modo asincrono, è possibile includere preconnect sono vivamente consigliati i suggerimenti delle risorse per reCAPTCHA. Questo ridurrà al minimo durante il quale il download dello script blocca l'analizzatore sintattico.

Utilizzo dei suggerimenti delle risorse

Se includi i seguenti suggerimenti di risorse nella sezione <head> del documento, ridurre il tempo necessario per distribuire le risorse utilizzate reCAPTCHA. Il hint della risorsa preconnect indica al browser di stabilire un connessione precoce con un'origine di terze parti.

<link rel="preconnect" href="https://www.google.com">
<link rel="preconnect" href="https://www.gstatic.com" crossorigin>

Caricamento lento

In linea di massima, maggiore è il contesto di reCAPTCHA di una pagina, meglio è per stabilire se le azioni degli utenti sono legittime. Questo è particolarmente vero quando si utilizzano versioni di reCAPTCHA che non si basano su verifiche degli utenti. Pertanto, in genere non è consigliabile attendere di caricare reCAPTCHA fino a quando non si verifica un'azione limitata specifica (ad esempio l'invio di un modulo).