「ノヌドず゚クスプレスを䜿甚したWeb開発」ずいう本。JavaScriptスタックのフル掻甚。第2版​​」

画像こんにちは䜏民 Node / JavaScript開発スタックの䞻芁コンポヌネントであるExpressを䜿甚しお動的なWebアプリケヌションを構築したす。 Ethan Brownが、完党なアプリケヌションを構築しおExpress5を操䜜する方法に぀いお説明したす。この本は、サヌバヌレンダリングからシングルペヌゞアプリケヌションSPAを操䜜するためのAPI開発たで、すべおの段階ずコンポヌネントをカバヌしおいたす。 Expressは、確立されたフレヌムワヌクずフレヌムワヌクがたったくないこずの䞭間にあるため、アヌキテクチャの遞択にある皋床の自由がありたす。この本は、Expressを䜿甚するフロント゚ンドおよびバック゚ンドの開発者に最適な゜リュヌションを提䟛したす。 Web開発を新しい角床から芋るこずを孊びたしょう -動的デヌタを衚瀺するためのテンプレヌトシステムを䜜成したす。リク゚ストオブゞェクトずレスポンスオブゞェクト、ミドルりェア、およびURLルヌティングの詳现をご芧ください。-実皌働環境のシミュレヌションを䜜成し、そこでテストしたす。 -MongoDBを䜿甚したドキュメントデヌタベヌスおよびPostgreSQLを䜿甚したリレヌショナルデヌタベヌスでの情報の長期保存に぀いお孊習したす。 -APIのおかげで、他のプログラムずリ゜ヌスを共有できたす。 -認蚌、承認、HTTPSを䜿甚しお安党なアプリケヌションを構築したす。 -゜ヌシャルネットワヌクず統合し、ゞオロケヌションなどを可胜にしたす。 -アプリケヌションを起動および保守するための蚈画を実装したす。 -重芁なデバッグスキルを習埗したす。-認蚌、承認、HTTPSを䜿甚しお安党なアプリケヌションを構築したす。 -゜ヌシャルネットワヌクず統合し、ゞオロケヌションなどを可胜にしたす。 -アプリケヌションを起動および保守するための蚈画を実装したす。 -重芁なデバッグスキルを習埗したす。-認蚌、承認、HTTPSを䜿甚しお安党なアプリケヌションを構築したす。 -゜ヌシャルネットワヌクず統合し、ゞオロケヌションなどを可胜にしたす。 -アプリケヌションを起動および保守するための蚈画を実装したす。 -重芁なデバッグスキルを習埗したす。



コンテンツ配信ネットワヌク



サむトを本番環境に移行するずきは、静的アセットをむンタヌネット䞊のどこかにアップロヌドする必芁がありたす。すべおのダむナミックHTMLが生成される同じサヌバヌにそれらを配眮するこずに慣れおいるかもしれたせん。これたでの䟋でも、このアプロヌチを䜿甚しおいたす。nodemeadowlark.jsコマンドによっお起動されるNode / Expressサヌバヌは、あらゆる皮類のHTMLリ゜ヌスず静的リ゜ヌスの䞡方を提䟛したす。ただし、サむトのパフォヌマンスを最適化するたたは将来的に維持する堎合は、コンテンツ配信ネットワヌクCDNで静的リ゜ヌスをホストする機胜が必芁になりたす。CDNは、静的リ゜ヌスを配信するために最適化されたサヌバヌです。ブラりザのキャッシュを有効にする特別なヘッダヌこれに぀いおはすぐに詳しく説明したすを䜿甚したす。



さらに、CDNには地理的最適化゚ッゞキャッシングず呌ばれるこずもありたすを含めるこずができたす。これは、静的コンテンツがクラむアントに最も近いサヌバヌから配信されるこずを意味したす。むンタヌネットは非垞に高速ですがもちろん、光速では機胜したせんが、それに近い速床で動䜜したす、デヌタは数千キロメヌトルよりも数癟キロメヌトルの距離からさらに高速に配信されたす。個々のケヌスで時間の節玄は重芁ではありたせんが、ナヌザヌ、リク゚スト、およびリ゜ヌスの数を掛けるず、すぐに印象的なものになりたす。



ほずんどの静的リ゜ヌスはHTMLビュヌで参照されたす



 <link>   CSS-, <script> —   JavaScript,  <img>    ,      
      
      





CSS、通垞はbackground-imageプロパティに静的リンクを蚭定するのが䞀般的な方法です。最埌に、静的リ゜ヌスはJavaScriptで参照されるこずがありたす。たずえば、JavaScriptコヌドはタグを動的に倉曎たたは挿入できたす。



<img>
      
      





たたはbackground-imageプロパティ。



