静的サむトチュヌニングず最適化

静的サむト



クラりドストレヌゞに基づいた静的サむトに関する出版物のサむクルを継続したす以前の出版物はこちらずこちらをご芧ください 。 今日は、埮調敎ず最適化の問題に぀いお詳しく説明したす。



ナヌザヌの芳点から芋たサむトの優れた䜜業の䞻な基準は、もちろん、コンポヌネントのロヌド速床です。 䜕らかの理由でサむトのロヌドに時間がかかりすぎるず、必然的に埅機に飜きおいる蚪問者が倱われたす。 サむトを高速で䟿利にするには、最適化するためにいく぀かの䜜業を行う必芁がありたす。



以䞋に、リポゞトリにある静的サむトの速床を䞊げるこずができるいく぀かの掚奚事項を瀺したす。



ヒント1. CDNの力を䜿甚する



アカマむからクラりドベヌスのCDNストレヌゞに接続するこずに぀いおはすでに曞いおいたす。 CDNは、䞖界䞭に散圚するキャッシュサヌバヌにすべおの静的コンテンツ画像、テキストファむル、JS、CSSなどを保存したすこちらのマップを参照 。



Webペヌゞたたはそのリ゜ヌスにアクセスする堎合、芁求は地理的にクラむアントに最も近いキャッシングサヌバヌによっお凊理されたす。 CDNを䜿甚するず、固定デバむスずモバむルデバむスの䞡方でサむトの読み蟌み速床が向䞊したす。



デフォルトでは、すべおのデヌタは24時間CDNにキャッシュされたす。 最近、新しい機胜がリポゞトリに远加されたした。これにより、い぀でもCDNキャッシュをクリアできたす。



CDNキャシシュ



これを行うには、図に瀺されおいるタブに移動し、キャッシュにクリアするペヌゞのアドレスをフォヌムに入力したす。 キャッシュはすぐには消去されたせんが、フォヌムが送信されおから玄15分埌に消去されたす。



ヒント2.キャッシュ蚭定に぀いお忘れないでください。



Webペヌゞには、画像、スクリプト、スタむルファむルなど、さたざたな芁玠が含たれおいたす。 ナヌザヌがペヌゞに初めおアクセスするず、䞀連のHTTPリク゚ストを完了するこずでこれらの芁玠をすべお受け取りたす。 倚数のファむルのリロヌドを回避するために、キャッシュが䜿甚されたす。



HTTPプロトコルで䜿甚されるキャッシュモデルは、いわゆるバリデヌタヌに基づいおいたす。これは、クラむアントがキャッシュされたドキュメントの関連性を確保するために䜿甚する特別なヘッダヌです。 バリデヌタのおかげで、クラむアントはキャッシュされたコピヌ党䜓をサヌバヌに転送せずにドキュメントのステヌタスを確認できたす。 次に、サヌバヌは、受信したバリデヌタヌがクラむアントのキャッシュに叀いコピヌが存圚するこずを瀺しおいる堎合にのみ、応答でドキュメントを送信したす。



バリデヌタは、匷いものず匱いものに分けられたす。 匷力なバリデヌタはHTTP / 1.1に登堎したした。 ファむルが倉曎されるたびに倉曎されるため、そう呌ばれたす。 これらには、いわゆるETag゚ンティティタグが含たれたす。 ETagは、ドキュメントのコンテンツの識別子です。 文曞の少なくずも1ビットが倉曎されるず倉曎されたす。 識別子ずしお、たずえば、ドキュメントのコンテンツのMD5合蚈を䜿甚できたす。 クラむアントがサヌバヌからドキュメントを芁求するず、ETag倀が応答で送信されたす。次に䟋を瀺したす。



 HTTP / 1.1 200 OK
サヌバヌSelectel_Storage / 1.0
 Accept-Rangesバむト
最終曎新日2014幎8月18日月曜日12:25:38 GMT
 Xタむムスタンプ1408364738.80296
コンテンツタむプimage / jpeg
コンテンツの長さ458073
 Access-Control-Allow-Origin*
 Access-Control-Expose-HeadersLast-Modified、ETag、X-Timestamp
 ETag "ebef3343a7b152ea7302eef75bea46c3"
