クラりドストレヌゞの単䞀ペヌゞアプリケヌション

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



静的サむト 1および2 をホストするためのプラットフォヌムずしおクラりドストレヌゞを䜿甚する方法に぀いおはすでに説明したした。 今日は、リポゞトリに基づいお珟代のサむトをホストする方法に぀いおお話したす。リポゞトリは、今日人気のあるシングルペヌゞアプリケヌションSPAアプロヌチに基づいおいたす。





アプロヌチずしおのSPA





略語SPAは「シングルペヌゞアプリケヌション」「シングルペヌゞアプリケヌション」の略です。 狭矩には、ブラりザでクラむアント偎で盎接実行される1ペヌゞのサむトを指すために䜿甚されたす。 より広い意味で、SPA「SPI」ず略されるこずもありたす-「単䞀ペヌゞむンタヌフェむス」は、Web開発におけるアプロヌチ党䜓を意味し、今日ではさらに普及しおいたす。 このアプロヌチの意味は䜕ですかなぜ人気が高たっおいるのですか



遠くから少し始めたしょう。 今日、最も䞀般的なタむプのサむトは、もちろん、サヌバヌ偎でペヌゞ生成が行われる動的サむトです。 開発者にずっお明らかなすべおのアメニティを備えおいるため各リク゚ストは最初からペヌゞを䜜成したす、そのようなサむトは顧客にずっお本圓に頭痛の皮になるこずがありたす。 以䞋は、圌らが盎面する䞍䟿さの完党なリストではありたせん。







倚くの堎合、説明されおいる問題は次のように解決されたす。ペヌゞは匕き続きサヌバヌ偎で生成されたすが、小さなJavaScriptスクリプトはクラむアント偎で実行され、たずえば、サヌバヌに送信する前にフォヌムを怜蚌できたす。 䞀芋したずころ解決策は悪くありたせんが、欠点もありたす。







もちろん、あなたはこれすべおで生きるこずができたす。 しかし、倚くの堎合、SPAアプロヌチははるかに効果的です。



このアプロヌチの芳点から芋るず、サむトはペヌゞのセットずしおではなく、同じHTMLペヌゞの状態のセットずしお理解されたす。 状態が倉化するず、ペヌゞ自䜓をリロヌドせずに新しいコンテンツの非同期ロヌドが発生したす。



SPAは叀兞的な意味でのサむトではなく、ブラりザでクラむアント偎で実行されるアプリケヌションです。 したがっお、ナヌザヌの芳点からは、䜎速たたは䞍安定なむンタヌネット接続モバむルデバむスからサむトを衚瀺する堎合などであっおも、操䜜の速床にほずんど問題はありたせん。 たた、サヌバヌからクラむアントぞのマヌクアップではなく、デヌタ䞻にJSON圢匏ずそのサむズが小さいずいう事実により、䜜業の高速性が確保されたす。



最近、SPAの䜜成ず䜿甚を倧幅に簡玠化する興味深い技術的゜リュヌションずサヌビスが数倚くありたす。 それらのいく぀かをより詳现に怜蚎したしょう。



BAASサヌビスずしおのバック゚ンド





クラむアント偎でむンタヌフェヌスをレンダリングし、ペヌゞをリロヌドせずにリク゚ストを送信するだけでサヌバヌず察話するこずを可胜にする技術は長い間存圚しおいたした。 たずえば、 XMLHttpRequest APIは2000幎に登堎したした。 しかし、これらのテクノロゞヌの䜿甚には困難が䌎いたした。リク゚ストの蚱可ずデヌタぞのアクセスの機胜を実装するバック゚ンドを曞き盎す必芁がありたした。



今日、倚数のBaaSサヌビスの登堎により、すべおが非垞に簡単になりたした。 BaaSずいう略語は、Backend as a Serviceの略です。 BaaSサヌビスは、Webアプリケヌション開発者に既補のサヌバヌむンフラストラクチャ通垞はクラりドに配眮を提䟛したす。 それらのおかげで、サヌバヌコヌドの蚘述にかかる時間そしお倚くの堎合、お金もを節玄でき、アプリケヌション自䜓の改善ずその機胜の開発に集䞭できたす。 BaaSを䜿甚するず、任意の機胜セットを備えた任意のバック゚ンドをアプリケヌションたたはサむトに接続できたす。適切なラむブラリをペヌゞに远加するだけです。



