← Extractions

Better WebPerformance with Rails — Stefan Wintermeyer at wroclove.rb 2018

Stefan Wintermeyer's wroclove.rb 2018 talk on achieving sub-one-second page loads with Rails 5.2. Covers the network/render budget (TCP slow-start, TLS, HTML/CSS/JS pipeline), fragment and Russian-doll caching, HTTP ETag/Last-Modified caching, preheating static gzip pages served directly by nginx, HTTP/2, Brotli, preloading/prefetching, Active Storage, and the importance of a performance time budget.

Model
claude-opus-4-7
Ingestion
bfd8081b
Input tokens
108,477
fresh
34,672
cached
63,133
cache write
10,672
Output tokens
13,510
Duration
184.9s
Roundtrips
5
Tool calls
14
Cost
$0.00
Nodes/edges extracted
45 / 71
Read set (nodes/edges)
45 / 2

Nodes (45)

create Cache Preheating concept
kind (empty) concept
name (empty) Cache Preheating
slug (empty) cache-preheating
attrs (empty) {"category" => "practice"}
description (empty) Because writing the first cache entry on a user request is expensive, a regional site can use cron during off-hours t...
short_description (empty) Using cron to brute-force rebuild caches ahead of user requests.
create Heroku tool
kind (empty) tool
name (empty) Heroku
slug (empty) heroku
attrs (empty) {"category" => "platform"}
description (empty) De-facto standard PaaS for Rails; easy to start but comparatively slow and expensive as the app grows. Speaker recomm...
short_description (empty) Ruby-friendly PaaS for deploying web applications.
create Phoenix tool
kind (empty) tool
name (empty) Phoenix
slug (empty) phoenix
attrs (empty) {"category" => "framework"}
description (empty) Elixir web framework cited as dramatically faster than Rails (~10ms without caching for equivalent work). Speaker sug...
short_description (empty) Elixir web framework known for low-latency request handling.
create Elixir tool
kind (empty) tool
name (empty) Elixir
slug (empty) elixir
attrs (empty) {"category" => "language"}
description (empty) Language underlying the Phoenix framework. Mentioned as super fast and easy to test compared to Ruby.
short_description (empty) Functional, concurrent language on the BEAM VM.
update Better WebPerformance with Rails talk
description Talk at wroclove.rb 2018. Stefan Wintermeyer's talk at wroclove.rb 2018 on why the first page load must fit within a ~1-second budget and how t...
short_description Talk at wroclove.rb 2018. Talk on Rails 5.2 web performance, caching, and sub-second page loads.
update Stefan Wintermeyer person
attrs (empty) {"role" => "consultant/author/speaker"}
description Conference speaker. Conference speaker, Rails consultant (adesh consulting), and author of books on Ruby on Rails. Delivered 'Better WebP...
short_description Conference speaker. Ruby/Rails consultant, author, and conference speaker focused on web performance.
create Page Load Time Budget concept
kind (empty) concept
name (empty) Page Load Time Budget
slug (empty) page-load-time-budget
attrs (empty) {"category" => "practice"}
description (empty) The idea that a web page's first render should ideally complete in under one second, because users bounce rapidly aft...
short_description (empty) Target of keeping first-page render under one second, including mobile 3G.
create TCP Slow Start concept
kind (empty) concept
name (empty) TCP Slow Start
slug (empty) tcp-slow-start
attrs (empty) {"category" => "pattern"}
description (empty) TCP begins each connection with a small congestion window (~14KB first packet), then doubles each round-trip until er...
short_description (empty) TCP congestion-control mechanism where bandwidth ramps up from ~14KB.
create Waterfall Analysis concept
kind (empty) concept
name (empty) Waterfall Analysis
slug (empty) waterfall-analysis
attrs (empty) {"category" => "practice"}
description (empty) A waterfall chart shows each resource request (HTML, CSS, JS, images) with timing bands for DNS, connect, TLS, TTFB, ...
short_description (empty) Browser request timeline used to diagnose web-performance bottlenecks.
create Fragment Caching concept
kind (empty) concept
name (empty) Fragment Caching
slug (empty) fragment-caching
attrs (empty) {"category" => "pattern"}
description (empty) Rails view-level cache that stores rendered fragments keyed on a record. In the talk, wrapping each product row in a ...
short_description (empty) Caching rendered view fragments keyed by model to skip re-rendering.
create Russian Doll Caching concept
kind (empty) concept
name (empty) Russian Doll Caching
slug (empty) russian-doll-caching
attrs (empty) {"category" => "pattern"}
description (empty) Caching strategy where both the collection and its inner items are cached; when an inner cache is still valid, the ou...
short_description (empty) Nested fragment caches where outer caches reuse valid inner caches.
create HTTP Caching with ETag and Last-Modified concept
kind (empty) concept
name (empty) HTTP Caching with ETag and Last-Modified
slug (empty) http-caching-with-etag-and-last-modified
attrs (empty) {"category" => "pattern"}
description (empty) Browser sends stored ETag / If-Modified-Since; if still valid, server responds 304, saving both bandwidth and server-...
short_description (empty) Conditional HTTP requests that return 304 Not Modified to skip re-rendering.
create Static Page Caching via nginx concept
kind (empty) concept
name (empty) Static Page Caching via nginx
slug (empty) static-page-caching-via-nginx
attrs (empty) {"category" => "pattern"}
description (empty) By writing pre-rendered HTML (and pre-compressed .gz files) into Rails' public/cache directory, nginx can serve reque...
short_description (empty) Serving pre-rendered, pre-gzipped HTML directly from nginx without touching Rails.
create Preloading and Prefetching concept
kind (empty) concept
name (empty) Preloading and Prefetching
slug (empty) preloading-and-prefetching
attrs (empty) {"category" => "practice"}
description (empty) Header hints like dns-prefetch, preload, prefetch, and prerender let the page tell the browser to resolve DNS or fetc...
short_description (empty) HTML link hints telling browsers to fetch DNS/resources in advance.
create HTTP/2 Server Push concept
kind (empty) concept
name (empty) HTTP/2 Server Push
slug (empty) http-2-server-push
attrs (empty) {"category" => "pattern"}
description (empty) HTTP/2 feature allowing the server to push files to the client without a request. Powerful but tricky — the talk warn...
short_description (empty) Server proactively pushing resources before the client requests them.
create Performance Time Budget concept
kind (empty) concept
name (empty) Performance Time Budget
slug (empty) performance-time-budget
attrs (empty) {"category" => "practice"}
description (empty) An explicit, team-agreed ceiling (e.g. 2 seconds) for page load. Called out as the single most important tool: it giv...
short_description (empty) Organizational commitment to a page-load ceiling used to defend against feature bloat.
create nginx tool
kind (empty) tool
name (empty) nginx
slug (empty) nginx
attrs (empty) {"category" => "service"}
description (empty) Web server used in the talk to serve pre-rendered, pre-gzipped Rails cache pages directly from public/cache without c...
short_description (empty) High-performance HTTP server and reverse proxy.
create Apache HTTP Server tool
kind (empty) tool
name (empty) Apache HTTP Server
slug (empty) apache-http-server
attrs (empty) {"category" => "service"}
description (empty) Alternative to nginx for fronting Rails. Speaker says it doesn't matter which you pick; he personally prefers nginx.
short_description (empty) Widely-deployed open-source HTTP server.
create HTTP/2 tool
kind (empty) tool
name (empty) HTTP/2
slug (empty) http-2
attrs (empty) {"category" => "platform"}
description (empty) Recommended as an easy ~20% performance win over HTTP/1.1 with a one-line nginx config change. Works best with a sing...
short_description (empty) Binary, multiplexed successor to HTTP/1.1.
create Brotli tool
kind (empty) tool
name (empty) Brotli
slug (empty) brotli
attrs (empty) {"category" => "library"}
description (empty) Compression algorithm supported by all major browsers (Safari, Chrome, Firefox, Edge). Provides ~10–20% performance b...
short_description (empty) HTTP compression algorithm with better ratios than gzip.
create gzip tool
kind (empty) tool
name (empty) gzip
slug (empty) gzip
attrs (empty) {"category" => "library"}
description (empty) Standard HTTP compression. nginx can gzip on the fly, but pre-gzipping cached files saves CPU and time at request time.
short_description (empty) Ubiquitous HTTP compression algorithm.
create webpagetest.org tool
kind (empty) tool
name (empty) webpagetest.org
slug (empty) webpagetest-org
attrs (empty) {"category" => "service"}
description (empty) Public web-performance testing service used in the talk to show waterfall charts of the conference homepage and compa...
short_description (empty) Online service for measuring web performance and producing waterfalls.
create Active Storage tool
kind (empty) tool
name (empty) Active Storage
slug (empty) active-storage
attrs (empty) {"category" => "framework"}
description (empty) Rails 5.2 feature for managing image/file uploads. The talk recommends using it to generate multiple image output for...
short_description (empty) Rails framework for attaching files/images to models.
create WebP tool
kind (empty) tool
name (empty) WebP
slug (empty) webp
attrs (empty) {"category" => "library"}
description (empty) Modern image format that can be served to supporting browsers (e.g. Chrome) via Active Storage to reduce image payloa...
short_description (empty) Efficient image format by Google with smaller file sizes.
create Ruby tool
kind (empty) tool
name (empty) Ruby
slug (empty) ruby
attrs (empty) {"category" => "language"}
description (empty) The language Rails is built on. The talk emphasizes Ruby is inherently slow and upgrading to Ruby 2.5 can yield rough...
short_description (empty) Dynamic, object-oriented programming language.
create Akamai tool
kind (empty) tool
name (empty) Akamai
slug (empty) akamai
attrs (empty) {"category" => "service"}
description (empty) Example CDN/edge service that handles image compression and delivers optimal variants per client. Considered a conven...
short_description (empty) Commercial CDN offering caching, compression, and image optimization.
create Faker tool
kind (empty) tool
name (empty) Faker
slug (empty) faker
attrs (empty) {"category" => "library"}
description (empty) Used in the talk's seeds.rb to populate the sample webshop (products, categories, users, reviews) with realistic samp...
short_description (empty) Ruby gem generating realistic fake data for seeds and tests.
create adesh consulting company
kind (empty) company
name (empty) adesh consulting
slug (empty) adesh-consulting
attrs (empty) {"industry" => "software consulting"}
description (empty) Stefan Wintermeyer's consulting company. Its homepage is used in the talk as a reference example of a very fast-rende...
short_description (empty) Stefan Wintermeyer's Ruby on Rails consulting business.
create Google company
kind (empty) company
name (empty) Google
slug (empty) google
attrs (empty) {"industry" => "internet"}
description (empty) Referenced for a classic experiment slowing search response time by 100ms for a user subgroup; over weeks, bounce/beh...
short_description (empty) Search and cloud company whose latency experiments are cited.
create Rails 5.2 tool
kind (empty) tool
name (empty) Rails 5.2
slug (empty) rails-5-2
attrs (empty) {"category" => "framework"}
description (empty) Rails release used throughout the talk's sample webshop. Ships Active Storage and defaults that enable Russian-doll c...
short_description (empty) Version of Ruby on Rails with Active Storage and Russian-doll caching defaults.
create High Performance Browser Networking resource
kind (empty) resource
name (empty) High Performance Browser Networking
slug (empty) high-performance-browser-networking
attrs (empty) {"type" => "book"}
description (empty) Recommended as the 'web performance Bible' — a framework-agnostic reference covering the network stack, graphic forma...
short_description (empty) Reference book on web/network performance by Ilya Grigorik.
create Stefan Wintermeyer's Rails 5.2 Book resource
kind (empty) resource
name (empty) Stefan Wintermeyer's Rails 5.2 Book
slug (empty) stefan-wintermeyer-s-rails-5-2-book
attrs (empty) {"type" => "book"}
description (empty) Speaker's new book on Rails 5.2, promoted at the end of the talk with a discount code for the first 100 buyers.
short_description (empty) Stefan Wintermeyer's book on Ruby on Rails 5.2.
create Set a page-load time budget takeaway
kind (empty) takeaway
name (empty) Set a page-load time budget
slug (empty) set-a-page-load-time-budget
attrs (empty) {"type" => "recommendation"}
description (empty) The single most important web-performance tool is agreeing on a concrete time budget (e.g. 2 seconds) and using it as...
short_description (empty) Define an explicit page-load ceiling organization-wide.
create Prefer DB-derived columns over recomputed values takeaway
kind (empty) takeaway
name (empty) Prefer DB-derived columns over recomputed values
slug (empty) prefer-db-derived-columns-over-recomputed-values
attrs (empty) {"type" => "recommendation"}
description (empty) Instead of recomputing aggregates like a product's star rating on every render, store them as columns updated via aft...
short_description (empty) Store rarely-changing derived values (e.g. number_of_stars) in the DB via callbacks.
create Keep cache keys simple takeaway
kind (empty) takeaway
name (empty) Keep cache keys simple
slug (empty) keep-cache-keys-simple
attrs (empty) {"type" => "warning"}
description (empty) Warning from experience: elaborately-constructed cache keys can take longer to compute than rendering the view withou...
short_description (empty) Complex cache keys can cost more to compute than the render they save.
create Use touch: true for fragment cache invalidation takeaway
kind (empty) takeaway
name (empty) Use touch: true for fragment cache invalidation
slug (empty) use-touch-true-for-fragment-cache-invalidation
attrs (empty) {"type" => "recommendation"}
description (empty) When caching a parent fragment that depends on child records (e.g. reviews of a product), the child's belongs_to must...
short_description (empty) Add touch: true on child associations so parents' cache keys invalidate.
create Switch on HTTP/2 takeaway
kind (empty) takeaway
name (empty) Switch on HTTP/2
slug (empty) switch-on-http-2
attrs (empty) {"type" => "recommendation"}
description (empty) Turning on HTTP/2 is a one-line nginx config change that yields roughly 20% performance improvement; prefer a single ...
short_description (empty) Enable HTTP/2 in nginx for a ~20% boost with minimal effort.
create Prefer Brotli over gzip when available takeaway
kind (empty) takeaway
name (empty) Prefer Brotli over gzip when available
slug (empty) prefer-brotli-over-gzip-when-available
attrs (empty) {"type" => "recommendation"}
description (empty) All major browsers support Brotli; enabling it alongside gzip offers better compression ratios and lower server CPU, ...
short_description (empty) Brotli saves 10–20% bytes and CPU vs gzip, with automatic gzip fallback.
create Serve preheated static pages via nginx takeaway
kind (empty) takeaway
name (empty) Serve preheated static pages via nginx
slug (empty) serve-preheated-static-pages-via-nginx
attrs (empty) {"type" => "recommendation"}
description (empty) For maximum speed, write fully-rendered (and pre-compressed) HTML to the public/cache directory during off-peak cron ...
short_description (empty) Pre-render and pre-gzip pages to public/cache so nginx serves them without touching Rails.
create Upgrade Ruby version for free speed takeaway
kind (empty) takeaway
name (empty) Upgrade Ruby version for free speed
slug (empty) upgrade-ruby-version-for-free-speed
attrs (empty) {"type" => "recommendation"}
description (empty) Keeping Ruby on the latest stable release is a trivial way to reclaim performance; the speaker cites roughly 10% gain...
short_description (empty) New Ruby releases (e.g. 2.5) can bring ~10% speedups with no code change.
create CDN is not always the answer takeaway
kind (empty) takeaway
name (empty) CDN is not always the answer
slug (empty) cdn-is-not-always-the-answer
attrs (empty) {"type" => "insight"}
description (empty) CDNs matter for globally-distributed traffic (e.g. firmware rollouts), but for regional apps with ~1M users they ofte...
short_description (empty) CDNs help global distribution but can hurt when HTTP/2 would be faster with one origin.
create Is rendering from cached pages with server-side includes possible in Rails? question
kind (empty) question
name (empty) Is rendering from cached pages with server-side includes possible in Rails?
slug (empty) is-rendering-from-cached-pages-with-server-side-includes-possible-in-rails
attrs (empty) {"answer_summary" => "Essentially another form of fragment caching; also consider Ruby version upgrades and code-leve...
description (empty) Audience question about whether Rails supports server-side includes in a cached static page so a block can be re-rend...
short_description (empty) Asks about ESI-style partial re-rendering from a cached static page.
create Does caching still help for complex apps with many models? question
kind (empty) question
name (empty) Does caching still help for complex apps with many models?
slug (empty) does-caching-still-help-for-complex-apps-with-many-models
attrs (empty) {"answer_summary" => "Yes — it gets harder with more models and wrong keys surface in production, but given Ruby's sp...
description (empty) Audience question (prefaced with the 'cache invalidation and naming' joke). Speaker acknowledges it becomes complicat...
short_description (empty) Asks whether caching scales beyond simple apps with few models.
create Aren't query optimizations a better first step than caching? question
kind (empty) question
name (empty) Aren't query optimizations a better first step than caching?
slug (empty) aren-t-query-optimizations-a-better-first-step-than-caching
attrs (empty) {"answer_summary" => "Optimize queries first in principle, but in this Rails example the view rendering (not AR) domi...
description (empty) Audience remark that optimizing queries and eager-loading can remove the need for caching and avoid premature optimiz...
short_description (empty) Asks whether N+1 fixes/eager loading should come before caching.
create Should touch on belongs_to be avoided in complex apps? question
kind (empty) question
name (empty) Should touch on belongs_to be avoided in complex apps?
slug (empty) should-touch-on-belongs_to-be-avoided-in-complex-apps
attrs (empty) {"answer_summary" => "Keep touch for typical has_many sizes — it's the best way to sync fragment caches. Remove it on...
description (empty) Audience member argues callbacks and touch in ActiveRecord should be removed in complex apps because touching parents...
short_description (empty) Asks whether touching parents via callbacks causes performance issues at scale.

Edges (71)

create Better WebPerformance with RailsaboutPerformance Time Budget
context (empty) Closes on time budget as the most important tool.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 0135bc8b-2f02-48cb-b758-d8a8cdb37557
create Better WebPerformance with Railsaboutnginx
context (empty) Recommended front-end server for caching and HTTP/2.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 29651d23-1c51-4579-9ac2-30a89b8a3c7f
create Better WebPerformance with RailsaboutApache HTTP Server
context (empty) Mentioned as equivalent alternative to nginx.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 3c59de07-a60f-42e0-8eca-87a3c94fb3cf
create Better WebPerformance with RailsaboutHTTP/2
context (empty) Recommends enabling HTTP/2 for ~20% gain.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 09bad78e-f8a8-4348-a1ef-1dce44d689a5
create Better WebPerformance with RailsaboutBrotli
context (empty) Recommends Brotli over gzip.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) a02f5458-efb6-4935-9754-ad96a3c66aa4
create Better WebPerformance with Railsaboutgzip
context (empty) Baseline compression; recommends pre-gzipping cached files.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) f6c3f711-3d84-4a27-97b8-8d67122c107d
create Better WebPerformance with Railsaboutwebpagetest.org
context (empty) Tool used to produce demonstration waterfalls.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 7fee5f04-a7ee-4416-adf4-23348a934b12
create Better WebPerformance with RailsaboutActive Storage
context (empty) Recommends using for multi-format image delivery.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 2834fe94-5598-4e2b-ae0f-322d38f50180
create Better WebPerformance with RailsaboutWebP
context (empty) Suggested as Chrome-targeted image format via Active Storage.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 59fe4869-6856-452b-973a-54280672f2d2
create Better WebPerformance with RailsaboutHeroku
context (empty) Discusses Heroku vs bare-metal trade-offs.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) d3785e15-2805-4486-a633-6e785e4f8ae3
create Prefer Brotli over gzip when availablefrom_talkBetter WebPerformance with Rails
context (empty) Brotli section at end of talk.
relation (empty) from_talk
source_node_id (empty) 2d5c33bf-c160-4c36-91b1-e32ede103182
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Serve preheated static pages via nginxfrom_talkBetter WebPerformance with Rails
context (empty) Public/cache directory + expire_cache hook strategy.
relation (empty) from_talk
source_node_id (empty) bbeac90f-d63e-4606-93df-b3ac4415180c
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Upgrade Ruby version for free speedfrom_talkBetter WebPerformance with Rails
context (empty) Raised in Q&A about additional server-side improvements.
relation (empty) from_talk
source_node_id (empty) 9c5b4ee4-f87f-4c95-8817-76589b0491d8
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create CDN is not always the answerfrom_talkBetter WebPerformance with Rails
context (empty) Discussed in CDN vs HTTP/2 section.
relation (empty) from_talk
source_node_id (empty) e92473d7-2a3c-4392-bbd1-4eaf6be660e3
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Set a page-load time budgetaboutPerformance Time Budget
context (empty) Takeaway encapsulates the time-budget concept.
relation (empty) about
source_node_id (empty) 7dea7d8c-9087-489c-b88b-13129ffd1076
target_node_id (empty) 0135bc8b-2f02-48cb-b758-d8a8cdb37557
create Prefer DB-derived columns over recomputed valuesaboutFragment Caching
context (empty) Complements fragment caching by avoiding recomputation.
relation (empty) about
source_node_id (empty) 2903fcea-b8e3-4711-a5fc-b64c75952c0e
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
update Stefan WintermeyerauthoredBetter WebPerformance with Rails
context (empty) Delivered the talk at wroclove.rb 2018.
update Better WebPerformance with Railspresented_atwroclove.rb 2018
context (empty) Conference where the talk was given.
create Stefan Wintermeyerattendedwroclove.rb 2018
context (empty) Attended as a speaker.
relation (empty) attended
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Stefan Wintermeyerworks_atadesh consulting
attrs (empty) {"role" => "consultant"}
context (empty) Uses his adesh consulting homepage as a fast-page example.
relation (empty) works_at
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 2a2e2b8c-7ae0-482f-8290-8303d5f6a454
create Stefan WintermeyerauthoredStefan Wintermeyer's Rails 5.2 Book
context (empty) Promoted his own Rails 5.2 book at the end of the talk.
relation (empty) authored
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 9308c5d1-0cb2-4354-bb5c-e174dadfe15e
create Better WebPerformance with RailsaboutRuby on Rails
context (empty) Talk is about improving web performance of Rails apps.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Better WebPerformance with RailsaboutRails 5.2
context (empty) Uses Rails 5.2 sample webshop throughout.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) af2a39f2-b541-4e8a-a4da-ea9ede14edbb
create Better WebPerformance with RailsaboutPage Load Time Budget
context (empty) Frames the entire talk around a sub-1s render goal.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 3defa061-0342-47cc-a53f-1fc7904e0d2b
create Better WebPerformance with RailsaboutTCP Slow Start
context (empty) Explains TCP slow-start as a latency floor.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 51a2ea2f-87fe-400a-8ce9-cc25334bb719
create Better WebPerformance with RailsaboutWaterfall Analysis
context (empty) Demonstrates waterfall diagnosis via webpagetest.org.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 210c3389-1347-441b-8655-7f62d5e91450
create Better WebPerformance with RailsaboutFragment Caching
context (empty) Primary caching technique demonstrated.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
create Better WebPerformance with RailsaboutRussian Doll Caching
context (empty) Extends fragment caching to nested caches.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) bb9e003c-f613-4427-9a5d-13093f705d50
create Better WebPerformance with RailsaboutHTTP Caching with ETag and Last-Modified
context (empty) Demonstrates fresh_when for 304 responses.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 265c76a9-3f4c-4741-a7e5-0e58f131c9bb
create Better WebPerformance with RailsaboutCache Preheating
context (empty) Uses cron to pre-populate caches overnight.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 99428f5f-05de-416f-9625-11b9f38c919c
create Better WebPerformance with RailsaboutStatic Page Caching via nginx
context (empty) Describes writing cached pages to public/cache for nginx to serve directly.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 33cd1002-0945-428e-8ee7-464137a06ed2
create Better WebPerformance with RailsaboutPreloading and Prefetching
context (empty) Covers dns-prefetch, preload, prefetch, prerender hints.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 48235abe-6f2b-44bf-8ea8-ee16f31ab351
create Better WebPerformance with RailsaboutHTTP/2 Server Push
context (empty) Notes server push is powerful but tricky.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) e0dd4355-3b4c-4720-85dc-9d9ee4e1e7aa
create Better WebPerformance with RailsaboutPhoenix
context (empty) Referenced as a much faster alternative for greenfield projects.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 14a5108f-b80c-44ea-b8a1-fb8fbf5812e4
create Better WebPerformance with RailsaboutElixir
context (empty) Language underlying Phoenix, noted as fast and easy to test.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) ea3e988a-8cb9-4418-a809-6f894b77c081
create Better WebPerformance with RailsaboutRuby
context (empty) Notes Ruby's speed ceiling and upgrade gains.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Better WebPerformance with RailsaboutAkamai
context (empty) CDN example discussed in Q&A.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) c62968bb-915c-446f-8d4c-3519776232d8
create Better WebPerformance with RailsaboutFaker
context (empty) Used to seed the sample webshop.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 52317669-ba75-49db-915b-af5132786399
create Better WebPerformance with RailsaboutGoogle
context (empty) Cites Google latency experiment showing 100ms slowdown changes user behavior.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) e4742ca5-3cbb-4688-baae-f26d90b4226b
create Better WebPerformance with RailsaboutHigh Performance Browser Networking
context (empty) Recommends as the deeper follow-up reference.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 09496535-92a3-413b-87e1-d71d6505ee86
create Better WebPerformance with RailsaboutStefan Wintermeyer's Rails 5.2 Book
context (empty) Promoted at the end of the talk.
relation (empty) about
source_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
target_node_id (empty) 9308c5d1-0cb2-4354-bb5c-e174dadfe15e
create Stefan WintermeyerrecommendsHigh Performance Browser Networking
context (empty) Called it the 'web performance Bible'.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 09496535-92a3-413b-87e1-d71d6505ee86
create Stefan WintermeyerrecommendsHTTP/2
context (empty) Recommends enabling HTTP/2 for a ~20% boost.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 09bad78e-f8a8-4348-a1ef-1dce44d689a5
create Stefan WintermeyerrecommendsBrotli
context (empty) Recommends Brotli over gzip where supported.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) a02f5458-efb6-4935-9754-ad96a3c66aa4
create Stefan Wintermeyerrecommendsnginx
context (empty) Prefers nginx for serving pre-cached, pre-gzipped pages.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 29651d23-1c51-4579-9ac2-30a89b8a3c7f
create Stefan WintermeyerrecommendsActive Storage
context (empty) Recommends for serving modern image formats.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 2834fe94-5598-4e2b-ae0f-322d38f50180
create Stefan WintermeyerrecommendsPhoenix
context (empty) Suggests Phoenix for greenfield projects needing top speed.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 14a5108f-b80c-44ea-b8a1-fb8fbf5812e4
create Stefan WintermeyerrecommendsPerformance Time Budget
context (empty) Calls budget-setting the single most important tool.
relation (empty) recommends
source_node_id (empty) 1a3c4d6f-185c-46fe-b843-15dba68dc025
target_node_id (empty) 0135bc8b-2f02-48cb-b758-d8a8cdb37557
create Set a page-load time budgetfrom_talkBetter WebPerformance with Rails
context (empty) Closing recommendation of the talk.
relation (empty) from_talk
source_node_id (empty) 7dea7d8c-9087-489c-b88b-13129ffd1076
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Prefer DB-derived columns over recomputed valuesfrom_talkBetter WebPerformance with Rails
context (empty) Demonstrated by storing number_of_stars as a column via callbacks.
relation (empty) from_talk
source_node_id (empty) 2903fcea-b8e3-4711-a5fc-b64c75952c0e
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Keep cache keys simplefrom_talkBetter WebPerformance with Rails
context (empty) Warning given during fragment caching section.
relation (empty) from_talk
source_node_id (empty) eed68747-6e2e-43c7-adab-bd79b05dfb69
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Use touch: true for fragment cache invalidationfrom_talkBetter WebPerformance with Rails
context (empty) Shown on the reviews belongs_to product relationship.
relation (empty) from_talk
source_node_id (empty) 8023c41a-463f-40a2-938f-1054dee5986b
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Switch on HTTP/2from_talkBetter WebPerformance with Rails
context (empty) Recommended with a one-line nginx config change.
relation (empty) from_talk
source_node_id (empty) 523c1f19-bf07-4915-beaf-6dd73c5e4152
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Use touch: true for fragment cache invalidationaboutFragment Caching
context (empty) Directly about fragment cache key invalidation.
relation (empty) about
source_node_id (empty) 8023c41a-463f-40a2-938f-1054dee5986b
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
create Switch on HTTP/2aboutHTTP/2
context (empty) Recommendation about enabling HTTP/2.
relation (empty) about
source_node_id (empty) 523c1f19-bf07-4915-beaf-6dd73c5e4152
target_node_id (empty) 09bad78e-f8a8-4348-a1ef-1dce44d689a5
create Prefer Brotli over gzip when availableaboutBrotli
context (empty) Recommendation about Brotli compression.
relation (empty) about
source_node_id (empty) 2d5c33bf-c160-4c36-91b1-e32ede103182
target_node_id (empty) a02f5458-efb6-4935-9754-ad96a3c66aa4
create Serve preheated static pages via nginxaboutStatic Page Caching via nginx
context (empty) Concrete takeaway for nginx static cache pattern.
relation (empty) about
source_node_id (empty) bbeac90f-d63e-4606-93df-b3ac4415180c
target_node_id (empty) 33cd1002-0945-428e-8ee7-464137a06ed2
create Upgrade Ruby version for free speedaboutRuby
context (empty) About Ruby version upgrades.
relation (empty) about
source_node_id (empty) 9c5b4ee4-f87f-4c95-8817-76589b0491d8
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create CDN is not always the answeraboutHTTP/2
context (empty) HTTP/2's single-connection preference informs the CDN trade-off.
relation (empty) about
source_node_id (empty) e92473d7-2a3c-4392-bbd1-4eaf6be660e3
target_node_id (empty) 09bad78e-f8a8-4348-a1ef-1dce44d689a5
create Is rendering from cached pages with server-side includes possible in Rails?asked_atBetter WebPerformance with Rails
context (empty) Audience Q&A question.
relation (empty) asked_at
source_node_id (empty) 8bf691a8-c6c1-44e5-be01-66014385f2ce
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Does caching still help for complex apps with many models?asked_atBetter WebPerformance with Rails
context (empty) Audience Q&A question.
relation (empty) asked_at
source_node_id (empty) e90ebcc0-973d-407e-88da-f13e3338a21f
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Aren't query optimizations a better first step than caching?asked_atBetter WebPerformance with Rails
context (empty) Audience Q&A remark.
relation (empty) asked_at
source_node_id (empty) acf2a1ca-aa9d-4b14-bf0c-5473fd0599ce
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Should touch on belongs_to be avoided in complex apps?asked_atBetter WebPerformance with Rails
context (empty) Audience Q&A challenge about ActiveRecord callbacks.
relation (empty) asked_at
source_node_id (empty) 774b5519-af96-4ae3-9306-f31778d58255
target_node_id (empty) 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Is rendering from cached pages with server-side includes possible in Rails?aboutFragment Caching
context (empty) Answer framed around fragment-caching idea.
relation (empty) about
source_node_id (empty) 8bf691a8-c6c1-44e5-be01-66014385f2ce
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
create Does caching still help for complex apps with many models?aboutFragment Caching
context (empty) Discusses scaling of caching strategies.
relation (empty) about
source_node_id (empty) e90ebcc0-973d-407e-88da-f13e3338a21f
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
create Aren't query optimizations a better first step than caching?aboutFragment Caching
context (empty) Contrasts query optimization with view-layer caching.
relation (empty) about
source_node_id (empty) acf2a1ca-aa9d-4b14-bf0c-5473fd0599ce
target_node_id (empty) e5570dc6-83ab-4f05-bf5d-1a5b8e93d9e6
create Should touch on belongs_to be avoided in complex apps?aboutUse touch: true for fragment cache invalidation
context (empty) Directly challenges the touch recommendation.
relation (empty) about
source_node_id (empty) 774b5519-af96-4ae3-9306-f31778d58255
target_node_id (empty) 8023c41a-463f-40a2-938f-1054dee5986b
create PhoenixusesElixir
context (empty) Phoenix is built on Elixir.
relation (empty) uses
source_node_id (empty) 14a5108f-b80c-44ea-b8a1-fb8fbf5812e4
target_node_id (empty) ea3e988a-8cb9-4418-a809-6f894b77c081
create Ruby on RailsusesRuby
context (empty) Rails is written in Ruby.
relation (empty) uses
source_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Rails 5.2usesActive Storage
context (empty) Rails 5.2 ships Active Storage.
relation (empty) uses
source_node_id (empty) af2a39f2-b541-4e8a-a4da-ea9ede14edbb
target_node_id (empty) 2834fe94-5598-4e2b-ae0f-322d38f50180
create Rails 5.2related_toRuby on Rails
context (empty) Rails 5.2 is a version of Ruby on Rails.
relation (empty) related_to
source_node_id (empty) af2a39f2-b541-4e8a-a4da-ea9ede14edbb
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee

Read set

45 nodes

talk Better WebPerformance with Rails search_nodes+get_node_edges talk Optimizing performance in Rails apps with GraphQL layer search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes talk Securing Rails applications search_nodes talk How I brought LCP down to under 350 ms search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Multi-region data governance in Rails application search_nodes concept Rails Reload-Safe ES Configuration search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk Component Driven UI with ViewComponent search_nodes talk MVCC for Ruby developers search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk Towards the post framework future search_nodes talk Orchestrating video transcoding in ruby search_nodes talk Building on Bluesky's AT Protocol with Ruby search_nodes talk Building uls for microservices search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes talk Spice up your life with eql search_nodes tool dry-struct search_nodes talk Event Sourcing and Actor model in Ruby search_nodes person Stefan Wintermeyer search_nodes tool RealtimeBoard search_nodes person Adam Okoń search_nodes talk Events events events search_nodes person Julik Tarkhanov search_nodes talk Kamal is not harder than your PaaS search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes tool Ruby on Rails search_nodes talk JRuby: Professional-Grade Ruby search_nodes talk Business logic in Ruby search_nodes tool rails_event_store search_nodes talk Handling file uploads for modern developer search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes talk Applying CQRS & Event Sourcing on Rails applications search_nodes

2 edges