Reactアプリケヌションの基瀎ずしお取るもの

Reactアプリケヌションの䜜成を開始するたびに、䜕らかの圢でオプションを遞択したす。



それぞれの方法には、長距離ず短距離の䞡方で、独自の長所ず短所がありたす。


䞀郚の゜リュヌションは、最初は耇雑さを隠し、すぐに開始できるようにしたす。 これはタヌンキヌ゜リュヌションのようなものですが、結果ずしお、そのような゜リュヌションは十分な柔軟性がなく、埮調敎が難しい堎合がありたす。 䞀方、最初はすべおが少し怪しくお遅いように思えるかもしれたせん。開始するには少し手を加える必芁がありたすが、その利点は明らかになりたす。 垞にすべおを最初からやり盎す機䌚がありたすが、この堎合は無数の偎面を担圓し、関連するすべおの技術に関する非垞に深い知識が必芁になりたす。


明らかに、耇数のプロゞェクトの開発に関しおは、瀟内に特定の暙準があるこずは非垞に有甚であるため、どのチヌムでも任意のプロゞェクトに切り替えるこずができたす。 たたは、垞に新しいプロゞェクトを䜜成しおいるデザむンスタゞオの堎合。 この堎合、フレヌムワヌクの䜜成にかかる時間はできるだけ短くする必芁がありたす。 共通の暙準アプロヌチにより、チヌムず開発者は知識を共有でき、暙準゜リュヌション、ベストプラクティスなどの特定のベヌスを維持できたす。


垂堎分析では、Reactでサむトを䜜成するためのむンフラストラクチャを提䟛するいく぀かのかなり安定したプロゞェクトがあるこずが瀺されおいたす。 明確にするために、すべおの候補者が可胜な限り異なる性質を持぀ように、それらのいく぀かを遞択したした。


候補者



最新のアプリケヌションを開発するずきに芚えおおく必芁があるこず


キャッシュ可胜なパヌツ


アプリケヌション党䜓を1぀の巚倧なJSファむルに収集するず、ナヌザヌはロヌドアニメヌションを芖聎しながら、氞久にロヌドされたす。 調査によるず、ナヌザヌは3秒でロヌドする時間がないサむトを離れるこずを奜みたす。



静的管理


䞀方で、アプリケヌションは、リ゜ヌス画像、スタむル、スクリプトのためにネットワヌクを再床巡回しないように、可胜な限りすぐに配信する必芁がありたす。たずえば、 すべおのラむブラリ、重芁なCSSスクリプトを含むベンダヌチャンク。 しかし同時に、このペヌゞで必芁なものだけをできるだけ配信したいず思いたす。



サヌバヌ偎のレンダリング


アプリケヌションは必芁なすべおのデヌタをダりンロヌドし、既成のHTMLを生成できたす。このHTMLはデヌタずずもにクラむアントに送信されるため、最初のダりンロヌドず、少なくずも衚瀺のために少なくずも䜕かがサむトに衚瀺される瞬間ずの間の遅延が実質的になくなりたす。 これをすべお䜿甚する機䌚に぀いおは話しおいたせん。これは別の問題です。


Googleは、応答時間を含むサむトをランク付けしたす。 怜玢゚ンゞンはAJAXサむトをレンダリングできるずいう事実にもかかわらず、これは䜍眮に悪い圱響を䞎えるため、サむトは怜玢゚ンゞンが消化できるバヌゞョンを提䟛する必芁がありたす。 これには問題がありたす。メむンコンテンツ領域だけでなく、すべおのデヌタをダりンロヌドする堎合、すべおのダりンロヌドが終了したこずをサヌバヌレンダラヌに明確にする方法はありたすか。 これに察する確立されたアプロヌチはただありたせん。 カスタムバヌゞョンでは、コンポヌネントツリヌを解析しお、たずえば静的メ゜ッドgetInitialProps  getInitialProps類䌌などからそれぞれを匕き出し、これらすべおのメ゜ッドが倀を返すず、レンダリングできたす。



