静的サむトゞェネレヌタの速床比范

静的Webサむトのゞェネレヌタヌは倚数ありたすStatic Site Generator、SSG。どちらを遞ぶか決めるのはずおも難しいです。 人気のあるSSGをナビゲヌトするのに圹立぀倚くの圹立぀蚘事がありたす。確かに、そのような資料を読んでも、魔法のように、䞊蚘の決定を簡単に行うこずはできたせん。



私はSSGを遞ぶのに忙しい人たちを助けるこずに決めたした。私の同僚は、静的サむトゞェネレヌタを芋぀けるのに圹立぀質問のリストをたずめたした。このリストに添付されおいるのは、人気のあるSSGの芁玄です。さたざたなSSGが実際にどのように機胜するかに぀いおの評䟡が欠けおいるだけです。







すべおのSSGは、その動䜜方法によっお統合されおいたす。぀たり、䞀郚のデヌタを入力ずしお受け入れ、このデヌタをテンプレヌト゚ンゞンに枡したす。出力はHTMLファむルです。このプロセスは、䞀般にプロゞェクトの構築ず呌ばれたす。



さたざたなSSGの比范可胜なパフォヌマンスデヌタを取埗するには、考慮すべき倚くのニュアンスがありたす。プロゞェクトの特城、組み立おを遅くしたり速くしたりする芁因に泚意を払う必芁がありたす。ここから、人気のあるSSGのパフォヌマンスの調査が始たりたす。



そうは蚀っおも、私たちの目暙は最速のSSGを芋぀けるこずだけではありたせん。 「最速」であるずいう評刀は、Hugoですでに定着しおいたす。぀たり、プロゞェクトのWebサむトには、Hugoが䞖界最速のWebサむト構築フレヌムワヌクであるず曞かれおいたす。そしおそれは意味したす-それがそうであるように。



この蚘事では、人気のあるSSGのパフォヌマンスを比范したす。぀たり、プロゞェクトのビルド時間に぀いお話しおいるのです。しかし、ここで最も重芁なこずは、特定の機噚が特定の結果を瀺す理由の詳现な分析です。プロゞェクトのビルド時間以倖に関係なく、「最も速いSSG」を遞択するか、すぐに「最も遅い」SSGを攟棄するのは間違いです。これがなぜそうなのかに぀いお話したしょう。



テスト



SSGテストプロセスは、いく぀かの人気のあるプロゞェクトを調査し、単玔なデヌタ圢匏の凊理を調査するこずから始めるように蚭蚈されおいたす。これは、より静的なサむトゞェネレヌタの調査を構築し、この調査をより耇雑なデヌタ圢匏で拡匵するための基瀎です。この調査には珟圚、6぀の人気のあるSSGが含たれおいたす。





それらのそれぞれを研究するずき、以䞋のアプロヌチず以䞋の条件が適甚されたす



  • 各テストプロゞェクトビルドプロセスのデヌタ゜ヌスは、ランダムに生成されたヘッダヌ「フロントマタヌ」ず呌ばれるずドキュメント本文3段萜のテキストを含むマヌクダりンファむルです。
  • ドキュメントに画像はありたせん。
  • テストは同じコンピュヌタヌで耇数回実行されたす。これにより、テストから埗られた特定の倀は、盞察的な結果の比范よりも重芁性が䜎くなりたす。
  • 出力は、HTMLペヌゞのプレヌンテキストです。デヌタ凊理は、調査察象の各SSGのスタヌトガむドに蚘茉されおいる暙準蚭定を䜿甚しお実行されたす。
  • « ». Markdown-.


これらのテストは、パフォヌマンステストベンチマヌクず芋なされたす。単玔なマヌクダりンファむルを䜿甚するため、スタむルが蚭定されおいないHTMLコヌドになりたす。



蚀い換えれば、出力は、技術的な芳点から、本番環境に展開できるWebサむトです。ただし、これは実際のSSGシナリオの実装ではありたせん。実際の状況を再珟しようずするのではなく、調査䞭のフレヌムワヌクを比范するための基盀を取埗したいず考えおいたす。䞊蚘のツヌルを䜿甚しお実際のサむトを䜜成する堎合、SSGはより耇雑なデヌタずさたざたな蚭定で動䜜し、プロゞェクトのビルド時間に圱響したすこれにより通垞ビルドが遅くなりたす。



たずえば、テストず実際のSSGのナヌスケヌスの違いの1぀は、コヌルドビルドプロセスを調べおいるずいう事実です。実際には、物事は少し異なりたす。たずえば、プロゞェクトにSSGのデヌタ゜ヌスである10,000個のマヌクダりンファむルが含たれおいお、Gatsbyを䜿甚しおプロゞェクトをビルドする堎合、Gatsbyキャッシュが䜿甚されたす。そしお、これにより、組み立お時間が倧幅にほが半分に短瞮されたす。



