Spring Boot + Freemarkerを使用してWebプロジェクトを開発する場合、いくつかの静的ファイルは比較的大きく、PCでアクセスすると、携帯電話でアクセスすると、特にトラフィックを使用する場合は速度がはるかに遅くなり、トラフィックが多い場合があります。
リクエストをキャッチすることにより、ページを入力するたびに静的ファイルをロードする必要があることがわかります。お金が不足していない会社が、静的ファイルをCDNに配置してアクセスをスピードアップできる場合、またはnginxを使用して静的ファイルをキャッシュできます。
今日は、別のキャッシュ最適化方法を紹介します。 Springのキャッシュメカニズムを通じて、静的ファイルはキャッシュされます。 Spring Bootで静的ファイルキャッシュを構成するには、次の構成を構成ファイルに追加する必要があります。
#リソースキャッシュ時間、ユニット秒spring.resources.cache-period = 604800#enable gzip圧縮spring.resources.chain.gzipt = true#enable cache spring.resources.chain.cache = false
構成のドキュメントを参照できます:https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingle/のスプリングリソース処理セクション
キャッシュ構成を追加した後、ページにアクセスした後、ロードされた静的リソースがキャッシュされます。 2回目の訪問中、もう一度ダウンロードをリクエストしなくなります。パケットをキャッチすることで、実際にキャッシュされていることがわかります。
サイズ列には、メモリキャッシュからあります。リソースはブラウザのメモリにキャッシュされており、一部のファイルはディスク、つまりディスクキャッシュからキャッシュされています。
最適化の目的は達成することですが、解決されていない小さな問題があります。つまり、CSSファイルが変更され、サーバーがリリースされた場合、ユーザーにキャッシュがあります。
最良の効果は、ファイルが変更されたとき、またはサーバープログラムが再起動するとき、ユーザーの要求はサーバー上の最新のリソースをダウンロードする必要があります。再起動がない場合は、キャッシュされたコンテンツを使用して、ユーザーが変更後すぐに最新のコンテンツを確認できるようにします。
バージョン番号を使用して、この問題を解決します。これは、静的リソースの後にバージョン番号を追加し、リソースが変更されたときにバージョン番号を変更するため、問題はありません。
それを使用する方法は次のとおりです。
<link rel = "styleSheet" href = "css /main-app.css?version = $ {version!}" rel = "external nofollow" />使用法は非常に単純です。キーは、バージョン値がどこから来たのかということです。
開始する前に、この値をコードで設定できます。
System.SetProperty( "バージョン"、バージョン);
この値は、メインメソッドのArgsを介して渡すことができ、プロジェクトを開始するスクリプト内のプログラムに動的に渡すことができます。スタートアップスクリプトは、プログラムJARのMD5値をバージョン番号として取得できます。このようにして、サーバープログラムが再起動すると、バージョン番号が変更され、キャッシュが無効になります。
次に、この値をフィルターで取得し、リクエストに設定すると、各ページで使用できます。
string version = system.getProperty( "version"); req.setattribute( "version"、version == null? "1.0.0":version);
パラメーターを渡すこの方法に加えて、カスタムパッケージプラグインを使用して、パッケージング時に特定のコンテンツにバージョンを置き換えることもできます。
上記の方法は、自分でバージョンを生成することにより、ファイルの変更を制御することです。実際、Spring MVCは静的ファイルのバージョン管理機能を提供しています。 2つの方法があります。 1つは、リソースのMD5を介してバージョン番号を生成することです。ファイルのコンテンツが変更された場合、MD5も間違いなく変更されます。別の方法は、バージョン番号をリソースにプレフィックスすることです。
MD5
次の構成をプロパティファイルに追加します。
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
URLの追加の処理:
@ControllerAdvicePublic Class ControllerConfig {@Autowired ResourceUrlProvider ResourceUrlProvider; @modelattribute( "urls")public resourceurlprovider urls(){return this.resourceurlprovider; }}ページの使用は次のとおりです。
コードコピーは次のとおりです。
<link rel = "styleSheet" type = "text/css" href = "$ {urls.getforlookuppath( '/css/main-app.css')}" rel = "external nofollow">
編集後、次のコンテンツになります。
コードコピーは次のとおりです。
<link rel = "styleSheet" type = "text/css" href = "/css/main-app-4v371326bb93ce4b61853a309b69b33.css" rel = "external nofollow">
バージョン番号
次の構成をプロパティファイルに追加します。
spring.resources.chain.strategy.fixed.enabled = truespring.resources.chain.strategy.fixed.paths =/js/**、/v1.0.0/** spring.resources.chain.stateg.fixed.version = v1.0.0
ページの使用は次のとおりです。
<script type = "text/javascript" src = "$ {urls.getforlookuppath( '/js/main.js')}"> </script>編集後、次のコンテンツになります。
<script type = "text/javascript" src = "/v1.0.0/js/main.js"> </scrip>
どの方法を使用しても、効果を達成することができ、ワークロードは大きすぎません。最適化は無限になり、あなたは完了します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。