Syntax - Tasty Web Development Treats
Syntax - Tasty Web Development Treats

724: Potluck: Is Virtual DOM Bad?

Is the Virtual DOM Bad? Are keyboard shortcuts important? What is S3 storage? In this potluck episode of Syntax, Wes and Scott answer your questions. Show Notes 00:08 Welcome 01:27 Syntax Brought to you by Sentry.io 02:45 Welcome Randy, our new Producer! Randy’s YouTube 04:14 A ‘Canadian Podcast’ 04

Featured Speakers

Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers Host

Topics Discussed

Episode Summary

Executive Summary: This Syntax episode is a potluck-style Q&A covering templating vs interactivity libraries, in-app browser behavior, JavaScript generators, SvelteKit auth patterns, React’s virtual DOM debate, OG image testing, tree shaking with ESM, CDN vs S3 storage, developer tooling habits, and a pair of sick picks. The hosts emphasize pragmatic, server-side-first approaches, compile-time UI trends, and practical testing over assumptions.

Main Topics: Alpine.js and HTMX vs templating libraries: The hosts explain that Alpine.js and HTMX add client-side interactivity and server-driven HTML updates, but they do not replace templating languages like Pug, Handlebars, EJS, or JSX rendering. In-app browsers and web views: They discuss how iOS and Android in-app browsers are typically web views backed by Safari/Chrome engines, what to test, and why custom app browsers can inject scripts or affect privacy and behavior. Generators, iterables, and async iteration: A listener’s blog post sparks a deeper explanation of iterators, generator functions, async iterables, and how they help loop through streams and non-iterable data structures. Authentication and route protection in SvelteKit: The answer recommends server-side auth checks via cookies, middleware, and locals instead of client-side state machines/XState for enforcing KYC or restricted routes. React virtual DOM criticism: The hosts discuss why the virtual DOM is increasingly viewed as cumbersome compared with compile-time frameworks like Svelte, Solid, and newer Vue patterns. OG images, click-through tracking, and caching limits: They explain that OG image performance is hard to measure directly due to aggressive caching, but query params and UTM-style variants can be used to force refetches and compare outcomes. Tree shaking, ESM imports, and bundle size: A test shows that importing via export-star from a local module can still tree-shake unused exports, but doing similar patterns with CommonJS packages like Lodash can pull in entire libraries. S3 storage vs CDNs and personal tooling/sick picks: They contrast storage and delivery networks, then close with opinions on developer productivity tools and recommendations for Perplexity AI and Zojirushi appliances.

Key Arguments: Alpine.js and HTMX enhance HTML with interactivity and server fetching, but they are not templating engines; you still need a templating/rendering layer. In-app browsers mostly use the platform’s web view, so testing in Safari/Chrome/Firefox usually covers most cases, though app-specific web views can inject code and behave differently. Generator functions are valuable because they make non-iterables iterable and support async iteration over streams and chunks. Authentication and authorization should be enforced server-side in middleware, not by hiding client routes or relying on browser state alone. The virtual DOM adds complexity and is less appealing now that compile-time frameworks can target the DOM directly with less indirection. OG image effectiveness is difficult to measure cleanly because platforms cache aggressively; forcing a refetch via query parameters is one practical workaround. Tree shaking works well for local ESM exports, but import/export-star patterns with CommonJS packages can defeat it and bundle more than expected. S3 is storage, while CDNs are distribution; putting a CDN in front of storage improves global delivery and user experience. Developer tools and keyboard shortcuts are worth learning gradually because they compound over time, but they should not derail actual feature work.

Data Points: Podcast episode reference: Episode 568 - Referenced as the Syntax interview with Caleb Porzio about Alpine.js Podcast episode reference: Episode 709 - Referenced in the listener email about generators Podcast episode reference: Episode 718 - Referenced by Perplexity’s answer about React Server Components Estimated travel time: 1 hour 30 minutes - Typical trip to the mountains mentioned by Scott Departure time: 5:30 - Scott left for a 9:00 lesson but got stuck in traffic Lesson time: 9:00 - Mountain lesson they missed due to traffic Windfall/latency claim: 8 hours - Time it allegedly took to access older Riverside podcast downloads Cache duration: 7 days - Mentioned as the aggressive caching period for some social platforms/OG images Tooling learning pace: 2x - Compared to increasing podcast playback speed gradually; used as an analogy for learning shortcuts Experience duration: 10 years - Scott’s rice cooker replacement story and also his old streaming setup for course videos

Pivotal Quotes: "HTMX and Alpine.js are just added on top of your templating language." — Wes: Explaining that these libraries do not replace server-side or client-side templating engines "I think the virtual DOM is bad." — Scott: Scott’s blunt take during the discussion about React’s architecture "You need to do that server-side because this is no different than doing permissions and roles when you have a back-end." — Wes: Advice on protecting KYC routes and enforcing access control in SvelteKit

Implications: Listeners should favor server-enforced auth, understand the real role of HTMX/Alpine, and consider compile-time frameworks or simpler patterns where possible. The episode reinforces testing assumptions, especially for caching, bundle behavior, and device/browser differences.

🔓 Sign Up for Unlimited Episode Search

About Syntax - Tasty Web Development Treats

View all episodes from Syntax - Tasty Web Development Treats