CDNを䜿甚する堎合は、クロスドメむンリ゜ヌスシェアリングCORSに぀いお心配する必芁はありたせん。HTMLにロヌドされた倖郚リ゜ヌスはCORSルヌルの察象ではありたせん。Ajaxを介しおロヌドされたリ゜ヌスに察しおCORSを有効にする必芁があるだけです第15章を参照。


CDNの蚭蚈CDNの



䜿甚方法は、サむトのアヌキテクチャによっお異なりたす。ほずんどのコンテンツ配信ネットワヌクでは、ルヌティングルヌルを蚭定しお、着信芁求の送信先を決定できたす。かなり耇雑なルヌティングルヌルを蚭定できたすが、通垞は、静的リ゜ヌス芁求を1぀の堎所通垞はCDNによっお提䟛されたすに送信し、動的゚ンドポむント芁求動的ペヌゞたたはAPI゚ンドポむントを別の堎所に送信したす。



CDNの遞択ず構成は、ここでは取り䞊げない広倧なトピックですが、遞択したCDNのセットアップに圹立぀いく぀かの基本的な情報を提䟛したす。



アプリケヌションを構造化するための最も簡単なアプロヌチは、動的リ゜ヌスず静的リ゜ヌスを簡単に区別できるようにするこずです。これにより、CDNルヌティングルヌルが可胜な限りシンプルになりたす。これはサブドメむンを䜿甚しお実珟できたすがたずえば、動的リ゜ヌスはmeadowlark.comから提䟛され、静的リ゜ヌスはstatic.meadowlark.comから提䟛されたす、このアプロヌチはさらに耇雑になり、ロヌカル開発を耇雑にしたす。より簡単な方法は、リク゚ストパスを䜿甚するこずです。たずえば、/ public /で始たるものはすべお静的リ゜ヌスであり、それ以倖はすべお動的です。 Expressでコンテンツを生成する堎合、たたはExpressを䜿甚しおシングルペヌゞアプリケヌションのAPIを提䟛する堎合は、アプロヌチが異なる堎合がありたす。



サヌバヌ偎レンダリングWebサむト



Expressを䜿甚しおダむナミックHTMLをレンダリングする堎合぀たり、/ static /で始たるものはすべお静的リ゜ヌスであり、それ以倖はすべお動的です。このアプロヌチでは、動的に生成されたすべおのURLが垌望どおりになりもちろん、/ static /で始たらない限り、すべおの静的リ゜ヌスのプレフィックスは/ static /になりたす。



<img src="/static/img/meadowlark-logo-1.png" alt="Meadowlark Logo">
   <a href="/about">Meadowlark Travel</a>.
      
      





この本では、これたで、すべおの静的リ゜ヌスがルヌトディレクトリに配眮されおいるかのように、静的ミドルりェアを䜿甚しおきたした。したがっお、静的リ゜ヌスfoo.pngをパブリックフォルダヌに配眮するこずにより、/ static /foo.pngではなくURLパス/foo.pngで参照したす。もちろん、既存のパブリックディレクトリ内に静的サブディレクトリを䜜成するこずは可胜であり、/ public / static / foo.pngのURLは/static/foo.pngになりたすが、これはあたり賢明ではありたせん。幞い、静的ミドルりェアを䜿甚するず、app.useを呌び出すずきに別のパスを指定するこずでこれを回避できたす。



app.use('/static', express.static('public'))
      
      





これで、開発環境では、悪甚ず同じURL構造を䜿甚できたす。パブリックフォルダヌずCDNのコンテンツが同期しおいる堎合は、䞡方の堎所で静的リ゜ヌスを参照し、開発ず本番をシヌムレスに切り替えるこずができたす。



CDNのルヌティングを蚭定する堎合CDNのドキュメントを参照する必芁がありたす、ルヌティングは次のようになりたす。



画像


シングルペヌゞアプリケヌション



シングルペヌゞアプリケヌションは通垞、サヌバヌ偎でレンダリングされたWebサむトの反察です。APIのみがサヌバヌに枡されたずえば、/ apiで始たるリク゚スト、それ以倖はすべお静的ファむルストレヌゞに枡されたす。



第16章では、CDNにロヌドされるすべおの静的リ゜ヌスを含むアプリケヌションを操䜜するためのアセンブリを䜜成できるこずを確認したした。次に、APIルヌティングの蚭定が正しいこずを確認する必芁がありたす。このようにしお、次のルヌティングが行われたす。



画像


開発から本番環境にシヌムレスに移行するようにアプリケヌションを構造化する方法を孊習したので、キャッシングで実際に䜕が起こり、パフォヌマンスを最適化するかを芋おみたしょう。



静的リ゜ヌスのキャッシュ静的リ゜ヌス



を提䟛するためにExpressたたはCDNを䜿甚しおいるかどうかに関係なく、ブラりザヌが静的リ゜ヌスをキャッシュするタむミングず方法を決定するために䜿甚するHTTP芁求ヘッダヌを理解する䟡倀がありたす。



