Imagemin Guard (j9t) | | 527 |
packages, npm, images, compression, jpeg, png, gif, webp, avif |
A CLS Punishment for Progressive Enhancement? (bel/pic) | | 526 |
web-vitals, progressive-enhancement |
Everything You Need to Know About Web Performance (in 5 Minutes) | | 525 |
web-vitals, compression |
Style Scoping Versus Shadow DOM: Which Is Fastest? (nol) | | 524 |
selectors, scope, dom, shadow-dom, comparisons, metrics |
How to Remove 99% of JavaScript From Main Thread (wea) | | 523 |
videos, how-tos, javascript |
What We’ve Learned From One Year of Real User Monitoring Data on GOV.UK | | 522 |
monitoring, metrics |
Measuring the Performance of Typefaces for Users II (sma) | | 521 |
typography, fonts |
Measuring the Performance of Typefaces for Users (sma) | | 520 |
typography, fonts |
Don’t Sink Your Website With Third Parties (sma) | | 519 |
embed-code, dependencies |
Two Lines of CSS That Boosts 7× Rendering Performance | | 518 |
css, rendering |
Conditionally Loading CSS or Any Resource Using Media Queries (ami) | | 517 |
html, media-queries |
Rethinking Server-Timing as a Critical Monitoring Tool (sma) | | 516 |
time, http, metrics, monitoring |
Don’t Fight the Browser Preload Scanner (mal/dev) | | 515 |
browsers, html, parsing |
How to Use Google CrUX to Analyze and Compare the Performance of JS Frameworks (sma) | | 514 |
how-tos, google, metrics, javascript, frameworks |
Performance Game Changer: Browser Back/Forward Cache (tun/sma) | | 513 |
browsers, caching, web-vitals |
A Management Maturity Model for Performance (sli) | | 512 |
|
Get to Know Your Browser’s Performance Profiler | | 511 |
browsers, tooling, profiling |
Understanding the Performance Impact of Anti-Flicker Snippets (spe) | | 510 |
web-vitals |
Is Measuring Speed a Useful Metric for Design Systems? (amy+) | | 509 |
videos, metrics, design-systems |
Faster Initialization of Instances With New Class Features | | 508 |
browsers, javascript, javascript-engines, v8 |
How to Improve Core Web Vitals (8 Ways) | | 507 |
how-tos, web-vitals |
The Ultimate Guide to Optimizing JavaScript for Quick Page Loads (ste/bui) | | 506 |
guides, javascript, optimization |
Core Web Vitals: Finding Common Ground Between SEOs and Developers (moz) | | 505 |
web-vitals, seo, metrics |
How to Optimize Your LCP (with Visuals) (ste) | | 504 |
how-tos, web-vitals, optimization |
Picture Perfect Images With the Modern “<img>” Element (add) | | 503 |
images, html, web-vitals |
Optimising Largest Contentful Paint (css) | | 502 |
web-vitals |
Speed Needs Design, or: You Can’t Delight Users You’ve Annoyed | | 501 |
design, user-experience |
The Web Is for Everyone: Our Vision for the Evolution of the Web (moz) | | 500 |
web, outlooks, privacy, security, accessibility, user-experience |
Optimising Core Web Vitals on SPAs (sim) | | 499 |
web-vitals, single-page-apps, optimization |
Improving Your User Experience to Reduce Bounce Rates (uxm) | | 498 |
user-experience, usability, seo |
Performance Tests on Common JavaScript Array Methods (hac) | | 497 |
testing, javascript, arrays |
The Impact That High Quality Mark-Up Can Have on Accessibility, Performance, and Discoverability | | 496 |
videos, html, accessibility |
Optimizing SVG Patterns to Their Smallest Size (css) | | 495 |
svg, images |
The Weirdly Obscure Art of Streamed HTML | | 494 |
html, streaming |
Making the World’s Fastest Website, and Other Mistakes | | 493 |
mistakes |
Ten Years of Page Bloat: What Have We Learned? (spe) | | 492 |
web-vitals, user-experience |
Performance Signals for Customizing Website UX (tun/sma) | | 491 |
user-experience, web-vitals, customization |
A New Speed Milestone for Chrome (dev) | | 490 |
browsers, google, chrome |
7 Ways to Achieve a Faster Core Web Vitals Score (hac) | | 489 |
web-vitals |
Should Frontend Devs Care About Performance? | | 488 |
|
Top 2021 CSS Frameworks Report: The CSS File Sizes (cit) | | 487 |
studies, research, frameworks, css |
Improving a CDN’s Cache Hit Ratio (erw) | | 486 |
content-delivery, caching |
How to Make MPAs That Are as Fast as SPAs (cfe) | | 485 |
how-tos, multi-page-apps, single-page-apps |
Minimizing Google Fonts by Only Loading It for Certain Characters (ami) | | 484 |
typography, google, fonts, minimalism |
Core Web Vitals: What Next? (moz) | | 483 |
web-vitals, seo |
The Difference Between Brotli and Gzip Compression Algorithms to Speed Up Your Site | | 482 |
compression, brotli, gzip |
This Is Why Your Node.js Application Is Slow | | 481 |
nodejs |
Reducing the Web’s Carbon Footprint: Optimizing Social Media Embeds (mic/sma) | | 480 |
social-media, embed-code, sustainability |
Improving JavaScript Bundle Performance With Code-Splitting (cod/sma) | | 479 |
javascript, bundling, code-splitting, optimization |
Speed Matters, but It Isn’t Everything | | 478 |
user-experience, metrics |
Caching Header Best Practices (sim) | | 477 |
caching, http, http-headers, best-practices |
Optimize Your PNGs With Oxipng and pre-commit (ada) | | 476 |
images, png, compression, tooling |
Big Images, Blazingly Fast | | 475 |
images, quality |
How to Avoid Layout Shifts Caused by Web Fonts (sim) | | 474 |
how-tos, user-experience, fonts |
Website Performance and the Planet | | 473 |
sustainability, caching |
Memory Leaks: The Forgotten Side of Web Performance (nol) | | 472 |
memory |
Improving WordPress Performance: An Open Letter (erw) | | 471 |
wordpress, css, javascript |
Page Visibility: If a Tree Falls in the Forest… | | 470 |
web-vitals, user-experience |
Exposing Mid-Resource LCP Values | | 469 |
web-vitals |
A Unified Theory of Web Performance (sli) | | 468 |
|
Using Diagnostic Metrics | | 467 |
metrics |
Practical Tips for Load-Testing Web Applications | | 466 |
testing, tips-and-tricks, web-apps |
The Business Case for Performance | | 465 |
economics |
Faster Websites by Using Less HTML (j9t) | | 464 |
cross-posts, html, optimization, minimalism |
Redirect Liquidation (tim) | | 463 |
optimization, redirecting |
Frontend Web Performance: The Essentials | | 462 |
fundamentals, rendering |
Web Performance, Core Web Vitals, and Vanity Metrics | | 461 |
web-vitals, metrics |
Hands On With the New Responsiveness Metrics | | 460 |
responsive-design, metrics |
Explain Like I’m Five: Web Performance Optimization (sto) | | 459 |
optimization |
Performance Implications of JavaScript Errors | | 458 |
javascript, errors |
Defer Non-Critical Resources | | 457 |
html |
Caching: Understanding the Scope | | 456 |
caching |
Test Your Product on a Crappy Laptop (eri/css) | | 455 |
testing, usability |
HTTP Compression | | 454 |
http, protocols, compression |
Have Core Web Vitals Made the Web Faster? (tun) | | 453 |
web-vitals |
Plugging Memory Leaks in Your App (sto) | | 452 |
memory |
Request for a General Theory of Web Performance | | 451 |
|
Page Weight (htt) | | 450 |
web-almanac, studies, research, metrics |
Smashing Podcast Episode 44 With Chris Ferdinandi: Is the Web Dead? (cfe+/sma) | | 449 |
podcasts, interviews, web-platform, standards, tooling, developer-experience |
7 Ways to Improve Node.js Performance at Scale (app) | | 448 |
nodejs, optimization |
Improving the Performance of Wix Websites (Case Study) (sma) | | 447 |
monitoring, culture, case-studies |
How JavaScript Engines Achieve Great Performance | | 446 |
javascript, javascript-engines |
Designing Sustainable Websites (ger) | | 445 |
sustainability, software-design |
Performance (sia/htt) | | 444 |
web-almanac, studies, research, metrics, user-experience |
Your CSS Is an Interface (eri) | | 443 |
css |
Why IndexedDB Is Slow and What to Use Instead | | 442 |
databases, indexeddb, javascript |
Get Your “Head” Straight (css/btc) | | 441 |
videos, html |
Why Your Website Should Not Use Dithered Images | | 440 |
images, dithering, compression |
Using Web Workers to Boost Third-Party Script Performance (log) | | 439 |
web-workers, javascript |
Chrome DevTools: Record and Playback Your User Journeys | | 438 |
dev-tools, user-experience, browsers, google, chrome |
How to Implement Memoization in React to Improve Performance | | 437 |
how-tos, react, memoization, optimization |
Everything You Have to Know About Core Web Vitals (fox/cal) | | 436 |
web-vitals |
Best Practices on Embedding Third-Party Web Widgets | | 435 |
embed-code, best-practices |
Web Performance Metrics Cheatsheet (ire) | | 434 |
metrics, cheat-sheets |
Building an Effective Image Component (dev) | | 433 |
components, javascript |
Optimizing Resource Loading With the Fetch Priority API (add+/dev) | | 432 |
data-fetching, apis, optimization |
New HTTP Standards for Caching on the Modern Web | | 431 |
http, protocols, caching, standards |
How I Made Google’s Data Grid Scroll 10× Faster With One Line of CSS | | 430 |
css |
My Challenge to the Web Performance Community (phi) | | 429 |
|
jsPerf—Online JavaScript Performance Benchmark | | 428 |
websites, javascript |
Using Modern Image Formats: AVIF and WebP (add/sma) | | 427 |
images, avif, webp, jpeg, png, comparisons, compression |
Faster React Apps With Memoization | | 426 |
react, memoization |
ct.css—Let’s Take a Look Inside Your “<head>” (css) | | 425 |
css, debugging |
Small Bundles, Fast Pages: What to Do With Too Much JavaScript (cal) | | 424 |
javascript, bundling |
Optimizing Images on the Web (clo) | | 423 |
images, cloudflare |
Vanilla JS Is a Web Performance Decision (cfe) | | 422 |
javascript |
Blowing Up HTML Size With Responsive Images (deb) | | 421 |
html, images, responsive-design |
Designing for Long Waits and Interruptions: Mitigating Breaks in Workflow in Complex Application Design (nng) | | 420 |
user-experience, complexity |
Writing High-Performance JavaScript (cfe) | | 419 |
javascript |
What Are the Web Performance Metrics That Actually Matter? (cfe) | | 418 |
metrics |
Lighthouse Scores Do Not Affect Google Search/SEO (erw) | | 417 |
lighthouse, google, search, seo |
HTTP/3: Performance Improvements (pro/sma) | | 416 |
http, protocols |
Does Shadow DOM Improve Style Performance? (nol) | | 415 |
dom, shadow-dom, rendering |
Big O, Code Efficiency Analysis | | 414 |
algorithms |
“<Lazy>” Rendering in Vue to Improve Performance | | 413 |
vuejs, client-side-rendering, optimization |
A Performance-Focused Workflow Based on Google Tools (dev) | | 412 |
web-vitals, tooling, google |
How We Reduced Next.js Page Size by 3.5× and Achieved a 98 Lighthouse Score | | 411 |
nextjs, lighthouse, google, case-studies |
CSS Architecture and Performance in Micro Frontends | | 410 |
css, architecture, micro-frontends |
Learnings From a WebPageTest Session on CSS-Tricks (chr/css) | | 409 |
webpagetest |
A Beginner’s Guide to Lighthouse | | 408 |
guides, lighthouse, google, web-vitals |
How to Eliminate Render-Blocking Resources: A Deep Dive (sia) | | 407 |
how-tos, rendering |
What Is Tree Shaking? (cfe) | | 406 |
javascript, concepts, tree-shaking |
The Performance Effects of Too Much Lazy-Loading (rvi/dev) | | 405 |
web-vitals, lazy-loading |
Performance Design: The Illusion of Speed | | 404 |
user-experience |
Resource Inlining in JavaScript Frameworks (mge/dev) | | 403 |
javascript, frameworks, web-vitals |
Making the Web—Faster (rau) | | 402 |
web, developer-experience, principles |
Serving Sharp Images to High Density Screens (jaf) | | 401 |
images |
Half the Size of Images by Optimising for High Density Displays (jaf) | | 400 |
html, images |
Using AVIF to Compress Images on Your Site (dev) | | 399 |
images, avif, compression |
What Can the HTTP Archive Tell Us About Largest Contentful Paint? | | 398 |
|
Best Practices for Fonts (tun/dev) | | 397 |
fonts, best-practices |
How to Fix Cumulative Layout Shift (CLS) Issues (tun/sma) | | 396 |
how-tos, web-vitals |
CSS for Web Vitals (una/dev) | | 395 |
css, web-vitals |
Elasticsearch Boolean Query Performance (ast) | | 394 |
tooling, search |
Tree-Shaking: A Reference Guide (ati/sma) | | 393 |
guides, optimization, javascript, tree-shaking |
Reducing HTML Payload With Next.js (Case Study) (sma) | | 392 |
nextjs, html, case-studies |
An Introduction to Performance Budgets | | 391 |
introductions, performance-budgets, metrics |
9 Principles of Good Web Design | | 390 |
design, principles, simplicity, navigation, content, layout, mobile |
Bypassing Cookie Consent Banners in Lighthouse and WebPageTest (and) | | 389 |
consent-management, cookies, lighthouse, google, webpagetest, testing |
The 5-Hour CDN (fly) | | 388 |
content-delivery |
Measuring Web Performance in Mobile Safari (css) | | 387 |
testing, mobile, browsers, apple, safari |
What About Ember? (tka) | | 386 |
emberjs |
Testing Performance (kel) | | 385 |
testing |
Front-End Performance 2021: Delivery Optimizations (vit/sma) | | 384 |
checklists, link-lists |
Front-End Performance 2021: Build Optimizations (vit/sma) | | 383 |
checklists, link-lists, building |
Front-End Performance 2021: Assets Optimizations (vit/sma) | | 382 |
checklists, link-lists, compression, images |
HTML and CSS Techniques to Reduce Your JavaScript | | 381 |
html, css, javascript |
Continuous Performance Analysis With Lighthouse CI and GitHub Actions (css) | | 380 |
lighthouse, google, github-actions |
Optimizing Image Depth (mey/css) | | 379 |
images, quality, optimization |
Page Weight (htt) | | 378 |
web-almanac, studies, research, metrics |
Time to Say Goodbye to Google Fonts: Cache Performance | | 377 |
google, fonts, caching |
Best Practices for Inclusive Textual Websites | | 376 |
security, accessibility, best-practices |
Measuring Core Web Vitals With Sentry (fon/css) | | 375 |
web-vitals, tooling |
Warp: Improved JS Performance in Firefox 83 (jan/moz) | | 374 |
firefox, mozilla, browsers, javascript, spidermonkey, javascript-engines |
The What, Why, and How of Using a Skeleton Loading Screen (tre) | | 373 |
placeholders, react |
Core Web Vitals: A Guide to Google’s Web Performance Metrics (cra) | | 372 |
guides, google, web-vitals |
Signed Exchanges (SXGs) (twi/dev) | | 371 |
authentication, signed-exchanges, web-packaging |
How to Create High-Performance CSS Animations (rac/dev) | | 370 |
how-tos, css, animations |
Reducing the Site Speed Impact of Third-Party Tags | | 369 |
embed-code |
Enforcing Performance Budgets With Webpack (css) | | 368 |
performance-budgets, webpack |
AVIF Has Landed (jaf) | | 367 |
images, avif, quality, jpeg, webp, svg, png, comparisons |
Loading Third-Party JavaScript (add/dev) | | 366 |
javascript |
Performance Is an Issue of Equity (clo) | | 365 |
accessibility |
Methods of Improving and Optimizing Performance in React Apps (sma) | | 364 |
react, optimization |
Lazy Loading Images in Svelte (css) | | 363 |
images, lazy-loading, svelte |
We Need More Inclusive Web Performance Metrics (sco) | | 362 |
metrics, dei |
How I Used Brotli to Get Even Smaller CSS and JavaScript Files at CDN Scale (css) | | 361 |
compression, brotli |
5 Projects to Help You Master Modern CSS (cra) | | 360 |
css, print, forms |
Core Web Vitals (chr/css) | | 359 |
google, web-vitals, metrics |
On Fixed Elements and Backgrounds (hui) | | 358 |
css, backgrounds, positioning, scrolling |
Speed Up Google Fonts (css) | | 357 |
google, fonts |
The Need for Speed, 23 Years Later (nng) | | 356 |
user-experience, history |
Maybe You Don’t Need That SPA | | 355 |
single-page-apps, javascript, react |
prerender.js (chr/css) | | 354 |
libraries |
Introducing Web Vitals: Essential Metrics for a Healthy Site (dev) | | 353 |
introductions, web-vitals, metrics, google |
Real-World Effectiveness of Brotli (css) | | 352 |
compression, brotli, comparisons |
The Cost of JavaScript Frameworks (tka) | | 351 |
javascript, frameworks, metrics, jquery, vuejs, angular, react |
Start Render: The Web Performance Metric That Heralds the End of the Blank Page | | 350 |
metrics, web-vitals |
Performance Tips: Minifying HTML, CSS, and JS | | 349 |
videos, html, css, javascript, minification, tips-and-tricks |
Setting Height and Width on Images Is Important Again (tun/sma) | | 348 |
html, images, web-vitals |
Improving Perceived Performance With the CSS “font-display” Property (the) | | 347 |
css, fonts |
Page Builders Might Not Be a Good Idea (cit) | | 346 |
maintainability, consistency, quality |
Encrypting DNS Query Bad for Performance? (erw) | | 345 |
dns, http, encryption, security |
Do This to Improve Image Loading on Your Website (fon/css) | | 344 |
images, html |
Google Tag Manager vs. Page Speed: The Impact and How to Improve | | 343 |
google, tag-management, analytics, optimization |
The Web in 2020: Extensibility and Interoperability (una/css) | | 342 |
web-platform, extensibility, interoperability, houdini, variable-fonts, custom-properties, logical-properties, web-components, media-queries |
Should You Self-Host Google Fonts? (tun) | | 341 |
fonts, google, hosting |
Improving Site Performance With Webpack Tree Shaking | | 340 |
optimization, webpack, tree-shaking |
Performance Budgets, Pragmatically (css) | | 339 |
performance-budgets |
Putting Devs Before Users: How Frameworks Destroyed Web Performance (uxd) | | 338 |
frameworks, developer-experience |
An HTML Optimizer’s Config for html-minifier (j9t) | | 337 |
html, html-minifier, minification, optimization, configuration, minimalism |
How Do You Remove Unused CSS From a Site? (chr/css) | | 336 |
css, tooling |
Speed Up Your Website With WebP (sma) | | 335 |
optimization, webp, images |
A Guide to Optimizing Images for Mobile (sma) | | 334 |
guides, images, optimization, mobile |
Workflow Considerations for Using an Image Management Service (chr/css) | | 333 |
images, tooling, content-delivery |
On Writing Better Markup (j9t) | | 332 |
html, quality, maintainability, terminology |
Recipes for Performance Testing Single Page Applications in Webpagetest (pha/css) | | 331 |
testing, single-page-apps, tooling, webpagetest |
Some HTML Is “Optional” (chr/css) | | 330 |
html, standards |
Faster Image Loading With Embedded Image Previews (sma) | | 329 |
images, lazy-loading, techniques, javascript |
Other Ways to SPAs (chr/css) | | 328 |
single-page-apps, tooling |
Optional HTML: Everything You Need to Know (j9t) | | 327 |
html, minimalism |
Lazy Load Embedded YouTube Videos (chr/css) | | 326 |
youtube, lazy-loading, embed-code |
Accessibility and Web Performance Are Not Features, They’re the Baseline (fon/css) | | 325 |
accessibility, amp, google, user-experience |
Handling Unused CSS in Sass to Improve Performance (sma) | | 324 |
css, sass, optimization |
What CMS to Use for Optimale TTFB (and Site Speed?) (erw) | | 323 |
content-management, metrics, wp-engine, automattic |
I Used the Web for a Day on a 50 MB Budget (sma) | | 322 |
mobile |
How Google Pagespeed Works: Improve Your Score and Search Engine Ranking (ben/css) | | 321 |
google, tooling, lighthouse, seo |
Browsers Are Pretty Good at Loading Pages, It Turns Out | | 320 |
javascript, rendering, browsers |
The Simplest Way to Load CSS Asynchronously (sco) | | 319 |
css, asynchronicity |
Shifting the Performance Burden (sco) | | 318 |
|
Optimizing Google Fonts Performance (sma) | | 317 |
google, fonts, optimization |
The Problem With Web Development Checklists, or: The Frontend Checklist, Revised (j9t) | | 316 |
checklists, html, accessibility, seo, social-media |
How to Increase Your Page Size by 1,500% With Webpack and Vue (bur/css) | | 315 |
webpack, vuejs |
Responsible JavaScript (mal/ali) | | 314 |
javascript, tree-shaking, code-splitting, embed-code, transpiling, tooling |
Image Optimization in WordPress (sma) | | 313 |
wordpress, images, optimization |
Self-Host Your Static Assets (css) | | 312 |
hosting, caching |
Characteristics of a Strong Performance Culture (tka) | | 311 |
culture, principles |
Understanding Image Compression: Tooling and Context (j9t) | | 310 |
images, compression, tooling |
The Scoville Scale of Web Font Loading Opinions (zac/btc) | | 309 |
videos, fonts |
Browser Resource Hints: “preload”, “prefetch”, and “preconnect” (deb) | | 308 |
hints, html, http-headers, http, preloading |
Optimizing Performance With Resource Hints (dre/sma) | | 307 |
hints, optimization |
The Serif Tax (chr/css) | | 306 |
fonts |
Improving Perceived Performance With the Link “rel=preconnect” HTTP Header (and) | | 305 |
http, http-headers, hints |
“Cache-Control” for Civilians (css) | | 304 |
caching, http |
How to Avoid DOM Blocking in JavaScript (cra) | | 303 |
how-tos, dom, javascript |
Rendering on the Web (add+/dev) | | 302 |
server-side-rendering, client-side-rendering, rendering, hydration, seo |
HTML and Performance: Leave Out Optional Tags and Quotes (j9t) | | 301 |
html |
8 Reasons Why You’re Doing SEO Wrong (erw) | | 300 |
seo |
The Ethics of Web Performance (tka) | | 299 |
ethics, accessibility |
The Elements of UI Engineering (dan) | | 298 |
user-experience, consistency, navigation, prioritization, accessibility, internationalization, resilience |
Static vs. Server Rendering | | 297 |
rendering, comparisons, react |
Speed Up Next-Page Navigations With Prefetching (add) | | 296 |
hints, html, http-headers, http, webpack |
Keeping Sass Simple and Speedy on Eleventy (phi) | | 295 |
sass, eleventy |
On Visions for Performance, or: Performance Optimization Is a Process (j9t) | | 294 |
optimization, outlooks, processes |
Front-End Developers Have to Manage the Loading Experience (chr/css) | | 293 |
user-experience |
Performance Rule #1: Do What You Need to Do—But Not More (j9t) | | 292 |
simplicity |
Reduce JavaScript Payloads With Code Splitting (mal/dev) | | 291 |
javascript, code-splitting |
Performance Budgets 101 (dev) | | 290 |
introductions, performance-budgets, metrics |
Improve Animated GIF Performance With HTML5 Video (sma) | | 289 |
images, gif, multimedia |
A Netflix Web Performance Case Study (add/dev) | | 288 |
case-studies |
How to Configure Lighthouse for Balanced Quality Websites (j9t) | | 287 |
how-tos, google, lighthouse, configuration, quality |
A Guide to Caching in WordPress | | 286 |
guides, wordpress, caching, plugins |
A Minimal JavaScript Setup (css) | | 285 |
javascript, conventions, naming, scope, maintainability, examples |
Chrome’s Noscript Intervention (tka) | | 284 |
chrome, google, browsers, javascript, mobile |
20 Tips for Optimizing CSS Performance (cra) | | 283 |
css, optimization, tips-and-tricks |
Variable Fonts: What They Are, and How to Use Them | | 282 |
how-tos, fonts, variable-fonts |
Browser Painting and Considerations for Web Performance (css) | | 281 |
browsers, browser-engines, painting, rendering |
Slow Websites (geo/css) | | 280 |
performance-budgets |
The Cost of JavaScript in 2018 (add) | | 279 |
javascript, code-splitting, lazy-loading, performance-budgets, bundling |
HTTP/2: The Difference Between HTTP/1.1, Benefits, and How to Use It | | 278 |
protocols, http, comparisons |