WordPress: cosa fare se la CDN di jQuery è down

Cosa succederebbe se il sistema CDN di Google fosse down? Semplicemente jQuery non sarebbe più disponibile ed il nostro sito presenterebbe dei notevoli problemi qualora il funzionamento delle sue caratteristiche dipendesse interamente da jQuery. Dobbiamo quindi implementare una soluzione di ripiego.

La soluzione consiste nel testare la disponibilità della copia remota di jQuery ed eventualmente ripiegare su una copia locale:


function add_scripts() {
	$jquery_cdn_url = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
	$jquery_local_url = get_template_directory_uri() . '/js/jquery.min.js';
	
	wp_deregister_script( 'jquery' );
	
	$remote_jquery = wp_remote_get( $jquery_cdn_url, array( 'timeout' => 2 ) ); // richiesta GET con un timeout di 2 secondi
	
	if( !is_wp_error( $remote_jquery ) ) { // è disponibile?
		wp_register_script( 'jquery', $jquery_cdn_url, array(), '1.11', false );
	} else {
		wp_register_script( 'jquery', $jquery_local_url, array(), '1.11', false );	
	}
	
	wp_enqueue_script( 'jquery' );
	
	// altri script
}

add_action( 'wp_enqueue_scripts', 'add_scripts' );

Il codice di cui sopra, da inserire in functions.php, utilizza le API HTTP di WordPress. Tuttavia è possibile utilizzare un approccio più rapido e diretto con cURL:


$ch = curl_init( $jquery_cdn_url );

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
curl_setopt( $ch, CURLOPT_TIMEOUT_MS, 200 ); // millesimi di secondo

curl_exec( $ch );

$curl_errno = curl_errno( $ch );
curl_close( $ch );

if ( $curl_errno > 0 ) {
	wp_register_script( 'jquery', $jquery_local_url, array(), '1.11', false );
} else {
	wp_register_script( 'jquery', $jquery_cdn_url, array(), '1.11', false );	
}

Torna su