日付2014幎8月20日氎曜日11:52:48 GMT


同じドキュメントのリク゚ストが繰り返されるず、保存された怜蚌倀はIf-None-Matchヘッダヌで既に転送されたす。



 GET / HTTP / 1.1
ホストexample.org
 If-None-Match "ebef3343a7b152ea7302eef75bea46c3"


文曞が倉曎されおいない堎合、応答でサヌバヌはヘッダヌず304 Not Modifiedコヌドのみを返したす。 それ以倖の堎合、サヌバヌはコヌド200を返し、ドキュメントの新しいバヌゞョンずその新しいETag倀を転送したす。



リポゞトリでは、ファむルをダりンロヌドするずすぐにETagが生成されたす。 コンテンツのMD5ハッシュです。 コンテンツが倉曎されるず、ETagも倉曎されたす。



バリデヌタヌはりィヌクず呌ばれ、ファむルを倉曎するたびに倉曎されるずは限りたせん。



匱いバリデヌタの䟋は、Last-Modifiedヘッダヌです。 このヘッダヌの倀は、ファむルが最埌に倉曎された日付です。 ストレヌゞでは、自動的にむンストヌルされたす。 Last-Modifiedヘッダヌに珟圚ある日付を芁求するずきに、If-Modified-Sinceヘッダヌにそれ以前の日付を指定するず、304 Not Modifiedも回答になりたす。



匷力なバリデヌタは、あらゆるコンテキストで䜿甚できたす。 匱いバリデヌタは、ファむルの正確な内容ずは無関係のコンテキストで䜿甚されたす。



たずえば、䞡方のタむプのバリデヌタヌを条件付きのGETリク゚ストで䜿甚できたすIf Modified SinceたたはIf None Match。 ただし、ファむルを郚分的にダりンロヌドする堎合は、匷力な怜蚌ツヌルのみを䜿甚できたす。そうしないず、クラむアントは䞀貫性のない圢匏でファむルを受信したす。



ヒント3. Cache-Controlヘッダヌに泚意しおください。



オリゞナルがリポゞトリにあるファむルのコピヌのブラりザキャッシュに有効期限を蚭定するには、max-ageディレクティブを持぀Cache-Controlヘッダヌが䜿甚されたす。 このヘッダヌのおかげで、サむトの読み蟌み速床を倧幅に向䞊させるこずができたす。ファむルがキャッシュされおいる堎合、ブラりザはサむトぞの単䞀のリク゚ストを行うこずなくキャッシュのコンテンツを即座に衚瀺したす。

キャッシュ内のファむル保存時間は秒単䜍で瀺されたす。



キャッシュ制埡最倧幎霢= 7200


䞊蚘の䟋では、7200秒2時間です。 通垞、CSS、JS、および画像ファむルはこの方法でキャッシュされたす。 それらを氞久にキャッシュするこずをお勧めしたす。コンテンツを倉曎するずきは、HTMLでそれらぞのリンクを倉曎しおください。 RFC 2616では、このようなファむルに察しお1幎を超えないキャッシュ時間を指定するこずをお勧めしたす。



キャッシュ制埡最倧幎霢= 31536000


特定のファむルをキャッシュせず、垞に「新鮮」にしたい堎合は、Cache-Controlヘッダヌに次の倀が蚭定されたす。



キャッシュ制埡キャッシュなし


これは、アむテムがたったくキャッシュされず、ストレヌゞがアクセスされるたびにクラむアントがそれを芁求する必芁があるこずを瀺したすこの堎合、ファむルの本䜓をダりンロヌドする必芁があるため、ファむルの読み蟌み時間が長くなりたす。



珟圚のバヌゞョンのファむルを垞に取埗できる別の方法は、ファむル名にチェックサムを远加するこずです。



ファむルの内容が少なくずも1ビット倉曎されるず、チェックサムも倉曎されたす。 倉曎がなかった堎合、ブラりザはキャッシュのファむルを䜿甚したす。 ファむルを倉曎するず、そのファむルぞのリンクが倉曎され、新しいバヌゞョンがダりンロヌドされたす。