-有効期限/キャッシュ制埡。これらの2぀のヘッダヌは、リ゜ヌスをキャッシュできる最倧時間をブラりザに通知したす。ブラりザはそれらを真剣に受け止めたす。1か月間䜕かを保存するように指瀺した堎合、キャッシュに残っおいる限り、1か月間は再床ダりンロヌドされたせん。制埡できない理由により、ブラりザが有効期限前にキャッシュから画像を削陀する堎合があるこずを理解するこずが重芁です。たずえば、ナヌザヌが手動でキャッシュをクリアしたり、ブラりザがリ゜ヌスを削陀しお、ナヌザヌがより頻繁にアクセスするリ゜ヌス甚のスペヌスを確保したりできたす。これらのヘッダヌの1぀だけが必芁です。 Expiresはより広くサポヌトされおいるため、䜿甚するこずをお勧めしたす。リ゜ヌスがキャッシュ内にあり、ただ有効期限が切れおいない堎合は、ブラりザはGETリク゚ストをたったく実行しないため、特にモバむルデバむスでのパフォヌマンスが向䞊したす。



-最終倉曎/ ETag。䞀皮のバヌゞョン管理を提䟛したす。ブラりザがリ゜ヌスをチェックアりトする必芁がある堎合、コンテンツをロヌドする前にそれらのタグをチェックしたす。サヌバヌぞのGETリク゚ストは匕き続き実行されたすが、これらのヘッダヌで返された倀が、リ゜ヌスが倉曎されおいないこずをブラりザヌに瀺しおいる堎合、ブラりザヌはファむルのダりンロヌドに進みたせん。名前が瀺すように、Last-Modifiedを䜿甚するず、アセットが最埌に倉曎された日付を蚭定できたす。 ETagを䜿甚するず、任意の文字列、通垞はバヌゞョン文字列たたはコンテンツハッシュを䜿甚できたす。



静的リ゜ヌスを発行するずきは、ExpiresヘッダヌずLast-ModifiedたたはETagのいずれかを䜿甚したす。 Expressの組み蟌み静的ミドルりェアはCache-Controlをむンストヌルしたすが、Last-ModifiedもETagも凊理したせん。したがっお、開発には適しおいたすが、運甚には適しおいたせん。



Amazon CloudFront、Microsoft Azure、Fastly、Cloudflare、Akamai、StackPathなどの静的アセットをCDNでホストするこずを遞択した堎合、ボヌナスが埗られたす。これらの詳现のほずんどは自動的に凊理されたす。これらのサヌビスのデフォルト蚭定も問題ありたせんが、埮調敎を行うこずができたす。



静的コンテンツの倉曎



キャッシュはサむトのパフォヌマンスを倧幅に向䞊させたすが、結果がないわけではありたせん。特に、静的リ゜ヌスのいずれかが倉曎された堎合、ブラりザのキャッシュバヌゞョンが期限切れになるたで、クラむアントに倉曎が衚瀺されない堎合がありたす。 Googleでは、1か月、できれば1幎間のキャッシュを掚奚しおいたす。同じブラりザから毎日サむトにアクセスするナヌザヌを想像しおみおください。圌は1幎埌にのみあなたの曎新を芋るこずができたす



明らかに、これは望たしい状況ではありたせんが、ナヌザヌにキャッシュをクリアするように指瀺するこずはできたせん。この問題の解決策は、キャッシュバスティングを無効にするこずです。このトリックにより、ブラりザがリ゜ヌスをリロヌドするタむミングを制埡できたす。このメ゜ッドは、ファむル名にバヌゞョン情報を远加するだけです。リ゜ヌスを曎新するず、リ゜ヌスの名前が倉曎され、ブラりザはそれをダりンロヌドするこずを認識したす。通垞、これはリ゜ヌスのバヌゞョンを制埡するこずmain.2.cssたたはmain.cssバヌゞョン= 2たたは䜕らかのハッシュを远加するこずmain.e16b7e149dccfcc399e025e0c454bf77.cssず同じです。どちらの方法を䜿甚する堎合でも、リ゜ヌスを曎新するず、その名前が倉曎され、ブラりザヌはリ゜ヌスをロヌドするこずを認識したす。



マルチメディアリ゜ヌスでも同じこずができたす。ロゎ/static/img/meadowlark_logo.pngを芋おみたしょう。保持期間を1幎に蚭定しおからロゎを倉曎するこずでパフォヌマンスを最倧化するために、CDNに配眮するず、ナヌザヌには1幎間の倉曎が衚瀺されない堎合がありたす。ただし、ロゎの名前を/static/img/meadowlark_logo-1.pngに倉曎し、この倉曎をHTMLに反映するず、新しいリ゜ヌスのように芋えるため、ブラりザヌはロゎをダりンロヌドする必芁がありたす。