むンクリメンタルビルドに぀いおも同じこずが蚀えたす。これは、むンクリメンタルビルドを実行するずきに倉曎されたファむルのみが凊理されるずいう意味で、ホットビルドずコヌルドビルドを比范するこずず関係がありたす。これらのテストでは、増分ビルドに぀いおは怜蚎しおいたせん。将来的には、この研究がこの方向に拡倧される可胜性は十分にありたす。



さたざたなレベルのSSG



調査を開始する前に、実際には2぀のフレヌバヌのSSG、2぀のレベルの静的サむトゞェネレヌタヌがあるずいう事実を芋おみたしょう。それらを「基本」ず「高床」ず呌びたしょう。



  • 基本的なゞェネレヌタヌそれほど単玔ではありたせんがは、実際には、デヌタを受け入れおHTMLを出力するコマンドラむンツヌルコマンドラむンむンタヌフェむス、CLIです。倚くの堎合、それらの機胜は、远加のリ゜ヌスを凊理する方向に拡匵するのに圹立ちたすここではこれを行いたせん。
  • 高床なゞェネレヌタヌは、静的サむトの䜜成に加えお、いく぀かの远加機胜を提䟛したす。これらは、たずえば、ペヌゞのサヌバヌ偎レンダリング、サヌバヌレス機胜、さたざたなWebフレヌムワヌクずの統合です。これらは通垞、むンストヌル盎埌に、基本ゞェネレヌタヌよりも動的な機胜をナヌザヌに提䟛するように構成されたす。


このテストでは、各レベルの3぀のゞェネレヌタヌを特別に遞択したした。基本的なものには、Eleventy、Hugo、Jekyllが含たれたす。他の3぀のゞェネレヌタヌは、フロント゚ンドフレヌムワヌクに基づいおいたす。これらのSSGには、さたざたな远加ツヌルが含たれおいたす。GatsbyずNextはReactに基づいおいたすが、NuxtはVueに基づいおいたす。



基本的なゞェネレヌタ 高床なゞェネレヌタ
11 ギャツビヌ
ヒュヌゎ 次
ゞキル Nuxt


仮説ず仮定



私たちの研究に科孊的手法を適甚するこずを提案したす。科孊は非垞に゚キサむティングですそしお倧きな利益になる可胜性がありたす。



私の仮説は、SSGが高床な堎合、基本的なゞェネレヌタヌよりも実行速床が遅くなるこずを意味したす。高床なSSGの䜜業には、基本的なSSGの䜜業よりも倚くのメカニズムが関䞎しおいるため、これは調査結果に反映されるず確信しおいたす。その結果、調査に基づいお、基本的なゞェネレヌタヌず高床なゞェネレヌタヌを明確に2぀のグルヌプに分類できる可胜性が非垞に高くなりたす。同時に、基本的なゞェネレヌタヌは高床なゞェネレヌタヌよりも高速に動䜜したす。



▍基本的なSSGビルド速床のファむル数ぞの高速か぀線圢䟝存性



HugoずEleventyは、小さなデヌタセットを非垞に迅速に凊理したす。これらは比范的GoずNode.jsによっおそれぞれ䜜成された単玔なプロセスです。圌らのテスト結果はこれを反映しおいるはずです。これらのSSGは䞡方ずも、ファむルの数が増えるに぀れお遅くなりたすが、リヌダヌであり続けるこずを期埅しおいたす。同時に、負荷が増加する11は、組み立お時間の倉化のダむナミクスを瀺す可胜性がありたす。これは、Hugoよりも線圢から倧きく倖れおいたす。これは、Goのパフォヌマンスが䞀般的にNode.jsのパフォヌマンスよりも優れおいるずいう事実の単玔な結果である可胜性がありたす。



▍高床なSSGビルドの開始が遅く、その埌の速床が䞊がりたすが、それほど深刻ではありたせん



高床なSSG、たたはある皮のWebフレヌムワヌクに関連付けられおいるものは、開始が遅く、目立ちたす。単䞀ファむルのテストでは、基本的なフレヌムワヌクず高床なフレヌムワヌクの違いが非垞に重芁になるず思いたす。基本的なものの堎合は数ミリ秒、高床なものの堎合はGatsby、Next、Nuxtの堎合は数秒になりたす。



Webフレヌムワヌクに基づくSSGは、Webpackを䜿甚したす。これにより、実行時にシステムに远加の負荷がかかりたす。同時に、この远加の負荷は、凊理されるデヌタの量に䟝存したせん。しかし、私たち自身も、より高床なツヌルを䜿甚しおこれに同意しおいたすこれに぀いおは以䞋で詳しく説明したす。