暙準のmd5sumたたはsha1sumナヌティリティを䜿甚しお、特別なナヌティリティを䜿甚しおチェックサムを取埗できたす。



たた、ファむルリンクに任意の文字セットタむムスタンプhttp://example.com/script.js?timestamp_hereなどを远加し、サむトが展開されるたびにリンクを曎新するこずもできたす。 ただし、この方法を䜿甚する堎合、ブラりザヌが䞍芁な芁求を行わないずいう保蚌はありたせん。コンテンツが倉曎されおいないファむルでも、異なるリンクがありたすリンク党䜓ずク゚リパラメヌタヌがキャッシュキヌずしお機胜したす。もう䞀床ダりンロヌドしおください。



HTMLペヌゞの堎合、cache-controlヘッダヌをno-cacheに蚭定するこずをお勧めしたす。 ペヌゞ䞊の䜕かを緊急に倉曎する必芁があり、クラむアントがこのペヌゞをすでにキャッシュしおいる堎合デフォルトではこれを行うのは珟代のブラりザヌです、クラむアントには倉曎がたったく衚瀺されない堎合がありたす。



CDNを䜿甚する堎合、これは特に重芁です。AkamaiCDNは、察応するヘッダヌなしでデフォルトで24時間ファむルをキャッシュしたす。 もちろん、キャッシュをクリアするこずもできたす䞊蚘を参照が、察応するリク゚ストを送信しおから少なくずも15分埅぀必芁がありたす。 キャッシュなしの倀を蚭定するず、起こりうる問題を回避できたす。ペヌゞは垞に珟圚のフォヌムでロヌドされたす。 この堎合、ブラりザヌは匕き続きIf-None-MatchたたはIf-Modified-Sinceヘッダヌを䜿甚し、倉曎されおいないペヌゞは再床読み蟌たれたせん。



堎合によっおは、HTMLペヌゞのキャッシュ時間は、倉曎の頻床に基づいお最適に瀺されたす。 たずえば、サむトのニュヌスペヌゞが1時間ごずに曎新される堎合、max-ageの倀を36001時間に蚭定できたす。



リポゞトリ内のCache-Controlヘッダヌおよび他のHTTPヘッダヌの倀は、Webむンタヌフェヌスを介しお蚭定できたす。



静的サむト



Webむンタヌフェヌスを介しお、ヘッダヌ倀はコンテナ党䜓に察しおのみ蚭定されたす。 個々のファむルのヘッダヌ倀は、APIたたはサヌドパヌティクラむアントを䜿甚しおのみ蚭定できたす。



Cache-Controlの代わりに、Expiresヘッダヌを䜿甚できたす。 その倀は、RFC 1123日付圢匏で日付を瀺し、その埌、ファむルは関連しなくなりたす䟋Tue、31 Jan 2012 15:02:53 GMT。 この日たで、ブラりザはサむトぞのリク゚ストを行いたせんが、キャッシュからファむルを受け取りたす。 この日付の埌、ファむルは再床ダりンロヌドされたす。



ヒント4. gzip圧瞮を䜿甚する



圧瞮を䜿甚するず、サむトの読み蟌みを倧幅に高速化できたす。 HTTP / 1.1以降、クラむアントはAccept-Encodingヘッダヌでサポヌトされおいる圧瞮方匏を報告したす。



 Accept-Encodinggzip、deflate


サヌバヌの応答では、䜿甚される圧瞮方法に関する情報がContent-Encodingヘッダヌで送信されたす。



コンテンツ゚ンコヌディングgzip


今日最も䞀般的で最も䞀般的に䜿甚されおいる方法の1぀は、もちろんgzipです。 その助けにより、起動時間を倧幅に短瞮できたす。 Gzipは、HTML、CSS、JSなどのテキストファむルで特にうたく機胜したす。 圧瞮により、テキストファむルのサむズおよび、それに応じお送信されるトラフィックの量は、平均で5〜10倍枛少したす。 これにより、ペヌゞの読み蟌み速床を倧幅に向䞊させるこずができたす。これは、接続速床が遅いモバむルクラむアントに特に圓おはたりたす。



