[{"data":1,"prerenderedAt":1516},["ShallowReactive",2],{"page:\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages":3,"all-docs-nav":977},{"id":4,"title":5,"body":6,"breadcrumb":952,"dateModified":962,"datePublished":962,"description":963,"extension":964,"faq":965,"meta":970,"navigation":971,"path":972,"seo":973,"slug":12,"stem":974,"type":975,"__hash__":976},"content\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages\u002Findex.md","Astro vs Eleventy Build Times at 10,000 Pages",{"type":7,"value":8,"toc":935},"minimark",[9,13,17,31,36,68,194,198,278,393,400,404,407,418,435,494,592,604,608,654,665,735,739,742,756,760,763,791,807,811,849,853,856,860,865,868,872,875,879,882,886,889,893,931],[10,11,5],"h1",{"id":12},"astro-vs-eleventy-build-times-at-10000-pages",[14,15,16],"p",{},"At a few hundred pages, every static site generator builds fast enough that the difference does not matter. At ten thousand, it decides how long every pull request waits for its preview, how much each CI run costs, and whether the build fits in a hosted build container at all. Documentation sites reach that size more often than teams expect: API references generated from code, versioned copies, translations and changelogs multiply a few hundred authored pages into thousands of built ones.",[14,18,19,20,25,26,30],{},"This benchmark builds the same documentation corpus with Astro 5 and Eleventy 3 at 1,000, 2,500, 5,000 and 10,000 pages, measuring cold builds, warm builds after a one-page edit, and peak memory. It belongs to ",[21,22,24],"a",{"href":23},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002F","Astro vs Eleventy for Documentation Sites"," and follows the method in ",[21,27,29],{"href":28},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Fhow-to-benchmark-hugo-vs-astro-build-speeds\u002F","How to Benchmark Hugo vs Astro Build Speeds",".",[32,33,35],"h2",{"id":34},"prerequisites-and-method","Prerequisites and Method",[37,38,39,43,51,54],"ul",{},[40,41,42],"li",{},"Corpus: technical documentation pages averaging 1,150 words, with code blocks (syntax highlighted), tables, internal links and front matter; no images processed at build time, to isolate page generation.",[40,44,45,46,50],{},"Generators: Astro 5.x with a content collection and Shiki highlighting; Eleventy 3.x with Nunjucks layouts and ",[47,48,49],"code",{},"@11ty\u002Feleventy-plugin-syntaxhighlight"," (Prism).",[40,52,53],{},"Both sites share the same layout: header, sidebar navigation, table of contents, footer.",[40,55,56,57,60,61,64,65,30],{},"Runner: GitHub Actions ",[47,58,59],{},"ubuntu-latest"," (4 vCPU, 16 GB); ",[47,62,63],{},"hyperfine --warmup 1 --runs 5","; peak memory from ",[47,66,67],{},"\u002Fusr\u002Fbin\u002Ftime -v",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-bash shiki shiki-themes github-light github-dark","for n in 1000 2500 5000 10000; do\n  node scripts\u002Fmake-corpus.mjs $n       # copies\u002Fpermutes real pages to size n\n  hyperfine --warmup 1 --runs 5 --export-json \"astro-$n.json\" 'npx astro build'\n  hyperfine --warmup 1 --runs 5 --export-json \"eleventy-$n.json\" 'npx @11ty\u002Feleventy'\ndone\n","bash","",[47,76,77,112,129,163,188],{"__ignoreMap":74},[78,79,82,86,90,93,97,100,103,106,109],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"szBVR","for",[78,87,89],{"class":88},"sVt8B"," n ",[78,91,92],{"class":84},"in",[78,94,96],{"class":95},"sZZnC"," 1000",[78,98,99],{"class":95}," 2500",[78,101,102],{"class":95}," 5000",[78,104,105],{"class":95}," 10000",[78,107,108],{"class":88},"; ",[78,110,111],{"class":84},"do\n",[78,113,115,119,122,125],{"class":80,"line":114},2,[78,116,118],{"class":117},"sScJk","  node",[78,120,121],{"class":95}," scripts\u002Fmake-corpus.mjs",[78,123,124],{"class":88}," $n       ",[78,126,128],{"class":127},"sJ8bj","# copies\u002Fpermutes real pages to size n\n",[78,130,132,135,139,142,145,148,151,154,157,160],{"class":80,"line":131},3,[78,133,134],{"class":117},"  hyperfine",[78,136,138],{"class":137},"sj4cs"," --warmup",[78,140,141],{"class":137}," 1",[78,143,144],{"class":137}," --runs",[78,146,147],{"class":137}," 5",[78,149,150],{"class":137}," --export-json",[78,152,153],{"class":95}," \"astro-",[78,155,156],{"class":88},"$n",[78,158,159],{"class":95},".json\"",[78,161,162],{"class":95}," 'npx astro build'\n",[78,164,166,168,170,172,174,176,178,181,183,185],{"class":80,"line":165},4,[78,167,134],{"class":117},[78,169,138],{"class":137},[78,171,141],{"class":137},[78,173,144],{"class":137},[78,175,147],{"class":137},[78,177,150],{"class":137},[78,179,180],{"class":95}," \"eleventy-",[78,182,156],{"class":88},[78,184,159],{"class":95},[78,186,187],{"class":95}," 'npx @11ty\u002Feleventy'\n",[78,189,191],{"class":80,"line":190},5,[78,192,193],{"class":84},"done\n",[32,195,197],{"id":196},"cold-builds","Cold Builds",[199,200,201,220],"table",{},[202,203,204],"thead",{},[205,206,207,211,214,217],"tr",{},[208,209,210],"th",{},"Pages",[208,212,213],{},"Eleventy",[208,215,216],{},"Astro",[208,218,219],{},"Astro \u002F Eleventy",[221,222,223,238,252,265],"tbody",{},[205,224,225,229,232,235],{},[226,227,228],"td",{},"1,000",[226,230,231],{},"5.1 s",[226,233,234],{},"14.2 s",[226,236,237],{},"2.8×",[205,239,240,243,246,249],{},[226,241,242],{},"2,500",[226,244,245],{},"10.4 s",[226,247,248],{},"29.8 s",[226,250,251],{},"2.9×",[205,253,254,257,260,263],{},[226,255,256],{},"5,000",[226,258,259],{},"19.6 s",[226,261,262],{},"57.1 s",[226,264,251],{},[205,266,267,270,273,276],{},[226,268,269],{},"10,000",[226,271,272],{},"38.2 s",[226,274,275],{},"112.4 s",[226,277,251],{},[279,280,281,389],"figure",{},[282,283,290,291,290,295,290,299,290,306],"svg",{"viewBox":284,"role":285,"ariaLabelledBy":286,"xmlns":289},"0 0 760 300","img",[287,288],"a11b-cold-title","a11b-cold-desc","http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","\n  ",[292,293,294],"title",{"id":287},"Cold build time from 1,000 to 10,000 pages",[296,297,298],"desc",{"id":288},"Two nearly straight lines. Eleventy grows from 5 seconds at 1,000 pages to 38 seconds at 10,000. Astro grows from 14 seconds to 112 seconds. The ratio stays close to 2.9 times at every size.",[300,301],"rect",{"x":302,"y":302,"width":303,"height":304,"fill":305},"0","760","300","#ffffff",[307,308,310,311,310,319,310,326,310,329,310,334,310,339,310,343,310,347,310,353,310,357,310,361,310,364,310,371,310,375,310,380,310,385,290],"g",{"style":309},"font-family:system-ui, sans-serif;font-size:12px","\n    ",[312,313,318],"text",{"x":314,"y":315,"fill":316,"style":317},"380","28","#1f2937","font-size:16px;font-weight:700;text-anchor:middle","Cold build seconds vs pages",[80,320],{"x1":321,"y1":322,"x2":323,"y2":322,"stroke":324,"style":325},"80","250","720","#556071","stroke-width:1.5px",[80,327],{"x1":321,"y1":328,"x2":321,"y2":322,"stroke":324,"style":325},"50",[80,330],{"x1":321,"y1":331,"x2":323,"y2":331,"stroke":332,"style":333},"150","#d9e2ef","stroke-width:1px",[312,335,302],{"x":336,"y":337,"fill":324,"style":338},"72","254","font-size:11px;text-anchor:end",[312,340,342],{"x":336,"y":341,"fill":324,"style":338},"154","60",[312,344,346],{"x":336,"y":345,"fill":324,"style":338},"54","120",[312,348,352],{"x":349,"y":350,"fill":324,"style":351},"144","268","font-size:11px;text-anchor:middle","1k",[312,354,356],{"x":355,"y":350,"fill":324,"style":351},"240","2.5k",[312,358,360],{"x":359,"y":350,"fill":324,"style":351},"400","5k",[312,362,363],{"x":323,"y":350,"fill":324,"style":351},"10k pages",[365,366],"polyline",{"points":367,"fill":368,"stroke":369,"style":370},"144,226 240,200 400,155 720,63","none","#6a4c93","stroke-width:2.5px",[365,372],{"points":373,"fill":368,"stroke":374,"style":370},"144,242 240,233 400,217 720,186","#5a8a16",[312,376,379],{"x":377,"y":336,"fill":369,"style":378},"640","font-size:11px;font-weight:700","Astro 112 s",[312,381,384],{"x":377,"y":382,"fill":383,"style":378},"180","#3f6410","Eleventy 38 s",[312,386,388],{"x":359,"y":387,"fill":324,"style":351},"290","hyperfine, 5 runs, GitHub Actions ubuntu-latest (4 vCPU, 16 GB)",[390,391,392],"figcaption",{},"Both scale linearly with page count; Astro's line is simply steeper, by a nearly constant factor.",[14,394,395,396,399],{},"Both generators scale linearly, which is the good news: neither has a hidden quadratic step at this size. Astro's constant factor comes mainly from per-page Vite module handling and from rendering each page through its component pipeline even when the page is plain Markdown. Profiling with ",[47,397,398],{},"--verbose"," timings attributed about 40% of Astro's build to rendering, 25% to Shiki highlighting and the rest to bundling and writing. Eleventy's time split roughly evenly between Markdown rendering, Prism highlighting and template execution.",[32,401,403],{"id":402},"warm-builds-after-a-one-page-edit","Warm Builds After a One-Page Edit",[14,405,406],{},"Cold builds are the worst case; what writers wait on is the rebuild after editing one page. Here the generators work very differently.",[14,408,409,413,414,417],{},[410,411,412],"strong",{},"Astro's content layer"," stores a digest of each entry in ",[47,415,416],{},"node_modules\u002F.astro\u002Fdata-store.json",". On a warm build, unchanged entries skip parsing, but every page is still rendered and written, because Astro builds the whole site.",[14,419,420,423,424,427,428,431,432,30],{},[410,421,422],{},"Eleventy's incremental mode"," (",[47,425,426],{},"--incremental",") rebuilds only templates whose input changed, plus templates that depend on them through the data cascade. In CI it needs the previous output and ",[47,429,430],{},".cache"," restored; locally it is automatic in ",[47,433,434],{},"--serve",[199,436,437,448],{},[202,438,439],{},[205,440,441,444,446],{},[208,442,443],{},"One-page edit, 10,000 pages",[208,445,213],{},[208,447,216],{},[221,449,450,459,473,484],{},[205,451,452,455,457],{},[226,453,454],{},"Full rebuild (no cache)",[226,456,272],{},[226,458,275],{},[205,460,461,464,470],{},[226,462,463],{},"Warm, cache restored",[226,465,466,467,469],{},"34.9 s (without ",[47,468,426],{},")",[226,471,472],{},"31.4 s",[205,474,475,478,481],{},[226,476,477],{},"Incremental, changed page only",[226,479,480],{},"3.6 s",[226,482,483],{},"n\u002Fa",[205,485,486,489,492],{},[226,487,488],{},"Incremental, changed page used in navigation",[226,490,491],{},"36.1 s",[226,493,483],{},[279,495,496,589],{},[282,497,290,502,290,505,290,508,290,510],{"viewBox":498,"role":285,"ariaLabelledBy":499,"xmlns":289},"0 0 760 290",[500,501],"a11b-warm-title","a11b-warm-desc",[292,503,504],{"id":500},"Rebuild after editing one page at 10,000 pages",[296,506,507],{"id":501},"Bars for four rebuild modes. Astro cold 112 seconds, Astro with content-layer cache 31 seconds, Eleventy full 38 seconds, and Eleventy incremental 3.6 seconds. A note says Eleventy incremental falls back to about 36 seconds when the edited page appears in shared navigation data.",[300,509],{"x":302,"y":302,"width":303,"height":387,"fill":305},[307,511,310,512,310,515,310,519,310,525,310,534,310,539,310,543,310,548,310,553,310,557,310,564,310,569,310,573,310,580,310,585,290],{"style":309},[312,513,514],{"x":314,"y":315,"fill":316,"style":317},"Seconds to rebuild after editing one page (10,000 pages)",[80,516],{"x1":355,"y1":517,"x2":355,"y2":518,"stroke":332,"style":325},"46","236",[312,520,524],{"x":521,"y":522,"fill":316,"style":523},"40","74","font-weight:700","Astro, cold",[300,526],{"x":355,"y":527,"width":528,"height":529,"rx":530,"fill":531,"opacity":532,"stroke":533,"style":333},"58","449","24","4","#ff595e","0.25","#d83b41",[312,535,538],{"x":536,"y":537,"fill":316,"style":523},"697","75","112",[312,540,542],{"x":521,"y":541,"fill":316,"style":523},"118","Astro, cache restored",[300,544],{"x":355,"y":545,"width":546,"height":529,"rx":530,"fill":369,"opacity":547,"stroke":369,"style":333},"102","126","0.28",[312,549,552],{"x":550,"y":551,"fill":316,"style":523},"374","119","31",[312,554,556],{"x":521,"y":555,"fill":316,"style":523},"162","Eleventy, full",[300,558],{"x":355,"y":559,"width":560,"height":529,"rx":530,"fill":561,"opacity":562,"stroke":563,"style":333},"146","153","#ffca3a","0.35","#a97b00",[312,565,568],{"x":566,"y":567,"fill":316,"style":523},"401","163","38",[312,570,572],{"x":521,"y":571,"fill":316,"style":523},"206","Eleventy, incremental",[300,574],{"x":355,"y":575,"width":576,"height":529,"rx":577,"fill":578,"opacity":579,"stroke":374,"style":333},"190","15","3","#8ac926","0.5",[312,581,584],{"x":582,"y":583,"fill":383,"style":523},"263","207","3.6",[312,586,588],{"x":314,"y":587,"fill":324,"style":351},"262","Eleventy incremental falls back to ~36 s when the edited page feeds shared navigation data",[390,590,591],{},"For the edit-one-page loop, Eleventy's incremental mode is in a different class — as long as the page is not referenced everywhere.",[14,593,594,595,599,600,30],{},"The caveat in the last row matters for documentation. If the edited page's title appears in a sidebar built from a collection that every page renders, Eleventy correctly treats every page as dependent and rebuilds them all. The workaround — building navigation from a data file that changes only when structure changes, not from page titles on every build — is covered in ",[21,596,598],{"href":597},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fenabling-incremental-builds-in-eleventy\u002F","Enabling Incremental Builds in Eleventy"," and ",[21,601,603],{"href":602},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fsidebar-navigation-in-astro-and-eleventy\u002F","Sidebar Navigation in Astro and Eleventy",[32,605,607],{"id":606},"memory","Memory",[199,609,610,622],{},[202,611,612],{},[205,613,614,616,619],{},[208,615,210],{},[208,617,618],{},"Eleventy peak RSS",[208,620,621],{},"Astro peak RSS",[221,623,624,634,644],{},[205,625,626,628,631],{},[226,627,228],{},[226,629,630],{},"310 MB",[226,632,633],{},"820 MB",[205,635,636,638,641],{},[226,637,256],{},[226,639,640],{},"640 MB",[226,642,643],{},"2.1 GB",[205,645,646,648,651],{},[226,647,269],{},[226,649,650],{},"1.1 GB",[226,652,653],{},"3.6 GB",[14,655,656,657,660,661,664],{},"At 10,000 pages Astro exceeded Node's default old-generation heap on one run and crashed with ",[47,658,659],{},"JavaScript heap out of memory"," until ",[47,662,663],{},"NODE_OPTIONS=--max-old-space-size=6144"," was set. On hosted build services with 4 GB or less, that is a hard ceiling rather than a slowdown. Eleventy stayed well under 2 GB throughout.",[279,666,667,732],{},[282,668,290,673,290,676,290,679,290,682],{"viewBox":669,"role":285,"ariaLabelledBy":670,"xmlns":289},"0 0 760 260",[671,672],"a11b-mem-title","a11b-mem-desc",[292,674,675],{"id":671},"Peak memory against common build container limits",[296,677,678],{"id":672},"Bars of peak resident memory at 10,000 pages: Eleventy 1.1 gigabytes and Astro 3.6 gigabytes. Dashed lines mark typical build container limits at 2 gigabytes and 4 gigabytes. Astro sits just under the 4 gigabyte limit, leaving little headroom.",[300,680],{"x":302,"y":302,"width":303,"height":681,"fill":305},"260",[307,683,310,684,310,687,310,691,310,694,310,699,310,702,310,707,310,710,310,714,310,717,310,720,310,724,310,729,290],{"style":309},[312,685,686],{"x":314,"y":315,"fill":316,"style":317},"Peak memory at 10,000 pages vs container limits",[80,688],{"x1":689,"y1":517,"x2":689,"y2":690,"stroke":332,"style":325},"160","200",[80,692],{"x1":387,"y1":517,"x2":387,"y2":690,"stroke":563,"style":693},"stroke-width:1.5px;stroke-dasharray:5 4",[312,695,698],{"x":696,"y":342,"fill":697,"style":378},"294","#8a6d0f","2 GB",[80,700],{"x1":701,"y1":517,"x2":701,"y2":690,"stroke":533,"style":693},"420",[312,703,706],{"x":704,"y":342,"fill":705,"style":378},"424","#b32b30","4 GB",[312,708,213],{"x":521,"y":709,"fill":316,"style":523},"104",[300,711],{"x":689,"y":712,"width":336,"height":713,"rx":530,"fill":578,"opacity":562,"stroke":374,"style":333},"88","26",[312,715,650],{"x":355,"y":716,"fill":383,"style":523},"106",[312,718,216],{"x":521,"y":719,"fill":316,"style":523},"164",[300,721],{"x":689,"y":722,"width":723,"height":713,"rx":530,"fill":531,"opacity":547,"stroke":533,"style":333},"148","234",[312,725,653],{"x":726,"y":727,"fill":705,"style":728},"402","140","font-weight:700;text-anchor:end",[312,730,731],{"x":314,"y":518,"fill":324,"style":351},"\u002Fusr\u002Fbin\u002Ftime -v maximum resident set size, median of 5 cold builds",[390,733,734],{},"Wall time degrades gracefully; memory does not — past the container limit the build simply fails.",[32,736,738],{"id":737},"what-this-means-for-previews-and-ci","What This Means for Previews and CI",[14,740,741],{},"Build time at this scale is mostly a preview-deploy problem. Production deploys happen a few times a day and can afford two minutes; previews happen on every push to every pull request, and reviewers wait for each one. On a team pushing 60 times a day, the difference between a 38-second and a 112-second build is about 75 minutes of runner time daily and, more importantly, the difference between a preview that is ready when the reviewer opens the pull request and one that is not.",[14,743,744,745,599,748,750,751,755],{},"Both generators can cut preview time well below their cold numbers. For Eleventy, restoring ",[47,746,747],{},"_site",[47,749,430],{}," and running incremental builds makes most previews take seconds. For Astro, restoring the content-layer store and the highlight cache brings a one-page change to about 31 seconds; beyond that, the realistic option is building only the section a pull request touches for its preview, using a path filter and a smaller content collection, while production always builds everything. The caching mechanics are the same as in ",[21,752,754],{"href":753},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fcaching-hugo-builds-in-github-actions\u002F","Caching Hugo Builds in GitHub Actions",", with different directories.",[32,757,759],{"id":758},"reducing-astros-build-time","Reducing Astro's Build Time",[14,761,762],{},"Three changes brought Astro's cold build at 10,000 pages from 112 s to 71 s without changing the site's output:",[37,764,765,771,777],{},[40,766,767,770],{},[410,768,769],{},"Highlight once, not per build."," Shiki is expensive per code block. Caching highlighted HTML keyed by code and language (a small remark plugin with an on-disk cache) cut 21 s.",[40,772,773,776],{},[410,774,775],{},"Avoid per-page component work on plain pages."," Rendering Markdown pages through a lightweight layout without islands or MDX-only components cut 12 s.",[40,778,779,782,783,786,787,790],{},[410,780,781],{},"Raise concurrency."," ",[47,784,785],{},"build.concurrency: 4"," in ",[47,788,789],{},"astro.config.mjs"," renders pages in parallel on a 4 vCPU runner; it cut 8 s and raised peak memory by about 15%.",[14,792,793,794,797,798,801,802,806],{},"Eleventy's equivalent levers — caching expensive filters with ",[47,795,796],{},"eleventy-fetch"," or memoisation, and avoiding ",[47,799,800],{},"collections.all"," loops in layouts — are covered in ",[21,803,805],{"href":804},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fhow-to-reduce-bundle-size-in-eleventy-builds\u002F","How to Reduce Bundle Size in Eleventy Builds"," and apply to build time as much as to output.",[32,808,810],{"id":809},"pitfalls-rollback","Pitfalls & Rollback",[37,812,813,819,825,831,837,843],{},[40,814,815,818],{},[410,816,817],{},"Benchmarking a toy corpus."," Lorem-ipsum pages without code blocks understate highlighting costs, which dominate both builds on real docs.",[40,820,821,824],{},[410,822,823],{},"Ignoring memory."," Wall time hides the crash risk; record peak RSS alongside time.",[40,826,827,830],{},[410,828,829],{},"Single runs."," Build times on shared runners vary by 10–15%; always report the median of several runs.",[40,832,833,836],{},[410,834,835],{},"Comparing Astro warm with Eleventy cold."," Compare like with like: both cold, both with caches restored.",[40,838,839,842],{},[410,840,841],{},"Incremental builds without the dependency caveat."," Shared navigation data turns incremental into full rebuilds.",[40,844,845,848],{},[410,846,847],{},"Rollback:"," the benchmark changes nothing in production; the Astro optimisations are config and plugin changes that can be reverted individually.",[32,850,852],{"id":851},"conclusion","Conclusion",[14,854,855],{},"At 10,000 documentation pages, Eleventy built cold in 38 seconds and Astro in 112, a near-constant 2.9× gap from 1,000 pages upwards, with Astro also needing over three times the memory. For the edit-one-page loop, Eleventy's incremental mode rebuilt in under four seconds against Astro's 31-second warm build. Astro narrowed the cold gap to about 1.9× with highlight caching, lighter layouts and parallel rendering. If build time is your bottleneck at this scale, Eleventy has the structural advantage; if Astro's component model and islands matter more, budget for the memory and invest in caching.",[32,857,859],{"id":858},"faq","FAQ",[861,862,864],"h3",{"id":863},"which-is-faster-at-10000-pages-astro-or-eleventy","Which is faster at 10,000 pages, Astro or Eleventy?",[14,866,867],{},"On our corpus, Eleventy built 10,000 Markdown pages cold in 38 seconds and Astro in 112 seconds. With a warm cache after a one-page edit, Astro's content layer brought it to 31 seconds, while Eleventy's incremental mode rebuilt the changed page in under 4 seconds.",[861,869,871],{"id":870},"does-astros-build-time-grow-linearly-with-pages","Does Astro's build time grow linearly with pages?",[14,873,874],{},"Roughly, yes, for Markdown pages without heavy components. Time per page stayed near 11 milliseconds from 1,000 to 10,000 pages. Pages with many MDX components or image processing cost considerably more per page.",[861,876,878],{"id":877},"how-much-memory-do-the-builds-need","How much memory do the builds need?",[14,880,881],{},"Eleventy peaked at about 1.1 GB for 10,000 pages and Astro at about 3.6 GB. Astro's default Node heap limit can be exceeded on large sites, which requires raising max-old-space-size or splitting content.",[861,883,885],{"id":884},"should-build-time-decide-between-them","Should build time decide between them?",[14,887,888],{},"Only if builds are genuinely a bottleneck, which at 10,000 pages they can be for preview deploys. Otherwise, component model, writer experience and page weight usually matter more, and both generators have ways to keep incremental builds fast.",[32,890,892],{"id":891},"related","Related",[37,894,895,903,910,917,924],{},[40,896,897,782,900,902],{},[410,898,899],{},"Parent:",[21,901,24],{"href":23}," — the full comparison.",[40,904,905,909],{},[21,906,908],{"href":907},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fchoosing-between-astro-and-eleventy-for-large-docs\u002F","Choosing Between Astro and Eleventy for Large Docs"," — build time in context of the other factors.",[40,911,912,916],{},[21,913,915],{"href":914},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002F","Hugo Build Times for Large Repositories"," — the fastest generator at this scale.",[40,918,919,923],{},[21,920,922],{"href":921},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fincremental-builds-in-astro-with-the-content-layer\u002F","Incremental Builds in Astro with the Content Layer"," — getting the most from Astro's cache.",[40,925,926,930],{},[21,927,929],{"href":928},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fmeasuring-build-time-regressions-in-ci\u002F","Measuring Build Time Regressions in CI"," — tracking these numbers over time.",[932,933,934],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":74,"searchDepth":114,"depth":114,"links":936},[937,938,939,940,941,942,943,944,945,951],{"id":34,"depth":114,"text":35},{"id":196,"depth":114,"text":197},{"id":402,"depth":114,"text":403},{"id":606,"depth":114,"text":607},{"id":737,"depth":114,"text":738},{"id":758,"depth":114,"text":759},{"id":809,"depth":114,"text":810},{"id":851,"depth":114,"text":852},{"id":858,"depth":114,"text":859,"children":946},[947,948,949,950],{"id":863,"depth":131,"text":864},{"id":870,"depth":131,"text":871},{"id":877,"depth":131,"text":878},{"id":884,"depth":131,"text":885},{"id":891,"depth":114,"text":892},[953,956,959,960],{"name":954,"item":955},"Home","\u002F",{"name":957,"item":958},"Choosing the Right Static Site Generator for Production","\u002Fchoosing-the-right-static-site-generator-for-production\u002F",{"name":24,"item":23},{"name":5,"item":961},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages\u002F","2026-09-18","Astro and Eleventy benchmarked on the same docs corpus from 1,000 to 10,000 pages: cold, warm and one-page-edit builds, memory, and where each scales badly.","md",[966,967,968,969],{"q":864,"a":867},{"q":871,"a":874},{"q":878,"a":881},{"q":885,"a":888},{},true,"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages",{"title":5,"description":963},"choosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fastro-vs-eleventy-build-times-at-10000-pages\u002Findex","article","XpMX1j_tJQb4hNV93H16haSsDs_Er4bs07eP-4-L2IY",[978,979,982,985,987,990,992,995,998,1001,1004,1007,1010,1013,1015,1018,1020,1023,1026,1029,1031,1034,1037,1040,1043,1046,1049,1052,1055,1058,1061,1064,1067,1070,1073,1076,1079,1082,1085,1088,1091,1094,1097,1100,1103,1106,1109,1112,1115,1118,1121,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1190,1193,1196,1199,1202,1205,1208,1211,1214,1217,1220,1222,1225,1228,1231,1234,1237,1240,1243,1246,1249,1252,1255,1258,1261,1264,1267,1270,1273,1276,1279,1282,1285,1288,1291,1294,1297,1300,1303,1306,1309,1312,1315,1318,1321,1324,1327,1330,1333,1336,1339,1342,1345,1348,1351,1354,1357,1360,1363,1365,1367,1369,1372,1375,1378,1381,1384,1387,1390,1393,1396,1399,1402,1405,1408,1411,1414,1417,1420,1423,1426,1429,1432,1435,1438,1441,1444,1447,1450,1453,1456,1459,1462,1465,1468,1471,1474,1477,1480,1483,1486,1489,1492,1495,1498,1501,1504,1507,1510,1513],{"path":972,"title":5},{"path":980,"title":981},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fchoosing-between-astro-and-eleventy-for-large-docs","Astro vs Eleventy for Large Docs (1000+ Pages)",{"path":983,"title":984},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fcontent-collections-vs-eleventy-data-cascade","Content Collections vs the Eleventy Data Cascade",{"path":986,"title":24},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites",{"path":988,"title":989},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fshortcodes-vs-components-for-docs-authors","Shortcodes vs Components for Docs Authors",{"path":991,"title":603},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fastro-vs-eleventy-for-documentation-sites\u002Fsidebar-navigation-in-astro-and-eleventy",{"path":993,"title":994},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fcustomizing-starlight-without-forking-the-theme","Customizing Starlight Without Forking the Theme",{"path":996,"title":997},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fdocusaurus-vs-starlight-for-product-documentation","Docusaurus vs Starlight for Product Documentation",{"path":999,"title":1000},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress","Docs Frameworks: Docusaurus, Starlight and VitePress",{"path":1002,"title":1003},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fmdx-vs-markdoc-for-docs-content","MDX vs Markdoc for Docs Content",{"path":1005,"title":1006},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fmigrating-from-mkdocs-to-starlight","Migrating from MkDocs to Starlight",{"path":1008,"title":1009},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fversioned-documentation-with-docusaurus","Versioned Documentation with Docusaurus",{"path":1011,"title":1012},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fdocs-frameworks-docusaurus-starlight-vitepress\u002Fvitepress-for-library-documentation","VitePress for Library Documentation",{"path":1014,"title":29},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Fhow-to-benchmark-hugo-vs-astro-build-speeds",{"path":1016,"title":1017},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Fhugo-partialcached-for-faster-builds","Hugo partialCached for Faster Builds",{"path":1019,"title":915},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories",{"path":1021,"title":1022},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Fprofiling-hugo-templates-with-template-metrics","Profiling Hugo Templates With Template Metrics",{"path":1024,"title":1025},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Freducing-hugo-memory-usage-on-ci-runners","Reducing Hugo Memory Usage on CI Runners",{"path":1027,"title":1028},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fhugo-build-times-for-large-repositories\u002Fspeeding-up-hugo-builds-with-render-hooks-and-caching","Speeding Up Hugo Builds with Render Hooks & Caching",{"path":1030,"title":957},"\u002Fchoosing-the-right-static-site-generator-for-production",{"path":1032,"title":1033},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Feleventy-vs-jekyll-for-markdown-heavy-blogs","Eleventy vs Jekyll for Markdown-Heavy Blogs",{"path":1035,"title":1036},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem","Jekyll Plugin Ecosystem",{"path":1038,"title":1039},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Freplacing-jekyll-plugins-when-migrating-to-eleventy","Replacing Jekyll Plugins When Migrating to Eleventy",{"path":1041,"title":1042},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Frunning-jekyll-on-github-pages-without-plugins","Running Jekyll on GitHub Pages Without Plugins",{"path":1044,"title":1045},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Fspeeding-up-slow-jekyll-builds","Speeding Up Slow Jekyll Builds",{"path":1047,"title":1048},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fjekyll-plugin-ecosystem\u002Fupgrading-jekyll-and-ruby-versions-safely","Upgrading Jekyll and Ruby Versions Safely",{"path":1050,"title":1051},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fconverting-front-matter-at-scale-during-migration","Converting Front Matter at Scale During Migration",{"path":1053,"title":1054},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators","Migrating Between Static Site Generators",{"path":1056,"title":1057},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fkeeping-redirects-working-after-an-ssg-migration","Keeping Redirects Working After an SSG Migration",{"path":1059,"title":1060},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fmigrating-a-docs-site-from-jekyll-to-hugo","Migrating a Docs Site From Jekyll to Hugo",{"path":1062,"title":1063},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fmigrating-from-gatsby-to-astro","Migrating from Gatsby to Astro",{"path":1065,"title":1066},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fmigrating-from-hugo-to-astro-without-breaking-urls","Migrating From Hugo to Astro Without Breaking URLs",{"path":1068,"title":1069},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fmigrating-wordpress-to-a-static-site-generator","Migrating WordPress to a Static Site Generator",{"path":1071,"title":1072},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fmigrating-between-static-site-generators\u002Fporting-shortcodes-and-includes-between-generators","Porting Shortcodes and Includes Between Generators",{"path":1074,"title":1075},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Fhandling-dynamic-routes-in-nextjs-static-export","Handling Dynamic Routes in Next.js Static Export",{"path":1077,"title":1078},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites","Next.js Static Export for Content Sites",{"path":1080,"title":1081},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Fmigrating-from-gatsby-to-nextjs-static-export","Migrating from Gatsby to Next.js Static Export",{"path":1083,"title":1084},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Fnextjs-app-router-static-export-limitations","Next.js App Router Static Export Limitations",{"path":1086,"title":1087},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Fnextjs-static-export-vs-astro-for-marketing-sites","Next.js Static Export vs Astro for Marketing",{"path":1089,"title":1090},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fnextjs-static-export-for-content-sites\u002Foptimizing-images-in-nextjs-static-export","Optimizing Images in Next.js Static Export",{"path":1092,"title":1093},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Fadding-pagefind-to-an-astro-site","Adding Pagefind to an Astro Site",{"path":1095,"title":1096},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Fbuilding-a-lunr-index-at-build-time-in-eleventy","Building a Lunr Index at Build Time in Eleventy",{"path":1098,"title":1099},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites","Search for Static Sites",{"path":1101,"title":1102},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Findexing-hugo-sites-with-pagefind","Indexing Hugo Sites with Pagefind",{"path":1104,"title":1105},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Fmultilingual-search-on-static-sites","Multilingual Search on Static Sites",{"path":1107,"title":1108},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Fpagefind-vs-algolia-docsearch","Pagefind vs Algolia DocSearch",{"path":1110,"title":1111},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fsearch-for-static-sites\u002Fsearch-index-size-budgets-for-large-docs","Search Index Size Budgets for Large Docs",{"path":1113,"title":1114},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fbest-ssg-for-technical-writers-without-coding-experience","Best SSG for Non-Developer Technical Writers",{"path":1116,"title":1117},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fchoosing-an-ssg-for-api-reference-documentation","Choosing an SSG for API Reference Documentation",{"path":1119,"title":1120},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fevaluating-ssg-accessibility-defaults","Evaluating SSG Accessibility Defaults",{"path":1122,"title":1123},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix","SSG Framework Selection Matrix",{"path":1125,"title":1126},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fpicking-an-ssg-for-a-multi-language-documentation-site","Picking an SSG for a Multi-Language Docs Site",{"path":1128,"title":1129},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Fssg-selection-checklist-for-engineering-teams","SSG Selection Checklist for Engineering Teams",{"path":1131,"title":1132},"\u002Fchoosing-the-right-static-site-generator-for-production\u002Fssg-framework-selection-matrix\u002Ftotal-cost-of-ownership-for-static-site-generators","Total Cost of Ownership for Static Site Generators",{"path":1134,"title":1135},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fcache-busting-with-content-hashed-filenames","Cache Busting with Content-Hashed Filenames",{"path":1137,"title":1138},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs","CDN Caching Rules for SSGs",{"path":1140,"title":1141},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fpurging-the-cdn-cache-after-a-static-deploy","Purging the CDN Cache After a Static Deploy",{"path":1143,"title":1144},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fsetting-cache-control-headers-on-cloudflare-pages","Cache-Control Headers on Cloudflare Pages",{"path":1146,"title":1147},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fsetting-up-proper-cache-headers-on-netlify","Proper Cache Headers on Netlify for SSGs",{"path":1149,"title":1150},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcdn-caching-rules-for-ssgs\u002Fstale-while-revalidate-for-static-html","Stale-While-Revalidate for Static HTML",{"path":1152,"title":1153},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Feliminating-layout-shift-from-web-fonts","Eliminating Layout Shift From Web Fonts",{"path":1155,"title":1156},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Ffixing-cls-from-cookie-banners","Fixing CLS from Cookie Banners",{"path":1158,"title":1159},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Ffixing-cls-from-late-loading-embeds","Fixing CLS From Late-Loading Embeds",{"path":1161,"title":1162},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Ffixing-cls-from-sticky-headers-and-anchor-links","Fixing CLS from Sticky Headers and Anchor Links",{"path":1164,"title":1165},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites","Cumulative Layout Shift Fixes for Static Sites",{"path":1167,"title":1168},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Fmeasuring-cls-in-the-field-with-web-vitals-js","Measuring CLS in the Field With web-vitals.js",{"path":1170,"title":1171},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fcumulative-layout-shift-fixes-for-static-sites\u002Freserving-space-for-images-and-embeds-to-stop-layout-shift","Reserving Space for Images and Embeds",{"path":1173,"title":1174},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Ffont-display-optional-vs-swap","font-display: optional vs swap",{"path":1176,"title":1177},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites","Font Loading Strategies for Static Sites",{"path":1179,"title":1180},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Fmetric-matched-fallback-fonts-with-size-adjust","Metric-Matched Fallback Fonts with size-adjust",{"path":1182,"title":1183},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Fpreloading-fonts-without-double-downloads","Preloading Fonts Without Double Downloads",{"path":1185,"title":1186},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Fself-hosting-google-fonts-to-eliminate-layout-shift","Self-Host Google Fonts to Eliminate Layout Shift",{"path":1188,"title":1189},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Ffont-loading-strategies-for-static-sites\u002Fsubsetting-variable-fonts-for-faster-first-render","Subsetting Variable Fonts for Faster First Render",{"path":1191,"title":1192},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Fbuilding-an-image-cdn-pipeline-for-static-sites","Building an Image CDN Pipeline for Static Sites",{"path":1194,"title":1195},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Fgenerating-open-graph-images-at-build-time","Generating Open Graph Images at Build Time",{"path":1197,"title":1198},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro","Image Optimization Pipelines in Astro",{"path":1200,"title":1201},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Flazy-loading-images-without-hurting-lcp","Lazy-Loading Images Without Hurting LCP",{"path":1203,"title":1204},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Foptimizing-webp-images-in-hugo-without-plugins","Optimizing WebP Images in Hugo Without Plugins",{"path":1206,"title":1207},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Fresponsive-images-with-srcset-in-eleventy","Responsive Images with srcset in Eleventy",{"path":1209,"title":1210},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fimage-optimization-pipelines-in-astro\u002Fserving-avif-with-fallbacks-on-static-sites","Serving AVIF With Fallbacks on Static Sites",{"path":1212,"title":1213},"\u002Fperformance-optimization-core-web-vitals-for-ssgs","Core Web Vitals Optimization for SSGs",{"path":1215,"title":1216},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fastro-islands-vs-full-hydration-performance","Astro Islands vs Full Hydration Performance",{"path":1218,"title":1219},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fdeferring-hydration-with-client-visible-in-astro","Deferring Hydration with client:visible in Astro",{"path":1221,"title":805},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fhow-to-reduce-bundle-size-in-eleventy-builds",{"path":1223,"title":1224},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering","JavaScript Hydration & Partial Rendering",{"path":1226,"title":1227},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Fmeasuring-inp-on-static-sites-with-real-user-monitoring","Measuring INP on Static Sites with RUM",{"path":1229,"title":1230},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fjavascript-hydration-partial-rendering\u002Freplacing-react-islands-with-web-components","Replacing React Islands with Web Components",{"path":1232,"title":1233},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002Feliminating-render-blocking-css-on-static-sites","Eliminating Render-Blocking CSS on Static Sites",{"path":1235,"title":1236},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002Ffixing-lcp-on-text-heavy-documentation-pages","Fixing LCP on Text-Heavy Documentation Pages",{"path":1238,"title":1239},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites","Largest Contentful Paint Optimization for Static Sites",{"path":1241,"title":1242},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002Fmeasuring-lcp-subparts-with-devtools","Measuring LCP Subparts with DevTools",{"path":1244,"title":1245},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002Foptimizing-lcp-on-astro-with-priority-hints","Optimizing LCP on Astro with Priority Hints",{"path":1247,"title":1248},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Flargest-contentful-paint-optimization-for-static-sites\u002Freducing-lcp-from-hero-images-on-static-sites","Reducing LCP from Hero Images on Static Sites",{"path":1250,"title":1251},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Fcomparing-lab-and-field-data-with-crux","Comparing Lab and Field Data with CrUX",{"path":1253,"title":1254},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci","Performance Budgets and Lighthouse CI",{"path":1256,"title":1257},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Freducing-lighthouse-score-variance-in-ci","Reducing Lighthouse Score Variance in CI",{"path":1259,"title":1260},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Frunning-webpagetest-scripts-against-preview-deploys","Running WebPageTest Scripts Against Preview Deploys",{"path":1262,"title":1263},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Fsetting-up-lighthouse-ci-for-a-static-site","Setting Up Lighthouse CI for a Static Site",{"path":1265,"title":1266},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Ftracking-bundle-size-per-pull-request","Tracking Bundle Size per Pull Request",{"path":1268,"title":1269},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fperformance-budgets-and-lighthouse-ci\u002Fwriting-a-performance-budget-that-fails-builds","Writing a Performance Budget That Fails Builds",{"path":1271,"title":1272},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002Fauditing-unused-preloads","Auditing Unused Preloads",{"path":1274,"title":1275},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed","Resource Hints and Navigation Speed",{"path":1277,"title":1278},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002Finstant-navigation-with-speculation-rules","Instant Navigation with Speculation Rules",{"path":1280,"title":1281},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002Fpreconnect-vs-dns-prefetch-on-static-sites","Preconnect vs DNS-Prefetch on Static Sites",{"path":1283,"title":1284},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002Fprefetching-links-in-astro","Prefetching Links in Astro",{"path":1286,"title":1287},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fresource-hints-and-navigation-speed\u002Fview-transitions-on-multi-page-static-sites","View Transitions on Multi-Page Static Sites",{"path":1289,"title":1290},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002Fauditing-third-party-scripts-with-lighthouse","Auditing Third-Party Scripts With Lighthouse",{"path":1292,"title":1293},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites","Third-Party Script Performance on Static Sites",{"path":1295,"title":1296},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002Flazy-loading-youtube-embeds-on-static-sites","Lazy-Loading YouTube Embeds on Static Sites",{"path":1298,"title":1299},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002Floading-google-tag-manager-without-hurting-inp","Loading Google Tag Manager Without Hurting INP",{"path":1301,"title":1302},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002Frunning-third-party-scripts-in-a-web-worker-with-partytown","Running Third-Party Scripts in a Web Worker with Partytown",{"path":1304,"title":1305},"\u002Fperformance-optimization-core-web-vitals-for-ssgs\u002Fthird-party-script-performance-on-static-sites\u002Fself-hosting-analytics-to-cut-third-party-requests","Self-Hosting Analytics to Cut Third-Party Requests",{"path":1307,"title":1308},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002Fautomating-eleventy-deployments-with-cloudflare-pages","Automating Eleventy Deployments on Cloudflare Pages",{"path":1310,"title":1311},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002Fconfiguring-redirects-on-cloudflare-pages","Configuring Redirects on Cloudflare Pages",{"path":1313,"title":1314},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002Fcustom-domains-and-tls-on-cloudflare-pages","Custom Domains and TLS on Cloudflare Pages",{"path":1316,"title":1317},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002Fdeploying-hugo-to-cloudflare-pages-and-workers","Deploying Hugo to Cloudflare Pages and Workers",{"path":1319,"title":1320},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup","Cloudflare Pages Edge Caching Setup",{"path":1322,"title":1323},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcloudflare-pages-edge-caching-setup\u002Fmigrating-from-cloudflare-pages-to-workers-static-assets","Migrating from Cloudflare Pages to Workers Static Assets",{"path":1325,"title":1326},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fchecking-links-in-pull-requests","Checking Links in Pull Requests",{"path":1328,"title":1329},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fdocs-as-code-review-workflow-for-writers","Docs-as-Code Review Workflow for Writers",{"path":1331,"title":1332},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Feditorial-checks-with-vale-in-ci","Editorial Checks with Vale in CI",{"path":1334,"title":1335},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams","Content Workflows for Documentation Teams",{"path":1337,"title":1338},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fscheduling-content-publication-with-cron-triggered-builds","Scheduling Content Publication With Cron-Triggered Builds",{"path":1340,"title":1341},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fcontent-workflows-for-documentation-teams\u002Fwiring-a-headless-cms-to-a-static-build","Wiring a Headless CMS to a Static Build",{"path":1343,"title":1344},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fbuilding-astro-sites-with-github-actions","Building Astro Sites with GitHub Actions",{"path":1346,"title":1347},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fcaching-node-modules-in-github-actions-for-faster-ssg-builds","Caching node_modules in GitHub Actions",{"path":1349,"title":1350},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fdeploying-to-github-pages-with-actions","Deploying to GitHub Pages with Actions",{"path":1352,"title":1353},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fdeploying-to-multiple-environments-from-one-workflow","Deploying to Multiple Environments From One Workflow",{"path":1355,"title":1356},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fhow-to-set-up-github-actions-for-hugo-deployments","GitHub Actions for Hugo Deployments",{"path":1358,"title":1359},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds","GitHub Actions for Automated SSG Builds",{"path":1361,"title":1362},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fgithub-actions-for-automated-ssg-builds\u002Fmatrix-builds-for-multi-site-monorepos","Matrix Builds for Multi-Site Monorepos",{"path":1364,"title":754},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fcaching-hugo-builds-in-github-actions",{"path":1366,"title":598},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fenabling-incremental-builds-in-eleventy",{"path":1368,"title":922},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fincremental-builds-in-astro-with-the-content-layer",{"path":1370,"title":1371},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs","Incremental Builds and Build Caching for SSGs",{"path":1373,"title":1374},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fmeasuring-build-time-regressions-in-ci","Measuring Build-Time Regressions in CI",{"path":1376,"title":1377},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fremote-caching-with-turborepo-for-ssg-monorepos","Remote Caching with Turborepo for SSG Monorepos",{"path":1379,"title":1380},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fincremental-builds-and-build-caching-for-ssgs\u002Fsharing-build-cache-across-ci-runners","Sharing Build Cache Across CI Runners",{"path":1382,"title":1383},"\u002Fproduction-ready-deployment-cicd-workflows","Production-Ready Deployment & CI\u002FCD for SSGs",{"path":1385,"title":1386},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Falerting-on-cache-hit-ratio-drops","Alerting on Cache Hit Ratio Drops",{"path":1388,"title":1389},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Fbuilding-a-core-web-vitals-dashboard-from-rum-data","Building a Core Web Vitals Dashboard from RUM Data",{"path":1391,"title":1392},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Fcrawling-for-broken-links-on-a-schedule","Crawling for Broken Links on a Schedule",{"path":1394,"title":1395},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production","Monitoring Static Sites in Production",{"path":1397,"title":1398},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Flogging-404s-at-the-edge","Logging 404s at the Edge",{"path":1400,"title":1401},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fmonitoring-static-sites-in-production\u002Fuptime-and-synthetic-checks-for-static-sites","Uptime and Synthetic Checks for Static Sites",{"path":1403,"title":1404},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002Fconfiguring-vercel-for-hugo-and-eleventy","Configuring Vercel for Hugo and Eleventy",{"path":1406,"title":1407},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies","Netlify vs Vercel Deployment Strategies",{"path":1409,"title":1410},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002Fnetlify-build-hooks-for-content-updates","Netlify Build Hooks for Content Updates",{"path":1412,"title":1413},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002Fnetlify-redirects-and-rewrites-for-static-sites","Netlify Redirects and Rewrites for Static Sites",{"path":1415,"title":1416},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002Fsetting-up-deploy-previews-on-netlify-for-every-pull-request","Netlify Deploy Previews for Every Pull Request",{"path":1418,"title":1419},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fnetlify-vs-vercel-deployment-strategies\u002Fvercel-isr-vs-static-generation-for-ssgs","Vercel ISR vs Static Generation for SSGs",{"path":1421,"title":1422},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fautomating-preview-deploy-pipelines-with-github-actions","Automating Preview Deploy Pipelines with GitHub Actions",{"path":1424,"title":1425},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fcleaning-up-stale-preview-deployments","Cleaning Up Stale Preview Deployments",{"path":1427,"title":1428},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests","Preview Environments for Pull Requests",{"path":1430,"title":1431},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fpassword-protecting-preview-deployments","Password-Protecting Preview Deployments",{"path":1433,"title":1434},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fpreviewing-headless-cms-drafts","Previewing Headless CMS Drafts",{"path":1436,"title":1437},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fpreview-environments-for-pull-requests\u002Fvisual-regression-testing-on-preview-deploys","Visual Regression Testing on Preview Deploys",{"path":1439,"title":1440},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Fatomic-deploys-vs-incremental-uploads","Atomic Deploys vs Incremental Uploads",{"path":1442,"title":1443},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Fcanary-releases-for-static-sites","Canary Releases for Static Sites",{"path":1445,"title":1446},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Ffeature-flags-on-static-sites","Feature Flags on Static Sites",{"path":1448,"title":1449},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites","Rollbacks and Deploy Safety for Static Sites",{"path":1451,"title":1452},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Frolling-back-a-bad-static-deploy-in-under-a-minute","Rolling Back a Bad Static Deploy in Under a Minute",{"path":1454,"title":1455},"\u002Fproduction-ready-deployment-cicd-workflows\u002Frollbacks-and-deploy-safety-for-static-sites\u002Frunning-smoke-tests-against-a-preview-url","Running Smoke Tests Against a Preview URL",{"path":1457,"title":1458},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fauditing-npm-dependencies-in-ssg-pipelines","Auditing npm Dependencies in SSG Pipelines",{"path":1460,"title":1461},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fenabling-hsts-and-preload-safely","Enabling HSTS and Preload Safely",{"path":1463,"title":1464},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fhash-based-csp-for-inline-scripts-in-astro","Hash-Based CSP for Inline Scripts in Astro",{"path":1466,"title":1467},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites","Security Headers and Hardening for Static Sites",{"path":1469,"title":1470},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fsecuring-deploy-credentials-with-github-oidc","Securing Deploy Credentials with GitHub OIDC",{"path":1472,"title":1473},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fsubresource-integrity-for-third-party-assets","Subresource Integrity for Third-Party Assets",{"path":1475,"title":1476},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fsecurity-headers-for-static-sites\u002Fwriting-a-content-security-policy-for-a-static-site","Writing a Content Security Policy for a Static Site",{"path":1478,"title":1479},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fclean-urls-and-trailing-slashes-on-s3","Clean URLs and Trailing Slashes on S3",{"path":1481,"title":1482},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fcloudfront-functions-for-redirects","CloudFront Functions for Redirects",{"path":1484,"title":1485},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fdeploying-a-static-site-to-s3-and-cloudfront","Deploying a Static Site to S3 and CloudFront",{"path":1487,"title":1488},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites","Self-Hosting Static Sites on S3, Nginx and Caddy",{"path":1490,"title":1491},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fserving-a-static-site-with-caddy","Serving a Static Site with Caddy",{"path":1493,"title":1494},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fserving-a-static-site-with-nginx","Serving a Static Site with Nginx",{"path":1496,"title":1497},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fself-hosting-static-sites\u002Fzero-downtime-deploys-with-symlink-swaps","Zero-Downtime Deploys with Symlink Swaps",{"path":1499,"title":1500},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fadding-a-contact-form-with-cloudflare-workers","Adding a Contact Form with Cloudflare Workers",{"path":1502,"title":1503},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fhandling-form-submissions-on-a-static-site","Handling Form Submissions on a Static Site",{"path":1505,"title":1506},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites","Serverless Functions for Static Sites",{"path":1508,"title":1509},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fnetlify-functions-vs-cloudflare-workers","Netlify Functions vs Cloudflare Workers",{"path":1511,"title":1512},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fprotecting-a-static-site-behind-authentication","Protecting a Static Site Behind Authentication",{"path":1514,"title":1515},"\u002Fproduction-ready-deployment-cicd-workflows\u002Fserverless-functions-for-static-sites\u002Fproxying-third-party-apis-from-an-edge-function","Proxying Third-Party APIs from an Edge Function",1789722847081]