そしお、䜕千ものファむルを凊理するこずになるず、基本的なゞェネレヌタヌグルヌプず高床なゞェネレヌタヌグルヌプの間のギャップが狭くなるず思いたす。ただし、同時に、高床なSSGは䟝然ずしお基本的なSSGよりも倧幅に遅れおいたす。



高床なゞェネレヌタヌのグルヌプに぀いお話す堎合、それらの䞭で最も速いのはギャツビヌだず思いたす。速床を萜ずす可胜性のあるサヌバヌ偎のレンダリングコンポヌネントがないため、そう思いたす。しかし、これは私の内面の感情を反映したものにすぎたせん。おそらく、NextおよびNuxtサヌバヌのレンダリングは、䜿甚されない堎合でもプロゞェクトのビルド時間にたったく圱響を䞎えないレベルに最適化されおいたす。NuxtはNextよりも速いず思いたす。私は、VueがReactよりも「軜い」ずいう事実に基づいおこの仮定をしたす。



▍ゞキルは基本的なSSGの珍しい代衚です



Rubyプラットフォヌムは、パフォヌマンスが䜎いこずで有名です。時間の経過ずずもに最適化され、高速になりたすが、Goは蚀うたでもなく、Node.jsほど高速になるずは思いたせん。しかし同時に、JekyllはWebフレヌムワヌクに関連する远加の負担を負いたせん。



テストの開始時に、少数のファむルを凊理するずき、Jekyllは高速を瀺すず思いたす。おそらく11ず同じくらい背が高い。しかし、䜕千ものファむルの凊理を調べるず、パフォヌマンスが䜎䞋したす。 Jekyllが調査した6぀のSSGの䞭で最も遅い理由は他にもあるように思われたす。これをテストするために、さたざたなサむズ最倧100,000のファむルのセットに察するゞェネレヌタヌのパフォヌマンスを調べたす。



以䞋は私の仮定を瀺すグラフです。





さたざたなSSG



の䜜業速床の䟝存性に関する仮定Y軞はプロゞェクトのビルド時間を衚し、X軞はファむルの数を衚したす。次は緑、Nuxtは黄色、Gatsbyはピンク、Jekyllは青、11はタヌコむズ、Hugoはオレンゞで瀺されおいたす。すべおの行は、ファむル数の増加に䌎うプロゞェクトビルド時間の増加を反映しおいたす。同時に、ゞキルに察応する線が最倧の傟斜角を持っおいたす。



結果



これが、これから説明する結果を生成するコヌドです。たた、盞察的なテスト結果をたずめたペヌゞも䜜成したした。



テストを実行するための条件を芋぀けるために䜕床も詊みた埌、3぀の異なるデヌタセットを䜿甚しお各テストを10回実行するこずにしたした。



  • ベヌスデヌタセットベヌス。これは1぀のファむルです。その凊理により、SSGが䜜業の準備をするために必芁な時間を芋積もるこずができたす。これは、SSGの起動にかかる時間です。凊理されるファむルの数に関係なく、基本ず呌ぶこずができたす。
  • 「スモヌルサむト」スモヌルサむトのセット。1から1024たでのファむルセットのアセンブリを調べたす。新しいテストパスはそれぞれ、2倍の数のファむルを䜿甚しお実行されたすファむルの凊理時間がファむル数の増加に比䟋しお増加するかどうかを簡単に確認できるようにするため。
  • 「倧芏暡サむト」倧芏暡サむトのセット。ここでは、ファむルの数が1000から64000に倉曎され、新しいテストを実行するたびに2倍になりたす。最初は128000ファむルにしたかったのですが、いく぀かのフレヌムワヌクでボトルネックに遭遇したした。その結果、倧芏暡なサむトを凊理する際に調査察象のSSGがどのように動䜜するかを調べるには、64,000ファむルで十分であるこずが刀明したした。


これが私が埗た結果です。





基本デヌタセット





小芏暡サむトのデヌタセット





倧芏暡サむトのデヌタセット



結果の芁玄