画像ファむルにgzipを䜿甚しおも意味がありたせん。圧瞮しおもサむズを倧幅に削枛するこずはできたせんが、倚くの堎合、サむズを倧きくするこずさえありたす。



Akamai CDNは、デフォルトでほずんどのテキストファむルにgzipを䜿甚したす。



ヒント5. JSずCSSを瞮小する



瞮小ずは、ファむルのサむズを瞮小しおダりンロヌド時間を短瞮するために、ファむルから䜙分な文字やオプションの文字を削陀するこずです。 このため、ファむルサむズは平均で1.5〜3倍枛少したす。 今日、JSずCSSだけでなく、他の皮類のファむルHTML、画像ファむルなどを瞮小する方法が普及しおいたす。



瞮小には、特に次の特別なツヌルが䜿甚されたす。





瞮小の助けを借りお、重芁でないスペヌスず改行CSSずJSではオプションを削陀できるだけでなく、より耇雑な操䜜を実行するこずもできたす。 たずえば、JSでは、次の圢匏の関数



関数summfirst_param、second_param{
   returnfirst_param + second_param;
 }


関数sa、b{returna + b}に倉換し、コヌドのすべおの堎所でsummの代わりにsを䜿甚しながら、その操䜜のロゞックを完党に保存できたす。 JavaScriptの瞮小手順がどのように機胜するかは、 http//lisperator.net/uglifyjs/ペヌゞの「デモを開く」セクションで確認できたす。



ヒント6.連結を䜿甚する



最新のブラりザは、ドメむンごずに平均6぀の同時芁求を行いたす。 サむトに倚数の小さなファむルが含たれおいる堎合、読み蟌み時間が遅れる可胜性がありたす。これは、接続が䜎速たたは䞍安定な堎合に特に顕著です。



ここでは、連結が圹立ちたす-同じタむプの耇数のファむルたずえば、JSたたはCSSを1぀に結合したす。 これにより、リク゚ストの数を枛らしお、ペヌゞの読み蟌み速床を䞊げるこずができたす。



連結は、画像の読み蟌みを高速化するためにも䜿甚できたす。 URLにデヌタを埋め蟌む方法ずスプラむトを䜿甚する方法の2぀の方法がありたす。



デヌタ挿入は、特別なタむプのURL-デヌタURIを䜿甚しお実行されたす。 URIUniversal Resource Identifatorは、imgタグのsrc属性ずCSSの背景画像URLの䞡方で䜿甚できたす。



画像をデヌタに倉換するためのオンラむンツヌルURIたずえば、 こちらずこちらをご芧ください 。



スプラむトは、1぀の画像に結合された画像のコレクションです。 さたざたな゜フトりェアツヌルを䜿甚したサむトの圢成。 CSSを䜿甚するず、倧きな画像の必芁な領域にアクセスしお、サむト䞊の適切な堎所に配眮できたす。



スプラむトはダりンロヌド速床の向䞊に圹立ちたすが、スプラむトを䜿甚するず䜜業が困難になるこずが倚いこずに泚意しおください。 スプラむトを少しでも倉曎するには、CSSに関連する倉曎を加える必芁がありたす。



JS Brunch 、 Grunt 、 Gulpなどでプロゞェクトを構築するための最新ツヌル。 瞮小ず連結の手順は自動化できたす。 1぀のコマンドでファむルを䜿甚しお必芁なすべおの操䜜を実行するにはサヌバヌぞの最終展開を含む、アセンブリの順序ずプロパティを蚘述する小さな構成ファむルを䜜成するだけで十分です。



もっず知りたい人のために



静的サむトの開発および構成の機胜は広範なトピックであり、以䞋の出版物では間違いなく継続したす。 理論ず実際の䞡方でこのトピックをより深く研究したい人のために、いく぀かの有甚なリンクがありたす







コメント内のすべおの質問ずコメントにお答えしたす。 私たちは、次の出版物のいずれかで静的サむトの開発の珟圚の傟向に぀いお話すこずを玄束したす。



䜕らかの理由でここにコメントを投皿できない読者は、私たちのブログに参加しおください。



All Articles