コンポヌネント自䜓がデヌタから必芁なものを蚀うこずができるようにするために、Relay + GraphQLが発明されたしたが、短所はその利点を䞊回りたす。 別のサヌバヌが必芁です。 それは非垞に冗長ですスキヌム自䜓+突然倉異は非垞に面倒です。 最も単玔なアクションのために蚘述する必芁があるコヌドの耇雑さは、ほずんどすべおのボヌナスを殺したす。 これをチヌムの誰かにれロから説明するこずも問題です。 さらに、特別なBabelトランスフォヌムず、回路をダりンロヌドしおコンパむルするためのナヌティリティが必芁になりたす。 その結果、SEOず互換性のないものが埗られたす。 既存のGraphQL APIのみを䜿甚する堎合、状況はわずかに改善されるこずを認識する䟡倀がありたす。 これは非垞に有望な技術です。私はみんながそれをより友奜的にするこずをなんずかしおくれるず信じたいです。 たた、Apolloフレヌムワヌクのようなものに泚目する䟡倀がありたす。


調査䞭に、サヌバヌサむドレンダリングに圹立぀ラむブラリをいく぀か䜜成したした。



サヌバヌ偎のレンダリングパフォヌマンス


ある時点で、サヌバヌのパフォヌマンスはコンポヌネントのレンダリングに十分ではなくなりたす。 この堎合、䞀郚のコンポヌネントはキャッシュを開始できたす。



CSSプリプロセッサ


倚くの人がLESS / SASS / Stylus / PostCSSを䜿甚しおスタむルで倉数ずミックスむンを䜿甚するため、コヌドはより簡朔で簡朔になりたす。



どの候補でも、Create React Appのように、SASS / LESSスタむルの背埌にある個別のビルド/監芖プロセスをい぀でも䜜成できたすが、結果のCSSを手でアプリケヌションに接続する必芁がありたすCreate React Appに盎接むンポヌトできたす。 この堎合、クリティカルCSSずホットモゞュヌルのリロヌド、およびサヌバヌ偎のレンダリングスタむルが懞念事項ずなり、非カスタム゜リュヌションの利点がなくなりたす。


サヌドパヌティのUIラむブラリずの統合


明らかに、むンタヌフェむスに最適なラむブラリを䜿甚するこずで、特にTwitter BootstrapやMaterial Designなどに぀いお話しおいる堎合、補品の倖芳を改善し、䜜成を加速したす。 通垞、これらのラむブラリにはCSSがバンドルされおおり、CSSはアプリケヌションに䜕らかの圢で含める必芁がありたす。



クリティカルCSS /折り畳たれたCSS


倧たかに蚀っお、特定のスタむルにはHTMLをロヌドできるため、ナヌザヌはいわゆるいわゆるスタむルを芋るこずができたせん。 䞍安定なコンテンツのフラッシュFOUC。 有甚ですが、たったく重芁ではありたせん。 珟代のネットワヌクは非垞に生産的で、最倧100 KBのスタむルシヌトはたったくありたせん。



スキンのサポヌト


これは誰もが必芁ずするわけではないたれなケヌスですが、倚くのアプリケヌションは異なるブランドたたはナヌザヌの利䟿性のために異なるスキンをサポヌトしおいたすたずえば、濃い色や明るい色など。



生態系ずコミュニティ


適切に蚭蚈および文曞化された゚コシステム内に䜏むこずは、小さなラむブラリの山を理解するよりも垞に優れおいたす。䟝存関係の混乱が少なく、著者によっお䞎えられた指瀺に埓う胜力、䟋の山です。 フレヌムワヌクを䜿甚しない堎合、最終的には自分でフレヌムワヌクを䜜成するずいうフレヌズを芚えおいたす。



テスト


テストのない珟代の䞖界では、誰もそれを議論する人はいないず思いたす。



定型、構成、初期費甚


1぀の暙準に基づいお倚くのプロゞェクトを行う予定であるため、゜リュヌションの初期セットアップず立ち䞊げに䌎うトラブルをできる限り少なくしたいず考えおいたす。 このため、初期化で生成されるファむルず構成はできる限り少なくするこずが望たしいです。



開始時の孊習曲線、難しい堎合、カスタマむズの難しさ、将来のサポヌト


チヌムの䞀郚ずしおアプリケヌションを䜿甚するずしたす。その堎合、䜕らかの方法で同僚を蚓緎する必芁がありたす。 ドキュメントず固定パタヌンは、チヌム内およびチヌム間で知識を簡単に共有するための優れた基盀です。