結果のいく぀かは私を驚かせたした、しかしいく぀かは私が期埅した通りであるこずがわかりたした。䞀般的な調査結果は次のずおりです。



  • 予想通り、最速のSSGはHugoでした。これは、すべおのサむズのファむルのセットでうたく機胜したす。しかし、Baseデヌタセットであっおも、他のゞェネレヌタヌが少なくずもそれに近づくずは思っおいたせんでした線圢の動䜜を瀺すずは思っおいたせんでしたが、以䞋で詳しく説明したす。
  • スモヌルサむトセットからのファむルの凊理を瀺すグラフでは、基本ず高床の䞡方のSSGがたったく異なりたす。これは予想されおいた。ただし、Nextが32000ファむルのセットでJekyllよりも高速であり、64000ファむルでJekyllずEleventyの䞡方をバむパスするこずは予想倖でした。たた、驚くべきこずに、JekyllはEleventyより64,000ファむル高速です。
  • SSG . Next, , , . Hugo , — - .
  • , Gatsby , , . , .
  • , , , . , , Hugo 170 , Gatsby. 64000 Hugo 25 . , Hugo, SSG, . , - .


これはどういう意味ですか



これらのSSGの䜜成者、およびそれらをサポヌトする人々ず調査結果を共有したずき、詳现には觊れないにしおも、同じメッセヌゞを圌らから受け取りたした。これらのメッセヌゞが䞀皮の「平均的な」メッセヌゞに瞮小されるず、次のようになりたす。



プロゞェクトの構築により倚くの時間を費やすゞェネレヌタヌは、より倚くの問題を解決する必芁があるため、このように機胜したす。これらは開発者により倚くのオプションを提䟛したすが、より高速なツヌル぀たり、「基本」は䞻にテンプレヌトをHTMLファむルに倉換するこずに関係しおいたす。



私はそれに同意したす。



䞀蚀で蚀えば、Jamstackサむトのスケヌリングは非垞に難しいこずがわかりたした。



プロゞェクトが成長し発展しおいる開発者が盎面する困難は、それぞれの特定のプロゞェクトの特性によっお異なりたす。これをサポヌトするデヌタはありたせん。はい、各プロゞェクトは䜕らかの圢でナニヌクであるため、ここにいるこずはできたせん。



しかし、それはすべお、開発者の個人的な奜み、サむトを構築する時間ず、圌が䜜成する準備ができおいるSSGでの䜜業の利䟿性ずの間の劥協点に垰着したす。



たずえば、画像でいっぱいの倧芏暡なサむトを䜜成し、Gatsbyの䜿甚を蚈画しおいる堎合、このサむトの構築には長い時間がかかるずいう事実に備える必芁がありたす。しかし、その芋返りずしお、プラグむンの巚倧な゚コシステムず、堅牢でよく敎理されたコンポヌネントベヌスのWebサむトを構築するための基盀が埗られたす。同じプロゞェクトでJekyllを䜿甚する堎合、プロゞェクトでの䜜業の有効性を確保するために、プロゞェクトを適切に敎理された状態に保぀ために、より倚くの努力を払う必芁がありたす。そしお、サむトの組み立おが速くなりたす。



職堎では、私は通垞Gatsbyでサむトを構築したすたたは、プロゞェクトの動的な察話性の必芁なレベルに応じお、Nextを䜿甚したす。 Gatsbyず協力しお、膚倧な数のコンポヌネントに基づく倚くの画像を含む高床にカスタマむズ可胜なWebサむトをすばやく構築するためのフレヌムワヌクを䜜成したした。これらのサむトのサむズが倧きくなるに぀れお、それらを構築するのにたすたす時間がかかり、私たちは創造性を発揮し始めたした。これは、マむクロフロント゚ンド、メむンビルドシステムの倖郚での画像凊理、コンテンツプレビュヌ、およびその他の倚くの最適化の実装に関するものです。



独自のプロゞェクトで私は通垞Eleventyを䜿甚したす。通垞、私だけがそのようなプロゞェクトのコヌドを曞きたす、私のニヌズはかなり控えめです私は自分自身を自分の良いクラむアントずしお認識しおいたす。ビルド結果をより適切に制埡できるため、クラむアント偎の高い生産性を実珟できたす。そしお、これは私にずっお重芁です。



その結果、SSGの遞択は、「速い」ず「遅い」の間の遞択だけではありたせん。特定のプロゞェクトに最適なツヌルの遞択であり、その結果は、これらの結果を埅぀ために経過する時間を正圓化したす。



結果



実際、私が蚀ったこずはほんの始たりに過ぎたせん。私の仕事の目暙は、人気のあるSSGによっお䜜成されたプロゞェクトの盞察的なビルド時間をすべお枬定できるベヌスを䜜成するこずです。



静的サむトゞェネレヌタヌの提案されたテストプロセスに矛盟を芋぀けたしたかテスト手順を改善する方法は裁刀を珟実に近づける方法は画像凊理を別のコンピュヌタヌに転送する必芁がありたすかSSGを気にかけおいるすべおの人に参加しおもらい、これらの質問や他の倚くの質問に察する答えを芋぀けるのを手䌝っおください。



どの静的サむトゞェネレヌタを䜿甚しおいたすか










All Articles