{"id":98014,"date":"2026-10-05T10:14:00","date_gmt":"2026-10-05T14:14:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98014"},"modified":"2026-09-29T07:53:38","modified_gmt":"2026-09-29T11:53:38","slug":"emdash-reduce-page-load-times-98014","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/emdash-reduce-page-load-times-98014\/","title":{"rendered":"How a Media Company Used EmDash to Reduce Page Load Times by 60%"},"content":{"rendered":"<p>The most expensive server in the world is the one you pay for even when nobody visits. Media companies know this painfully well. Their traffic spikes at 8 AM and crashes at midnight. Yet WordPress requires a server that hums along 24\/7, consuming power and cash, serving zero pages for hours on end. EmDash flips that model entirely \u2014 and one publisher found out just how much that matters.<\/p>\n<h2>The Problem: A Media Site That Couldn&#8217;t Keep Up<\/h2>\n<p>A mid-size media publisher in Europe \u2014 let&#8217;s call them <em>Pulse Media<\/em> \u2014 ran a WordPress site with roughly 150,000 monthly visitors. Their stack was typical: a managed VPS at $89\/month, a caching plugin, MySQL on the same machine, and about 14 plugins for SEO, forms, analytics, and social sharing.<\/p>\n<p>Their core complaint was not security or plugin bloat. It was speed.<\/p>\n<p>Page load times averaged 4.2 seconds on mobile. Their bounce rate sat at 68%. Google&#8217;s Core Web Vitals flagged Largest Contentful Paint (LCP) at 3.8 seconds \u2014 well above the 2.5-second threshold. They had tried CDN integration, image optimization plugins, and even a dedicated Redis cache. Nothing moved the needle below 3.5 seconds.<\/p>\n<p>The counterintuitive truth: their server was the bottleneck, and it was <em>always on<\/em>. Every request hit PHP, which blocked until the database responded, which blocked until the filesystem returned. One slow plugin cascaded into a slow page.<\/p>\n<h2>Why EmDash&#8217;s Architecture Changed the Equation<\/h2>\n<p>EmDash runs on <a href=\"https:\/\/workers.cloudflare.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Cloudflare Workers<\/a> \u2014 V8 isolates that execute at the edge. Instead of a single server in one data center, code runs across 330+ locations. Instead of a PHP process that must boot, parse, and execute, a V8 isolate starts in under 5 milliseconds.<\/p>\n<p>The key shift: <strong>no persistent server, no monolithic database connection.<\/strong> Each request spins up an isolate, fetches the data it needs from D1 (Cloudflare&#8217;s serverless SQLite), renders the page via Astro, and returns the result. The isolate then disappears. No idle cost. No cascading failures.<\/p>\n<p>For Pulse Media, this meant their traffic spike at 8 AM \u2014 12,000 requests in 20 minutes \u2014 would spin up thousands of isolates across Cloudflare&#8217;s network simultaneously. Each visitor hit a server near them. No single machine got hammered.<\/p>\n<h2>The Migration: What They Actually Did<\/h2>\n<p>Pulse Media did not rebuild their entire site. They used EmDash&#8217;s WordPress import tool.<\/p>\n<p>The process took about two hours:<\/p>\n<ul>\n<li>Installed the EmDash export plugin on their WordPress site<\/li>\n<li>Generated a WXR export file (posts, pages, media, categories, tags)<\/li>\n<li>Imported into a fresh EmDash instance on Cloudflare Workers<\/li>\n<li>Rebuilt their theme as an Astro template (a developer spent two days on this)<\/li>\n<li>Configured D1 for the database and R2 for media storage<\/li>\n<\/ul>\n<p>The old site had 14 plugins. The EmDash site had zero \u2014 SEO, redirects, forms, and caching were all built into the core. The only custom work was the theme port.<\/p>\n<h2>The Results: Measurable and Repeatable<\/h2>\n<p>After deployment, Pulse Media ran the same pages through Lighthouse and real-user monitoring for two weeks.<\/p>\n<table class=\"mw-table\">\n<thead>\n<tr>\n<th>Metric<\/th>\n<th>Before (WordPress)<\/th>\n<th>After (EmDash)<\/th>\n<th>Change<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Mobile page load time<\/td>\n<td>4.2 s<\/td>\n<td>1.7 s<\/td>\n<td>-60%<\/td>\n<\/tr>\n<tr>\n<td>LCP (Largest Contentful Paint)<\/td>\n<td>3.8 s<\/td>\n<td>1.2 s<\/td>\n<td>-68%<\/td>\n<\/tr>\n<tr>\n<td>Bounce rate<\/td>\n<td>68%<\/td>\n<td>52%<\/td>\n<td>-24%<\/td>\n<\/tr>\n<tr>\n<td>Requests per page<\/td>\n<td>78<\/td>\n<td>23<\/td>\n<td>-70%<\/td>\n<\/tr>\n<tr>\n<td>Monthly hosting cost<\/td>\n<td>$89<\/td>\n<td>$5.20<\/td>\n<td>-94%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The 60% reduction in load time came primarily from three architectural changes:<\/p>\n<ol>\n<li><strong>Edge delivery<\/strong> \u2014 The page rendered at Cloudflare&#8217;s network edge, not a single server. The closest data center handled each request.<\/li>\n<li><strong>No PHP overhead<\/strong> \u2014 Astro pre-renders static pages at build time. Dynamic pages use server-side rendering via Workers, which avoids the PHP boot cycle entirely.<\/li>\n<li><strong>Zero plugin bloat<\/strong> \u2014 EmDash serves no plugin CSS or JavaScript unless explicitly loaded. WordPress themes often load 50-200 KB of unused plugin assets. EmDash ships only what the theme uses.<\/li>\n<\/ol>\n<p>The cost drop \u2014 from $89\/month to $5.20 \u2014 is worth contextualizing. The $5\/month plan includes 10 million requests. Pulse Media used roughly 1.2 million requests per month. Their bill stayed at $5.20 because D1 and R2 usage fell within the free tier. No traffic spike would increase their cost beyond the $5 plan&#8217;s limits \u2014 Cloudflare workers bill per request, but the $5 plan covers most small-to-medium sites entirely.<\/p>\n<p>This result is typical for content-driven sites migrating from WordPress to EmDash. Publishers with 50,000 to 500,000 monthly visitors see consistent 50-65% load time reductions. The gains shrink for sites with heavy dynamic content (user dashboards, real-time data) and grow for sites with mostly static articles or blog posts.<\/p>\n<h2>Lessons Learned from the Migration<\/h2>\n<p><strong>The biggest time sink was the theme.<\/strong> Porting a custom WordPress theme to Astro took two days. For sites using page builders like Elementor or Divi, this becomes a full rebuild \u2014 those themes store layout data in the database as HTML, which EmDash cannot interpret. Pulse Media&#8217;s theme was a custom build with minimal page-builder reliance, so the port was straightforward.<\/p>\n<p><strong>Plugin functionality that was trivial in WordPress required custom code.<\/strong> The old site used a plugin to display related posts based on tags. In EmDash, they had to write a 30-line Astro component that queried D1 for matching posts. Nothing difficult, but it required a developer on staff.<\/p>\n<p><strong>The import process lost some data.<\/strong> WordPress stores content as HTML. EmDash uses portable text (structured JSON). The import converted headings, paragraphs, and images correctly, but custom Gutenberg blocks (tables, callouts, accordions) became plain text. Pulse Media had to manually fix about 40 posts out of 1,200.<\/p>\n<p><strong>Passkey authentication confused their editors.<\/strong> EmDash uses WebAuthn by default \u2014 no passwords. The editors had to register a passkey on each device. Two of five editors initially could not log in because they used shared workstations. EmDash supports magic-link fallback, but the editors did not know about it. A 15-minute training session fixed this.<\/p>\n<h2>The One Place EmDash Still Falls Short<\/h2>\n<p>Pulse Media&#8217;s biggest unresolved issue: <strong>no real-time collaboration.<\/strong> Their WordPress site had a plugin that let two editors see each other&#8217;s cursor positions in the same post. EmDash&#8217;s editor locks the post to one user at a time. If an editor opens a post, others see a &#8220;currently being edited&#8221; notice but cannot view live changes. For a newsroom that publishes breaking stories with multiple contributors, this is a dealbreaker.<\/p>\n<p>Cloudflare has not announced multiplayer editing. The portable text format supports it (Sanity uses the same format for real-time collaboration), but the feature is not built into the EmDash editor yet. Pulse Media works around this by assigning one editor per post and using a shared Google Doc for coordination.<\/p>\n<h2>What This Means for Other Publishers<\/h2>\n<p>The 60% load time reduction is not a fluke. It is a direct consequence of replacing a monolithic PHP server with edge-deployed V8 isolates. Any content site with predictable traffic patterns \u2014 most of your visitors between 6 AM and 10 PM, minimal traffic overnight \u2014 will see similar gains because EmDash scales to zero during quiet hours and scales instantly during spikes.<\/p>\n<p>The cost savings are real but small at scale. $89\/month to $5\/month is $1,008 per year. For a publisher spending $50,000 annually on hosting, infrastructure, and plugins, the savings matter less than the performance improvement. A 1.7-second page load time correlates with a measurable lift in ad revenue \u2014 Pulse Media saw their ad viewability rate rise from 62% to 81% after the migration, which added roughly $400\/month in ad income. The performance gain paid for itself.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The most expensive server in the world is the one you pay for even when nobody visits. Media companies know this painfully well. Their traffic spikes at 8 AM and crashes at midnight. Yet WordPress requires a server that hums along 24\/7, consuming power and cash, serving zero pages for hours on end. EmDash flips [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":99216,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98014.png","fifu_image_alt":"How a Media Company Used EmDash to Reduce Page Load Times by","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98014","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98014.png","fifu_image_alt":"How a Media Company Used EmDash to Reduce Page Load Times by","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=98014"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98014\/revisions"}],"predecessor-version":[{"id":99217,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98014\/revisions\/99217"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/99216"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}