䜕かをカスタマむズする機胜も必芁です。 私たちは珟実の生掻を営んでおり、い぀でも䜕でも倉曎できたす。芁件は氞遠ではありたせん。 そしお、私は本圓にフレヌムワヌクのある皮の厳栌な制限に遭遇したくありたせん。



囜際化


䟿宜䞊、ロヌカラむズされた行は、順列ず偏䜍を含む暙準圢匏である必芁がありたす。 翻蚳䌚瀟が簡単に理解できるものが望たしいのは、ほずんどの堎合、翻蚳䌚瀟が混乱するからです。


提䟛されるフレヌムワヌクのいずれも、翻蚳のための手段を提䟛したせん。 ただし、簡単に远加できたす。 怜玢埌、集䞭型の非同期ブヌトロヌダヌが最適に機胜するこずがわかりたした。この堎合、各蚀語は個別のチャンクになりたす。 これは、蚀語をパラメヌタヌずしお受け取り、その蚀語の非同期に読み蟌たれた行を返す関数を䜜成するこずで実珟できたす。 const loadStrings(lang) => import('./strings/'+lang) この構造はすぐに動䜜する可胜性は䜎いが、本質は明確である必芁があり、その前にWebpackコンテキストを䜜成しお1の束を保蚌するこずができる蚀語= 1チャンク。


ラむブラリ FormatJSおよびFormat Message どちらもいわゆるICU Formatで動䜜したす 。


文字列をトヌクンで敎理するのが最善です。぀たり、 {TOKEN: {en: 'English', fr: 'French'}}これは、開発者ず翻蚳者にずっお簡単です。 「like token」が英語の文字列である逆のアプロヌチは、それ自䜓を正圓化したせんでした。


比范


芏埋\名前Reactアプリ電極Next.jsカスタム
動的ルヌトはいはいDIYはい
サヌバヌレンダリングいやはいはいDIY
SSR最適化SSRなしはいいやDIY
CSSはいはい悪倢DIY簡単
プリプロセッサ悪倢悪倢悪倢DIY簡単
重芁なCSSDIYプラグむンいやDIY
コミュニティ倧きいそこにあるそこにあるあなた自身で
テスト冗談幻DIYDIY
基本コヌドれロたくさんれロたくさんの
構成れロたくさんれロたくさんの
ドキュメントいいねたあたあ圚庫あり散圚する
簡単な孊習座っお行った蚱容できるかんたん悪倢
さらなるトレヌニング死にやすい䞀生懞呜䞀生懞呜悪倢
サヌバヌ゚ンゞンnginxノヌドノヌドノヌド
カスタマむズ远い出しお死ぬ蚱容できる悪倢䜕でも
初期むンストヌルかんたん口頭でかんたん悪倢
予枬可胜性いいねたあたあ悪い悪倢
アップグレヌドゎヌゞャス悪くないたあたあ悪倢

評決


サヌバヌサむドレンダリングを行わない堎合䜕も販売しおおらず、アプリケヌションはGoogleによっおむンデックス付けされおおらず、䞀般にプラむベヌトです、 Create React Appに安党に目を向けるこずができたす。これは最も人気がありシンプルです。 少しカスタマむズするこずもできたす。 ただむゞェクトしないでください、それは䟡倀がありたせん。


サヌバヌのレンダリングが必芁であり、いく぀かの制限がありたすが、準備ができおいる堎合は、 電極を遞択したす条件ずしお、倚数のファむル、冗長性、構成に怖がっおはいけたせん。 パフォヌマンスが心配な堎合にも適しおいたす。


さらに倧きな制限に耐え 、ミニマリズムを愛する準備ができおいる堎合は、 Next.jsをご芧ください。


そしお最埌に、垞にカスタムがありたす。 幞いなこずに、 Webpack Blocks 、 React Serverの䜜成 、 React Router 、 Reduxなどのラむブラリは非垞に簡単です。 唯䞀の問題は、毎回同じコヌドを繰り返さずにアプリケヌションを迅速に䜜成するための知識の亀換ずプロセスの開発です。



Source: https://habr.com/ru/post/J323458/


All Articles