Page MenuHomePhabricator

[Spike] Evaluate and improve perceived front-end performance of loading ReadingLists
Open, HighPublic3 Estimated Story Points

Description

Background

As of current the perceived performance of loading the ReadingLists feature is sluggish due to numerous reasons,
LCP on beta is 3.0 seconds, so over the general guidance of 2.5s. On testwiki (on my 1 list with 0 items) 3.9s.

  • Loading of Vue.js to show anything below title.
  • Collections list item thumbnails are delaying largest contentful paint as they are implemented as CSS background-images

Loading the list view from cache:

Loading the list view cold:

image.png (1,422×256 px, 43 KB)

Possible impacts (reminder)

First impressions

  • Sluggish experience: Users perceive a website as slow or unresponsive when the main content takes longer than 3 seconds to load.
  • Loss of trust: Visitors may assume the site is poorly optimized or unreliable, especially on mobile devices or slower connections.
  • Reduced satisfaction: Studies show that users begin to lose patience after 2–3 seconds of waiting, which can create frustration.

Engagement impacts

  • Higher bounce rates: Google data indicates that as page load time increases from 1s to 3s, the probability of bounce increases by ~32%. Beyond 3s, that risk grows sharply.
  • Lower engagement: Slow LCP reduces the likelihood of scrolling, interacting, or exploring additional content.
  • Interrupted task flow: Users who come to complete a specific action (like reading an article or making a purchase) are more likely to abandon it.

Goal

Improve/speed up perceived loading time of ReadingLists

Early ideas are

  • Exchanging Vue ProgressBar with CSS-only Progressbar
  • Wider reaching were changing Card logic to be able to use <img> element for being discoverable in initial page load (also consider fetchpriority=high
  • Providing a Codex implementation of Skeleton loader component
  • Providing a Codex PHP implementation of CdxCard (requires Codex PHP v0.8.0)

Event Timeline

This would be a good candidate for using Codex PHP (cc: @Catrope ) and I think we should implement some kind of server-side rendering for this page for a general release. Performance gets more problematic the more cards are loaded on the page (could be an issue for mobile app users who have lots of saved items). When rendering this page via JS, the browser looses the ability to do any preloading or preconnection for image resources and doesn't prioritize them the way it would if the cards were server-rendered.

Personally I don't think addressing this issue is necessary while we're in an early beta stage, but I think we should use Codex PHP for this when it's ready. We could improve performance a little on this page by using loading="lazy" attribute on the thumbnails, but not sure if Codex cards support that.

https://phabricator.wikimedia.org/T406775 - this is for optimizing how we do the API calls in the special page

HFan-WMF lowered the priority of this task from High to Medium.Mar 4 2026, 5:14 PM
bwang raised the priority of this task from Medium to High.Mar 18 2026, 5:44 PM
Volker_E renamed this task from Evaluate and improve perceived performance of loading ReadingLists Collections to [Spike] Evaluate and improve perceived front-end performance of loading ReadingLists.Apr 28 2026, 8:03 AM
Volker_E claimed this task.
Volker_E updated the task description. (Show Details)
Volker_E set the point value for this task to 3.

@bwang Added a parent task and transformed this one in a spike as it made more sense with the current sub-task.

While working on https://phabricator.wikimedia.org/T406775, I noticed that on a slow internet connection (e.g. 3G), it is taking ~24 seconds for resourceloader modules to load, before even starting with any readinglists API requests.

I think we should split up the special page code into separate modules:

  • ext.readingLists.special.entries
  • ext.readingLists.special.lists
  • ext.readingLists.special.import
  • and the quicksurvey code (maybe lazy load?)

We already have a task for this: https://phabricator.wikimedia.org/T405393

For this, do we want to consider if server-side rendering (with codex php) for initial page load is possible? or is the client-side rendering adequate?