create-react-appなどのシングルペヌゞアプリケヌションフレヌムワヌクに萜ち着いた堎合、ビルド段階で、すぐに䜿甚できるリ゜ヌスのアセンブリが䜜成され、ハッシュが远加されたす。



れロから始める堎合は、ビルダヌを確認するこずをお勧めしたすこれは、シングルペヌゞアプリケヌションフレヌムワヌクの内郚にあるものです。 JavaScript、CSS、およびその他の皮類の静的リ゜ヌスは、可胜な限り少ないアセンブリにバンドルされ、結果は可胜な限り最小化されたす。ビルドのカスタマむズは広倧なトピックですが、幞いなこずに、それに関する優れたドキュメントがたくさんありたす。以䞋は、珟圚利甚可胜な最も人気のあるコレクタヌです。



-Webpackhttps://webpack.js.org/。真の進歩を遂げた最初のコレクタヌの1人。圌にはただ倚くの支持者がいたす。それは非垞に耇雑であり、その耇雑さには代償がありたす。孊習曲線は急です。ただし、このパッカヌは基本を孊ぶのに適しおいたす。



-小包https://parceljs.org/。最近登堎し、隒がしい。それは非垞によく文曞化されおおり、非垞に高速であり、そしお最も重芁なこずに、それは最短の孊習曲線を持っおいたす。あなたが仕事を玠早くそしお面倒なく終わらせる必芁があるならば、それは適しおいたす。



-ロヌルアップhttps://rollupjs.org/。 WebpackずParcelの間のどこかにありたす。 Webpackず同様に、堅牢で機胜が豊富です。 Webpackよりも䜿い始めるのは簡単ですが、Parcelほど簡単ではありたせん。



たずめ



その明らかな単玔さのために、静的リ゜ヌスは非垞に面倒です。ただし、それらは蚪問者に送信されるデヌタの倧郚分を占めるため、それらを最適化するために費やされた時間は興味を持っお報われたす。



前述されおいない静的リ゜ヌスの実行可胜な゜リュヌションは、静的リ゜ヌスをCDNに公開し、ビュヌずCSSでリ゜ヌスぞの完党なURLを垞に䜿甚するこずです。このアプロヌチには非垞にシンプルであるずいう利点がありたすが、むンタヌネットにアクセスできない森の小屋で1週間のハッカ゜ンを開催したい堎合は、問題が発生したす。



泚意深い組み立おず瞮小は、アプリケヌションのパフォヌマンスの向䞊が努力を正圓化しない堎合に時間を節玄できるもう1぀の領域です。特に、サむトにJavaScriptファむルが1぀たたは2぀しかなく、すべおのCSSが同じファむルにある堎合は、ビルドを完党にスキップできたすが、実際のアプリケヌションは時間の経過ずずもに倧きくなる傟向がありたす。



静的リ゜ヌスを提䟛するためにどの方法を遞択した堎合でも、それらを個別に、できればCDNにアップロヌドするこずをお勧めしたす。それが面倒だず思われるなら、私はあなたに保蚌したすそれは思ったほど難しくはありたせん。特に、静的リ゜ヌスのある堎所ぞの展開ずアプリケヌションの別の堎所ぞの展開が自動的に行われるように、事前に展開システムに少し時間を費やす堎合。



CDNでのホスティングの費甚が心配な堎合は、珟圚ホスティングに支払っおいる金額を確認するこずをお勧めしたす。ほずんどのホスティングプロバむダヌは、あなたがそれに぀いお知らなくおも、トラフィックに倚額の費甚を請求したす。ただし、突然サむトがスラッシュドットにリストされ、スラッシュドット効果が発生した堎合、たったく予期しないホスティング料金が発生する可胜性がありたす。 CDNホスティングは通垞、䜿甚した分だけ支払うように蚭定されおいたす。たずえば、私が地元の䞭芏暡䌁業向けに運営しおいるサむトは、月に玄20 GBのトラフィックを䜿甚しおいたすが、静的ホスティング料金非垞にメディアが倚いサむトは月にわずか数ドルです。



CDNに静的リ゜ヌスを配眮するこずのメリットは倧きく、そのコストず䞍䟿さは最小限であるため、このパスを遞択するこずを匷くお勧めしたす。



ブラりザの特定のJavaScriptトリックを䜿甚するず、コンパむルされおいないLESSを䜿甚できたす。ただし、このアプロヌチはパフォヌマンスの面で悪圱響をもたらす可胜性があるため、䜿甚するこずはお勧めしたせん。



この本の詳现に぀いおは、出版瀟 のWebサむトを参照しおください

» 目次

» 䜏民向けの抜粋



クヌポンの25割匕 -JavaScript



玙版の本の支払い時に、電子曞籍がe-によっお送信されたす。郵䟿物。



All Articles