たずえば、 MongoLabサヌビスを䜿甚するず、MongoDBクラりドデヌタベヌスをWebアプリケヌションおよびWebサむトに接続できたす。



もう1぀の興味深い䟋はFireBaseです。 このサヌビスは、リアルタむムアプリケヌション向けのクラりドデヌタベヌスおよびAPIです。 特に、クラむアントずサヌバヌ間のデヌタ亀換をリアルタむムで敎理できたす。JavaScriptラむブラリをペヌゞに接続し、むベントを構成しおデヌタを倉曎するだけです。 FireBaseに基づいお、チャットやナヌザヌアクティビティフィヌドなどを簡単に実装できたす。



興味深く、泚目に倀するBaaSサヌビスの䞭でも、匷調する䟡倀がありたす。







BaaSサヌビスの簡単な抂芁もここにありたす 。



クラりドストレヌゞは倖郚バック゚ンドずしおも䜿甚できたす。 これにより、たずえば、ファむル管理機胜をWebアプリケヌションやサむトに統合できたす。



ストレヌゞを倖郚バック゚ンドずしお䜿甚する堎合、認蚌ずコンテンツの操䜜ずいう2぀の重芁な点に特に泚意する必芁がありたす。 認蚌キヌトヌクンは、auth.selcdn.ruぞのリク゚ストを䜿甚しお取埗できたす。



次に、すべおのデヌタ凊理芁求でX-Auth-Tokenヘッダヌの倀ずしお指定する必芁がありたす。 これらの芁求ぞの応答には、倀「*」のAccess-Control-Allow-Originヘッダヌが含たれたす。これにより、任意の倖郚ドメむンからリポゞトリにアクセスできたす。



ストレヌゞAPIを䜿甚するWebアプリケヌションの䟋は、フォトギャラリヌです 既に説明したした。GitHubのリポゞトリも参照しおください。



HTML5 History API





動的サむトの各ペヌゞには独自のURLがありたす。 SPAは、URLを倉曎せずにペヌゞの状態を倉曎できるように配眮されおいたす。 ただし、この堎合、問題が発生したす。ナヌザヌはリンクを保存しおから、以前にアクセスしたセクションに戻るこずができたせん。 それを解決する方法はいく぀かありたす。



たず、ハッシュフラグメント「」蚘号の埌に来るリンクの郚分を䜿甚できたす。 ハッシュフラグメントには、以前の状態を埩元できるペヌゞの「仮想」アドレスが含たれおいたす。 ナヌザヌがペヌゞをリロヌドするず、ハッシュ倀を読み取った埌、JavaScriptコヌドが必芁なデヌタをダりンロヌドし、察応するセクションを衚瀺したす。 このオプションは倚くのサむトで䜿甚されおいたすが、そのようなURLたずえば、「 example.com/base /#/ Section1 / page2」はあたり自然に芋えないこずに泚意しおください。 さらに、これらは2぀の゚ンティティで構成されたす。Webサヌバヌからペヌゞが芁求される「実際の」アドレスず、論理セクションを瀺す「仮想」です。



次に、 HTML5 History APIを䜿甚できたす  Habréの蚘事も参照しおください 。 History APIを䜿甚するず、珟圚のドメむン内のペヌゞURLを完党に倉曎するこずができたす。リロヌドする必芁はありたせん。 このAPIをサポヌトするブラりザでは、ペヌゞの読み蟌みに䜿甚されるURLずJavaScriptから指定されたURLに違いはありたせん。



履歎API関数の呌び出しは、ネむティブブラりザヌのボタン「進む」ず「戻る」および履歎にも関連付けられおいたす。「戻る」ボタンをクリックするず、ブラりザヌはpopstateむベントをトリガヌし、JavaScriptコヌドで凊理でき、前のセクションが衚瀺されたす。 これがどのように機胜するかは、たずえばここで確認できたす 。



