[{"data":1,"prerenderedAt":489},["ShallowReactive",2],{"page:\u002Fwhy":3},{"id":4,"title":5,"accent":6,"body":7,"coming":476,"description":477,"extension":478,"headline":479,"intro":480,"meta":481,"navigation":482,"path":483,"repos":484,"seo":485,"stats":486,"statsDetail":6,"statsNote":6,"stem":487,"__hash__":488},"content\u002Fwhy.md","Why",null,{"type":8,"value":9,"toc":468},"minimark",[10,125,185,204,209,212,266,273,323,350,370,381,385,403,407,437,441,465],[11,12,16,46,60,111],"claim",{"emoji":13,"figure":14,"title":15},"💸","10,037x","Cheaper to Run",[17,18,19,20,24,25,28,29,32,33,36,37,40,41,45],"p",{},"Across a fleet, a Drupflare site costs about ",[21,22,23],"strong",{},"0.6 cents a month"," in infrastructure. A VPS that answers visitors from nearby needs a server in each of three regions behind a load balancer, which is ",[21,26,27],{},"$58.20 a month"," per site. For 1,000 sites with 10,000 views each, that is ",[21,30,31],{},"$58,200 a month"," against ",[21,34,35],{},"$5.80"," for Drupflare, a ",[21,38,39],{},"10,037x difference"," before anyone has written a line of code. Against Pantheon Basic, the same thousand sites would be $41,667 a month, a ",[42,43,44],"pitch",{},"7,186x difference",".",[17,47,48,49,52,53,56,57,45],{},"On your own Cloudflare account there is no per-site fee at all. The free plan covers ",[21,50,51],{},"3.04 million\nviews a month"," on the one-click deploy and up to ",[42,54,55],{},"13.2 million"," with the R2 page mirror, shared\nacross every site you run. Past that, the $5 Workers Paid plan carries a thousand sites of 10,000\nviews each for ",[42,58,59],{},"$5.80 a month",[61,62,63,76],"table",{},[64,65,66],"thead",{},[67,68,69,73],"tr",{},[70,71,72],"th",{},"1,000 Sites, 10,000 Views Each",[70,74,75],{},"Per Month",[77,78,79,87,95,103],"tbody",{},[67,80,81,85],{},[82,83,84],"td",{},"Drupflare, your own account",[82,86,35],{},[67,88,89,92],{},[82,90,91],{},"One small VPS per site",[82,93,94],{},"$10,500",[67,96,97,100],{},[82,98,99],{},"Three-region VPS per site",[82,101,102],{},"$58,200",[67,104,105,108],{},[82,106,107],{},"Pantheon Basic",[82,109,110],{},"$41,667",[112,113,114,122],"fine-print",{},[17,115,116,117,121],{},"The 10,037x and the $5.80 are the ceiling, with every site asleep between requests. That is the free\nplan's default, and ",[118,119,120],"code",{},"SITE_WARM=0"," on paid. The paid plan keeps sites warm by default, and a thousand\nkept-warm sites cost $350.65 a month: 166x against the three-region VPS, 29.9x against one small VPS\nand 118.8x against Pantheon Basic. The three-region VPS is one origin in each of three regions behind\na $15 load balancer. All of it is list prices for a modelled workload, and the VPS side leaves out\nlabour, a CDN and the replication a multi-region origin needs.",[17,123,124],{},"The 13.2 million is derived from Cloudflare's published limits. It needs the R2 mirror, which needs\nan R2 bucket and a custom domain you own, and the mirror answers 77% of views. The one-click deploy\nserves 3.04 million. Both count one Worker request a view. Static assets don't bill as Worker\nrequests; the one exception is Workers Cache, which the shipped config leaves off (with it on, a\nfree account serves about 1,500 views a day).",[11,126,130,141],{"emoji":127,"figure":128,"title":129},"🌍","6.35x","Faster on the Same Continent",[17,131,132,133,136,137,140],{},"A VPS answers from one region. Drupflare answers from the Cloudflare location nearest each visitor.\nAnyone on the same continent as your server gets their page ",[21,134,135],{},"6.35x faster",", and the gap keeps\ngrowing with distance, up to ",[42,138,139],{},"23.09x"," on the far side of the world.",[61,142,143,153],{},[64,144,145],{},[67,146,147,150],{},[70,148,149],{},"The Visitor is",[70,151,152],{},"Faster by",[77,154,155,163,170,178],{},[67,156,157,160],{},[82,158,159],{},"in the VPS's own datacenter",[82,161,162],{},"1.50x",[67,164,165,168],{},[82,166,167],{},"on the same continent",[82,169,128],{},[67,171,172,175],{},[82,173,174],{},"one ocean away",[82,176,177],{},"11.32x",[67,179,180,183],{},[82,181,182],{},"on the far side of the world",[82,184,139],{},[11,186,190,201],{"emoji":187,"figure":188,"title":189},"📈","12.25x","Steadier Under Load",[17,191,192,193,196,197,200],{},"On the same machine, serving the same Drupal site, a cached page's slowest 5% came back\n",[42,194,195],{},"12.25x faster"," on Drupflare than on nginx with PHP-FPM, 4 ms against 49, and with 32 visitors at\nonce Drupflare answered ",[42,198,199],{},"3.59x as many requests a second",", 438 against 122.",[17,202,203],{},"The interpreter starts in a few milliseconds, and a logged-in editor is served from a compiled plan\nthat skips the render entirely once their session settles.",[205,206,208],"h2",{"id":207},"why-it-is-faster","⚡ Why It Is Faster",[17,210,211],{},"Most Drupal hosting puts every visitor on a long trip to one server, which then asks a separate\ndatabase for the page. Drupflare removes both trips.",[213,214,215,222,228,237,243,253],"ul",{},[216,217,218,221],"li",{},[21,219,220],{},"It answers next door."," The site runs in the Cloudflare location nearest each visitor instead of\none datacenter, so the network round trip that dominates a normal page load mostly disappears.",[216,223,224,227],{},[21,225,226],{},"The database lives inside the site."," Each site's SQLite sits in the same Durable Object as PHP.\nA query is a function call, not a connection to another machine.",[216,229,230,233,234,45],{},[21,231,232],{},"PHP never cold-starts per request."," The interpreter loads once and serves request after\nrequest. A fresh isolate starts it in ",[21,235,236],{},"5 ms",[216,238,239,242],{},[21,240,241],{},"Most visitors never reach PHP."," Published pages are stored and served straight from cache, and\nre-rendered in the background when content changes.",[216,244,245,248,249,252],{},[21,246,247],{},"It scales out on its own."," When logged-in traffic starts to queue, the site adds read\nreplicas: full copies of itself that answer in parallel from their own database. Sixteen replicas\nserve ",[42,250,251],{},"4.74x the traffic"," of a single copy, and the median wait falls 24.8x at 64 concurrent\nvisitors. Nobody resizes a server.",[216,254,255,258,259,262,263,265],{},[21,256,257],{},"Editors get the fast path too."," A logged-in session is answered from a plan compiled after its\nfirst few requests: ",[118,260,261],{},"\u002Fadmin\u002Fcontent"," in ",[21,264,236],{},", where nginx with PHP-FPM took 71 ms on the same\nmachine.",[17,267,268,269,272],{},"The result is a Drupal site that ",[42,270,271],{},"behaves like a static one for visitors"," and stays fully dynamic\nfor the people editing it.",[11,274,278,281,308],{"emoji":275,"figure":276,"title":277},"🌱","99.99%","Less Energy",[17,279,280],{},"A conventional host draws power all day whether anyone visits or not, and production Drupal is\nusually sized for its busiest hour. A Drupflare site uses a processor only while it answers a\nrequest. When nobody is visiting, it holds no compute at all.",[17,282,283,284,287,288,291,292,295,296,299,300,303,304,307],{},"Against three regions with a high-availability pair in each, sized for peak, that is ",[21,285,286],{},"99.99% less\nenergy"," (modelled): 390 kWh a year for the servers against ",[42,289,290],{},"under 0.1 kWh"," for Drupflare at a million\nviews a month, logged-in visitors included. At 10,000 views a month the gap widens to\n",[42,293,294],{},"742,503x",", because the same servers spread their idle draw over far fewer visitors. Each site\navoids about ",[21,297,298],{},"150 kg of CO2e"," and ",[21,301,302],{},"1.9 kL of water"," a year (derived), and a logged-in editor's\nadmin page takes ",[42,305,306],{},"a third less energy"," per view (measured).",[17,309,310,311,314,315,318,319,322],{},"The fleet comparison is smaller and still large: for a thousand sites of 10,000 views each, ",[21,312,313],{},"99.97%\nless energy"," than consolidated shared hosting behind a CDN, with ",[42,316,317],{},"701 kg of CO2"," avoided a\nyear on the average US grid and ",[42,320,321],{},"8,989 litres of water"," (derived). These figures stop at the\ndata centre; the visitor's side is the spool claim below, measured separately.",[11,324,328,339],{"emoji":325,"figure":326,"title":327},"📱","0","Requests on a Repeat View",[17,329,330,331,334,335,338],{},"Drupflare ships a small service worker, spool, that keeps a copy of the pages a visitor has seen and\nanswers their repeat views on the device. On two deployed sites that differed only in spool, ",[42,332,333],{},"48 of 48\nrepeat views made no network request",", against one to six without it (measured). A repeat view used\n",[21,336,337],{},"0.53 J"," on a desktop processor against 1.29 J (measured). A first view of a page with an image, a\nvideo and an embedded player used 12.9 J against 32.8 J, almost all of it saved by swapping the embed\nfor a click-to-load facade (measured on one synthetic page, on a desktop and not a phone).",[17,340,341,342,349],{},"Spool costs the server about 5 ms of CPU per page and adds about two requests per new visitor. It\nonly pays off for visitors who read several pages (it breaks even at four views per visitor), so it\nis on for paid sites and off for free ones (measured, derived, modelled). The\n",[343,344,348],"a",{"href":345,"rel":346},"https:\u002F\u002Fdocs.drupflare.com\u002Fimpact\u002Fenergy\u002Fviews.html#what-spool-adds",[347],"nofollow","energy report"," shows the rows\nbehind each figure and where they don't move.",[11,351,355,367],{"emoji":352,"figure":353,"title":354},"🧩","85+","Contrib Modules Verified",[17,356,357,358,361,362,366],{},"This is Drupal 11 on PHP 8.5, with every extension Drupal needs. Webform, Paragraphs, Search API,\nMetatag, Pathauto, OpenID Connect, Redis and dozens more are ",[42,359,360],{},"verified by enabling them on a live site","\nand checking what they do, and the list grows every release. The ",[343,363,365],{"href":364},"\u002Ffixtures","fixtures page"," lists\nevery one, with how it was checked.",[17,368,369],{},"Existing sites can move over with drangler, which surveys the site first and tells you what will\nbreak before you start. Leaving is just as easy: every site exports its own database.",[11,371,374],{"emoji":372,"figure":326,"title":373},"🛠️","Servers to Patch",[17,375,376,377,380],{},"There is no operating system, web server or PHP-FPM pool to keep up to date. Cloudflare runs the\nplatform, and ",[42,378,379],{},"a site you are not using costs nothing to keep",". When logged-in traffic grows, read\nreplicas spread it across more objects without anyone reconfiguring anything.",[205,382,384],{"id":383},"your-own-servers-too","🏰 Your Own Servers, Too",[17,386,387,388,393,394,397,398,402],{},"Some sites cannot live on a public cloud: data-residency rules, a campus network, a contract that\nnames the hardware. ",[343,389,392],{"href":390,"rel":391},"https:\u002F\u002Fgithub.com\u002Fdrupflare\u002Fbastion",[347],"bastion"," runs ",[42,395,396],{},"the same Drupflare release on your own Linux servers"," as one binary, with the TLS, per-tenant limits up to a microVM each,\nstorage, tested backups and metrics that Cloudflare would otherwise provide. Its test suite serves\nthe released site unmodified. The ",[343,399,401],{"href":400},"\u002Fhow-to#on-your-own-servers","how-to guide"," has the setup.",[205,404,406],{"id":405},"and-it-does-not-stop-at-drupal","🧭 And It Does Not Stop at Drupal",[17,408,409,410,413,414,419,420,299,425,430,431,436],{},"The runtime underneath is not specific to Drupal. ",[42,411,412],{},"WordPress and Joomla are next",", followed by other\nWorkers apps such as ",[343,415,418],{"href":416,"rel":417},"https:\u002F\u002Fgithub.com\u002Fgmitch215\u002Fnuxtpress",[347],"nuxtpress",",\n",[343,421,424],{"href":422,"rel":423},"https:\u002F\u002Fgithub.com\u002Fgmitch215\u002FMyLoRA",[347],"MyLoRA",[343,426,429],{"href":427,"rel":428},"https:\u002F\u002Fgithub.com\u002Fearth-app\u002Fsmoke",[347],"smoke",", and\nyour own Worker templates deployed beside your CMS sites. Further out,\n",[343,432,435],{"href":433,"rel":434},"https:\u002F\u002Fgithub.com\u002Fgmitch215\u002Fgmux",[347],"gmux"," puts a real Linux machine behind a site.",[205,438,440],{"id":439},"where-the-numbers-come-from","🔎 Where the Numbers Come From",[17,442,443,444,447,448,453,454,459,460,45],{},"Speed figures are ",[42,445,446],{},"measured on deployed Cloudflare Workers"," and against nginx with PHP-FPM 8.5 serving\nthe same Drupal tree and database. Cost, energy, carbon and water are derived from those measurements\nand from published prices and grid factors. The best case is the headline; the method, the ranges and\nthe cases where a VPS wins are in the\n",[343,449,452],{"href":450,"rel":451},"https:\u002F\u002Fdocs.drupflare.com\u002Fimpact\u002Findex.html",[347],"impact report",", the\n",[343,455,458],{"href":456,"rel":457},"https:\u002F\u002Fdocs.drupflare.com\u002Ftechnical-report.html",[347],"technical report"," and the\n",[343,461,464],{"href":462,"rel":463},"https:\u002F\u002Fgithub.com\u002Fdrupflare\u002Fworker#readme",[347],"README",[466,467],"deploy-button",{},{"title":469,"searchDepth":470,"depth":470,"links":471},"",2,[472,473,474,475],{"id":207,"depth":470,"text":208},{"id":383,"depth":470,"text":384},{"id":405,"depth":470,"text":406},{"id":439,"depth":470,"text":440},[],"Up to 10,037x cheaper to run, 6.35x faster on the same continent, and up to 99.99% less energy than a production Drupal deployment.","md","Why Drupflare","A Drupal site is usually a server that runs all day for visitors who come a few times an hour. Drupflare runs the same site only while someone is asking for a page, from the Cloudflare location nearest to them. Almost everything below follows from that.",{},true,"\u002Fwhy",[],{"title":5,"description":477},[],"why","6SXSmiik2RrqbtycYxGJ2L89B5xUOYd7niAehadoj_4",1793683736803]