web-dev-qa-db-de.com

Nutzen Sie das Browser-Caching, das nach der Aktualisierung von .htaccess nicht funktioniert

Ich habe eine Website in WordPress und habe meine .htaccess-Datei mit der folgenden Regel aktualisiert.

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
</IfModule>

Jetzt, als ich die Leistung meiner Website mit Google Insight überprüft habe. es gibt mir immer noch Fehler für Browser-Caching nutzen

Ich habe diesen Code verwendet

    add_filter( 'script_loader_src', 'elated_child__remove_ver' );
    add_filter( 'style_loader_src', 'elated_child__remove_ver' );

    function elated_child__remove_ver( $src ) { // Remove query strings from static resources
        if ( strpos( $src, '?f=' ) || strpos( $src, '&f=' ) ) {
            $src = remove_query_arg( 'f', $src );
        }



   return $src;
}

Irgendeine Idee?

2
Ankita Kashyap

... diese Dateien enthalten ?ver= query string. Können Sie mir bitte sagen, wie Sie dies beheben können?

Um alle ?ver=- und &ver=-Abfragezeichenfolgen zu entfernen, fügen Sie Folgendes in den functions.php Ihres untergeordneten Themas ein:

add_filter( 'script_loader_src', 'wpse_237671_remove_ver' );
add_filter( 'style_loader_src', 'wpse_237671_remove_ver' );

function wpse_237671_remove_ver( $src ) { // Remove query strings from static resources
    if ( strpos( $src, '?ver=' ) || strpos( $src, '&ver=' ) ) {
        $src = remove_query_arg( 'ver', $src );
    }
    return $src;
}

Vor

<link rel='stylesheet' href='http://some.site/to/file.css?ver=4.6' type='text/css' />

Nach dem

<link rel='stylesheet' href='http://some.site/to/file.css' type='text/css' />

Aktualisieren

Es sieht so aus, als würde Better WordPress Minify die ?f= Abfragezeichenfolge generieren. Ich würde empfehlen, das Autoptimize als Alternative zu prüfen, da dieses aktueller ist und keinen ?f= generiert.

Das sollte es tun

if ( !is_admin() || !is_admin_bar_showing() ){
  add_filter( 'script_loader_src', '_remove_script_version', 15, 1 );
  add_filter( 'style_loader_src', '_remove_script_version', 15, 1 );
}

function _remove_script_version( $src ){
  if (preg_match("(\?ver=)", $src )){
    $parts = explode( '?', $src );
    return $parts[0];
  }else{
    return $src;
  }
}

Dadurch wird der ?ver= aus der Datei-URL entfernt. Es wird unter bestimmten Bedingungen überprüft, ob wir auf einer Administratorseite sind oder ob wir angemeldet sind. In diesem Fall wenden wir die Filter nicht an (möglicherweise nützliche Informationen, wenn Sie an Ihrer Site arbeiten).

Beachten Sie auch, dass dadurch nicht alleAbfragezeichenfolgen entfernt werden, da einige Plugins/Themes möglicherweise eigene hinzufügen und andere Filter verwenden oder diese in ihrer Codebasis fest codieren. Sie könnten jedoch die gleiche Funktion mit diesen Filtern verknüpfen, wenn sie bereitgestellt werden (andernfalls müssten Sie diese Dateien manuell bearbeiten).

Beispielsweise können Sie dieser Filterliste add_filter( 'genesis-header', '_remove_script_version', 15, 1); hinzufügen, wenn Sie ein Genesis-Thema verwendet haben.

1
bynicolas

Wenn Sie bei jedem Laden der Seite feststellen, dass sich der ver=-Parameter ändert, während der Quellcode auf Ihrer Seite angezeigt wird, wird die Datei "Cache-Busting". "Cache-Busting" wird durchgeführt, damit ein Browser feststellen kann, ob eine neuere Version einer Datei, die normalerweise im Cache gespeichert ist, verwendet wird.

In WordPress sollten die für die Site verwendeten CSS- und Javascript-Dateien die Funktion wp_enqueue_script verwenden. Dies kann durch Themes und Plugins überschrieben und sogar entfernt werden. Der wichtige Teil, der in diesem Zusammenhang über diese Funktion zu beachten ist, ist der vierte Parameter: $ver. Wenn dieser Parameter so eingestellt ist, dass er sich dynamisch ändert, oder häufiger durch Ändern seines Werts, weil die Datei geändert wurde, wird der Cache durch den Parameter "gesprengt", sodass der Browser die Datei mit diesem Namen erneut abruft.

Ein Beispiel hierfür wäre eine Aktualisierung eines Themas. Wenn ich eine Funktion in der JavaScript-Designdatei ändere, ändere ich auch den $ver in der wp_enqueue_script-Funktion, weil ich nicht möchte, dass jemand das Thema aktualisiert und die Änderungen nicht sieht, nur weil der Browser die Datei noch im Cache hat. Ich muss den Namen nicht ändern, damit der Browser weiß, was zu finden ist. Der Browser sollte auch nicht jedes Mal nach einer neuen Datei suchen müssen, wenn er sie benötigt.

1
Nathan Powell