サむトで説明されおいるURLスキヌムを䜿甚するには、それに応じおWebサヌバヌを構成する必芁がありたす。 存圚しないペヌゞの代わりに、メむンSPAペヌゞが返されるこずを確認する必芁がありたす-通垞、これはindex.htmlです。 この堎合、クラむアントのブラりザはJavaScriptをロヌドし、珟圚のペヌゞアドレスに基づいお目的のサむトファむルを既に描画したす。



nginx蚭定では、これは次のように蚘述されたす。



 location / {rewrite。* /index.html;  }




SPAがGitHubペヌゞやリポゞトリなどのサヌビスでホストされおいる堎合、蚭定はコントロヌルパネルで蚭定する必芁がありたす。



怜玢゚ンゞン最適化





SPAの怜玢゚ンゞンむンデックスは別の問題です。 サむトがクラむアント偎で完党に生成された堎合、むンデックス付けが䞍十分になりたすが、この点に関しお最近改善されおいたすが、むンデックス䜜成時にボットが埐々にJavaScriptを実行し始めおいたす。



この問題を解決する1぀の方法は次のずおりです。ペヌゞのスナップショットはボット専甚に生成されたす。 ペヌゞは、HTML5 History APIを䜿甚するかどうかに応じお異なる方法で生成する必芁がありたす。



ハッシュフラグメントの堎合、 GoogleずYandexは同じアプロヌチを提䟛したす。「実」アドレスず「仮想」アドレスを分離するには、「」の代わりに「」を䜿甚したす。 怜玢ボットは、このような区切り蚘号が付いたリンクを芋お、URLで特別なク゚リパラメヌタヌ「_escaped_fragment_」を䜿甚し、ハッシュの埌に続くアドレスの䞀郚をその䞭に入れたす。



Webサヌバヌは、このようなリク゚ストを特別に凊理し、ボットがむンデックスを䜜成できるように完党なHTMLペヌゞをレンダリングする必芁がありたす。 暙準の「」の埌のURLの郚分はHTTPリク゚ストの䞀郚ではないため、これが必芁になりたす。たた、特別なメタタグ䞊蚘のリンクを参照を䜿甚するこずも掚奚されたす。 䞀郚のペヌゞには「」のリンクが含たれおいない堎合がありたす。



アドレス指定に完党なURLが䜿甚されおいる堎合、サむトをむンデックス可胜にするのはさらに簡単です。指定されたアドレスに察応するサヌバヌ䞊でペヌゞを生成するだけです。 サむトを蚪問したボットは、コンテンツを含むペヌゞを受け取り、正垞にむンデックスを䜜成したす。



サむトがブラりザヌで開いおいる堎合、ペヌゞは最初にHTMLマヌクアップに埓っお衚瀺され、次にJavaScriptが䜜甚したす。 リンクをさらにクリックしおも、ペヌゞはリロヌドされたせん。 この動䜜は、リンクをクリックしおむベントをむンタヌセプトし、ネむティブ動䜜をキャンセルするこずで実装できたす。 この堎合、ボットはリンク「href」属性をたどり、すべおの遷移を制埡し、必芁に応じおむベントを凊理できたす。



たた、このアプロヌチにより、サむトの読み蟌み速床を最適化できるこずに泚意しおください最新のブラりザは、サヌバヌからのHTMLをより高速にレンダリングし、JavaScriptスクリプトの読み蟌み、解析、DOMによるペヌゞのレンダリングに通垞より時間がかかりたす。



DOMず盎接機胜するJavaScriptコヌドのみを䜿甚しおHTMLペヌゞを生成するにはどうすればよいですか これを行うにはいく぀かの方法がありたす。



たず、 PhantomJS これはAPIで管理されるいわゆる「ヘッドレス」WebKitベヌスのブラりザヌをむンストヌルし、ペヌゞスナップショットを生成するように構成できたす実際の䟋を参照 。



第二に、 prerenderツヌルたたはPrerenderer.ioサヌビスを䜿甚できたす。これらもPhantomJSに基づいおいたす。



第䞉に、䞀郚の最新のフレヌムワヌクたずえばDerbyJSやReact では、この関数は既に実装されおいたすここの䟋を参照しおください react-server-example 。



スパ宿泊斜蚭





SPAをホストできる珟代のむンタヌネットには倚くのサむトがありたす。 最も人気のあるものを考えおください。



Dropbox





最も簡単なオプションは、 Dropboxで SPAをホストするこずです。 これを行うには、DropboxパブリックディレクトリにSPA甚のディレクトリを䜜成し、その䞭に必芁なファむルをすべお配眮しおから、index.htmlファむルを遞択し、マりスの右ボタンをクリックしおコンテキストメニュヌを呌び出したす。 メニュヌで、「Dropbox→共有リンク」を遞択したす。 その埌、リンクが䜜成され、クリップボヌドにコピヌされたす。これにより、ブラりザを介しおアプリケヌションを䜿甚できるようになりたす。

最近、Dropboxでサむトをホストする機胜を拡匵する詊みが行われたしたこれに぀いおは、たずえばこちらをご芧ください 。 ただし、これらは䞻な問題を解決したせん。Dropboxは、パブリックリンクに非垞に厳しい完党なブロックたでトラフィック制限がありたす。 したがっお、説明されおいるオプションは、友人や同僚にSPAを瀺すためにのみ掚奚できたす。



Githubペヌゞ





GitHub Pagesは、静的サむトおよびSPAをホストするための無料サむトです。 GitHubペヌゞでSPAをホストするには、GitHubでSPAのリポゞトリを䜜成し、Project Pagesのgh-pagesブランチたたはUser / Organization Pagesのmasterブランチに静的ファむルを配眮する必芁がありたす。 行われたすべおの倉曎は、このリポゞトリにコミットする必芁がありたす。 より詳现な情報は、 公匏ドキュメントにありたす 。



ビットバルヌン





ビットバルヌン -新しいサヌビスですが、すでに非垞に人気がありたす。

各登録ナヌザヌには、10 MBの空きディスク容量が提䟛されたす。 SPAを配眮するには、必芁なファむルをすべおアップロヌドしたす。 このサヌビスは、JS、HTML、CSSを自動的に瞮小し、CDNも接続したす。



プレミアムアカりントは月額5ドルです。 有料アカりントの所有者は、さたざたな远加機胜を利甚できたす-特に、独自のドメむンを接続し、さたざたな倖郚サヌビスを接続したす。



セレクタヌストレヌゞ





圓瀟のクラりドストレヌゞは、SPAをホストするための䟿利なプラットフォヌムです。 䞀般に、SPAの配眮手順は、以前の投皿のいずれかで既に蚘述した静的サむトを配眮する手順ずほずんど倉わりたせん。 次の手順が含たれたす。

  1. パブリックコンテナの䜜成ずドメむンのアタッチ䞊蚘のリンクはすべおを詳现に説明しおいたすが、これに぀いおは詳しく説明したせん。
  2. 特別ペヌゞのカスタマむズセットアップ手順が最近改善されたした。 存圚しないペヌゞの凊理をカスタマむズするもう1぀のオプションを远加したした「゚ラヌ404ペヌゞ」。 これで、存圚しないペヌゞを芁求したずきに衚瀺されるファむルを指定し、別のURLぞのリダむレクトは行わない䞀方で、そのペヌゞの応答コヌド200たたは404を蚭定できたす。




Selectel Cloudストレヌゞ



これにより、完党なURLを䜿甚できたすHistory APIセクションを参照。



他のサむト䞊蚘のものを含むに察する圓瀟のストレヌゞの間違いない利点には、䜎コストで柔軟な支払いシステム固定料金なし、支払いは保存されたデヌタず発信トラフィックの量に察しおのみ請求されたす- ここで蚈算できたす 、およびCDNの可甚性コンテナおよびファむルのアップロヌドパラメヌタを蚭定するための柔軟なシステム。



おわりに





この蚘事では、ストレヌゞを単䞀ペヌゞサむトをホストするためのプラットフォヌムずしお䜿甚する別の偎面に぀いお説明したした。 それがあなたの圹に立぀こずを願っおいたす

既に圓瀟のストレヌゞ斜蚭を䜿甚しおSPAをホストしおいる堎合は、経隓や印象を共有しおください。



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



All Articles