<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://web.dev/</id>
  <title>Carlos Aranha on web.dev</title>
  <updated>2026-04-15T23:21:06Z</updated>
  <author>
    <name>Carlos Aranha</name>
  </author>
  <link href="https://web.dev/authors/aranhacarlos/feed.xml" rel="self"/>
  <link href="https://web.dev/"/>
  <icon>https://web-dev.imgix.net/image/admin/lO32XQupcXe0oJfcPX2Q.jpg?auto=format</icon>
  <logo>https://web.dev/images/shared/rss-banner.png</logo>
  <subtitle>Our latest news, updates, and stories by Carlos Aranha.</subtitle>
  
  
  <entry>
    <title>How Mercado Libre optimized for Web Vitals (TBT/FID)</title>
    <link href="https://web.dev/how-mercadolibre-optimized-web-vitals/"/>
    <updated>2020-09-21T00:00:00Z</updated>
    <id>https://web.dev/how-mercadolibre-optimized-web-vitals/</id>
    <content type="html" mode="escaped">&lt;p&gt;Mercado Libre is the largest e-commerce and payments ecosystem in Latin America. It is present in 18
countries and is a market leader in Brazil, Mexico, and Argentina (based on unique visitors and
pageviews).&lt;/p&gt;
&lt;p&gt;Web performance has been a focus for the company for a long time, but they recently formed a team to
monitor performance and apply optimizations across different parts of the site.&lt;/p&gt;
&lt;p&gt;This article summarizes the work done by &lt;a href=&quot;https://twitter.com/pazguille&quot; rel=&quot;noopener&quot;&gt;Guille Paz&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/pcarminatti/&quot; rel=&quot;noopener&quot;&gt;Pablo
Carminatti&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/oburkhay&quot; rel=&quot;noopener&quot;&gt;Oleh
Burkhay&lt;/a&gt; from Mercado Libre&#39;s frontend architecture team to optimize
one of the Core Web Vitals: &lt;a href=&quot;https://web.dev/fid/&quot;&gt;First Input Delay (FID)&lt;/a&gt; and its lab proxy,
&lt;a href=&quot;https://web.dev/tbt/&quot;&gt;Total Blocking Time (TBT)&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;stats&quot;&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;90&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;Reduction in Max Potential FID in Lighthouse&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;9&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;More users perceiving FID as &quot;Fast&quot; in CrUX&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;long-tasks,-first-input-delay,-and-total-blocking-time&quot;&gt;Long tasks, First Input Delay, and Total Blocking Time &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#long-tasks,-first-input-delay,-and-total-blocking-time&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Running expensive JavaScript code can lead to &lt;a href=&quot;https://web.dev/long-tasks-devtools/&quot;&gt;long tasks&lt;/a&gt;,
which are those that run for more than &lt;strong&gt;50ms&lt;/strong&gt; in the browser&#39;s main thread.&lt;/p&gt;
&lt;p&gt;FID (First Input Delay) measures the time from when a user first interacts with a page (e.g. when
they click on a link) to the time when the browser is actually able to begin processing event
handlers in response to that interaction. A site that executes expensive JavaScript code will likely
have several long tasks, which will end up negatively impacting FID.&lt;/p&gt;
&lt;p&gt;To provide a good user experience, sites should strive to have a First Input Delay of less than 100
milliseconds:
&lt;picture&gt;&lt;/picture&gt;&lt;/p&gt;
  &lt;source srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/eXyvkqRHQZ5iG38Axh1Z.svg&quot; media=&quot;(min-width: 640px)&quot; /&gt;
  &lt;img alt=&quot;Good fid values are 2.5 seconds, poor values are greater than 4.0 seconds and anything in between needs improvement&quot; decoding=&quot;async&quot; height=&quot;96&quot; loading=&quot;lazy&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Se4TiXIdp8jtLJVScWed.svg&quot; width=&quot;384&quot; /&gt;

&lt;p&gt;While Mercado Libre&#39;s site was performing well in most sections, they found in the &lt;a href=&quot;https://developer.chrome.com/docs/crux/&quot; rel=&quot;noopener&quot;&gt;Chrome User
Experience Report&lt;/a&gt; that
product detail pages had a poor FID. Based on that information, they decided to focus their efforts
on improving the interactivity for product pages in the site.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Mobile and Desktop versions of a Mercado Libre product detail page.&quot; decoding=&quot;async&quot; height=&quot;346&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
   &lt;figcaption&gt;
      Mobile and Desktop versions of a Mercado Libre product detail page.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;These pages allow the user to perform complex interactions, so the goal was interactivity
optimization, without interfering with valuable functionality.&lt;/p&gt;
&lt;h2 id=&quot;measure-interactivity-of-product-detail-pages&quot;&gt;Measure interactivity of product detail pages &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-interactivity-of-product-detail-pages&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;FID requires a real user and thus cannot be measured in the lab. However, the &lt;a href=&quot;https://web.dev/tbt/&quot;&gt;Total Blocking Time
(TBT)&lt;/a&gt; metric is lab-measurable, correlates well with FID in the field, and
also captures issues that affect interactivity.&lt;/p&gt;
&lt;p&gt;In the following trace, for example, while the &lt;strong&gt;total time&lt;/strong&gt; spent running tasks on the main thread
is 560 ms, only 345 ms of that time is considered &lt;strong&gt;total blocking time&lt;/strong&gt; (the sum of the portions
of each task that exceeds 50ms):&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg&quot;&gt;&lt;img alt=&quot;A tasks timeline on the main thread showing blocking time&quot; decoding=&quot;async&quot; height=&quot;156&quot; loading=&quot;lazy&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg&quot; width=&quot;800&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mercado Libre took TBT as a proxy metric in the lab, in order to measure and improve the
interactivity of product detail pages in the real world.&lt;/p&gt;
&lt;p&gt;Here&#39;s the general approach they took:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a href=&quot;https://www.webpagetest.org/&quot; rel=&quot;noopener&quot;&gt;WebPageTest&lt;/a&gt; to determine exactly which scripts were keeping
the main thread busy on a real device.&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/overview/&quot; rel=&quot;noopener&quot;&gt;Lighthouse&lt;/a&gt; to determine the impact of
the changes in &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/&quot; rel=&quot;noopener&quot;&gt;Max Potential First Input Delay (Max Potential
FID)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class=&quot;aside flow bg-state-info-bg color-state-info-text&quot;&gt;&lt;div class=&quot; flow&quot;&gt; During this project Mercado Libre used &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/&quot;&gt;Max Potential FID&lt;/a&gt; in Lighthouse because that was the tool&#39;s main metric for measuring interactivity at that time. Lighthouse now recommends using &lt;a href=&quot;https://web.dev/tbt/&quot;&gt;Total Blocking Time&lt;/a&gt; instead. &lt;/div&gt;&lt;/aside&gt;
&lt;h2 id=&quot;use-webpagetest-to-visualize-long-tasks&quot;&gt;Use WebPageTest to visualize long tasks &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#use-webpagetest-to-visualize-long-tasks&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;WebPageTest (WPT) is a web performance tool that allows you to run tests on real devices in
different locations around the world.&lt;/p&gt;
&lt;p&gt;Mercado Libre used WPT to reproduce the experience of their users by choosing a device type and
location similar to real users. Specifically, they chose a &lt;strong&gt;Moto 4G device&lt;/strong&gt; and &lt;strong&gt;Dulles,
Virginia&lt;/strong&gt;, because they wanted to approximate the experience of Mercado Libre users in Mexico. By
observing the main thread view of WPT, Mercado Libre found that there were several consecutive long
tasks blocking the main thread for 2 seconds:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Main thread view of Mercado Libre&amp;#x27;s product detail pages.&quot; decoding=&quot;async&quot; height=&quot;188&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
   &lt;figcaption&gt;
      Main thread view of Mercado Libre&#39;s product detail pages.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Analyzing the corresponding waterfall they found that a considerable part of those two seconds came
from their analytics module. The main bundle size of the application was large (950KB) and took a
long time to parse, compile, and execute.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Waterfall view of product detail pages.&quot; decoding=&quot;async&quot; height=&quot;363&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
   &lt;figcaption&gt;
      Waterfall view of Mercado Libre&#39;s product detail pages.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;use-lighthouse-to-determine-max-potential-fid&quot;&gt;Use Lighthouse to determine Max Potential FID &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#use-lighthouse-to-determine-max-potential-fid&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lighthouse doesn&#39;t allow you to choose between different devices and locations, but it&#39;s a very
useful tool for diagnosing sites and obtaining performance recommendations.&lt;/p&gt;
&lt;p&gt;When running Lighthouse on product detail pages, Mercado Libre found that the &lt;strong&gt;Max Potential FID&lt;/strong&gt;
was the only metric marked in red, with a value of &lt;strong&gt;1710ms&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Lighthouse metrics in a PSI report for Mercado Libre&amp;#x27;s product detail pages.&quot; decoding=&quot;async&quot; height=&quot;235&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;Based on this, Mercado Libre set a goal to improve their Max Potential FID score in a laboratory
tool like Lighthouse and WebPageTest, under the assumption that these improvements would affect
their real users, and therefore, show up in real user monitoring tools like the Chrome User
Experience Report.&lt;/p&gt;
&lt;h2 id=&quot;optimize-long-tasks&quot;&gt;Optimize long tasks &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#optimize-long-tasks&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;first-iteration&quot;&gt;First iteration &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#first-iteration&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Based on the main thread trace, Mercado Libre set the goal of optimizing the two modules that were
running expensive code.&lt;/p&gt;
&lt;p&gt;They started optimizing the performance of the internal tracking module. This module contained a
CPU-heavy task that wasn&#39;t critical for the module to work, and therefore could be safely removed.
This led to a 2% reduction in JavaScript for the whole site.&lt;/p&gt;
&lt;p&gt;After that they started to work on &lt;strong&gt;improving the general bundle size&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Mercado Libre used
&lt;a href=&quot;https://github.com/webpack-contrib/webpack-bundle-analyzer&quot; rel=&quot;noopener&quot;&gt;webpack-bundle-analyzer&lt;/a&gt; to detect
opportunities for optimization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initially they were requiring the full &lt;a href=&quot;https://lodash.com/&quot; rel=&quot;noopener&quot;&gt;Lodash module&lt;/a&gt;. This was replaced
with a &lt;a href=&quot;https://lodash.com/per-method-packages&quot; rel=&quot;noopener&quot;&gt;per-method require&lt;/a&gt; to load only a subset of
Lodash instead of the whole library, and used in conjunction with
&lt;a href=&quot;https://github.com/lodash/lodash-webpack-plugin&quot; rel=&quot;noopener&quot;&gt;lodash-webpack-plugin&lt;/a&gt; to shrink Lodash even
further.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They also applied the following &lt;a href=&quot;https://babeljs.io/&quot; rel=&quot;noopener&quot;&gt;Babel&lt;/a&gt; optimizations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using &lt;a href=&quot;https://babeljs.io/docs/en/babel-plugin-transform-runtime&quot; rel=&quot;noopener&quot;&gt;@babel/plugin-transform-runtime&lt;/a&gt;
to reuse Babel&#39;s helpers throughout the code, and reduce the size of the bundle considerably.&lt;/li&gt;
&lt;li&gt;Using
&lt;a href=&quot;https://github.com/jean-smaug/babel-plugin-search-and-replace#readme&quot; rel=&quot;noopener&quot;&gt;babel-plugin-search-and-replace&lt;/a&gt;
to replace tokens at build time, in order to remove a large configuration file inside the main
bundle.&lt;/li&gt;
&lt;li&gt;Adding
&lt;a href=&quot;https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types#readme&quot; rel=&quot;noopener&quot;&gt;babel-plugin-transform-react-remove-prop-types&lt;/a&gt;
to save some extra bytes by removing the prop types.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a result of these optimizations, the bundle size was reduced &lt;strong&gt;by approximately 16%&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;measure-impact&quot;&gt;Measure impact &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The changes lowered Mercado Libre&#39;s consecutive long tasks &lt;strong&gt;from two seconds to one second&lt;/strong&gt;:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Main thread view of Mercado Libre&amp;#x27;s product detail pages after first round of optimizations.&quot; decoding=&quot;async&quot; height=&quot;315&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
   &lt;figcaption&gt;
      In the top waterfall of WPT there’s a long red bar (in the &lt;b&gt;Page is Interactive&lt;/b&gt; row) between seconds 3 and 5. In the bottom waterfall, the bar has been broken into smaller pieces, occupying the main thread for shorter periods of time.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Lighthouse showed a &lt;strong&gt;57% reduction&lt;/strong&gt; in Max Potential First Input Delay:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Lighthouse metrics in a PSI report for Mercado Libre&amp;#x27;s product detail pages after first round of optimizations.&quot; decoding=&quot;async&quot; height=&quot;252&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;second-iteration&quot;&gt;Second iteration &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#second-iteration&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The team continued digging into long tasks in order to find subsequent improvements.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Detailed view of main thread view of Mercado Libre&amp;#x27;s product detail pages after first round of optimizations.&quot; decoding=&quot;async&quot; height=&quot;259&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
   &lt;figcaption&gt;
      The Waterfall (not pictured) helped Mercado Libre identify which libraries were using the main thread heavily (&lt;b&gt;Browser Main Thread&lt;/b&gt; row) and the &lt;b&gt;Page is Interactive&lt;/b&gt; row clearly shows that this main thread activity is blocking interactivity.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Based on that information they decided to implement the following changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Continue reducing the main bundle size to optimize compile and parse time (e.g. by removing
duplicate dependencies throughout the different modules).&lt;/li&gt;
&lt;li&gt;Apply &lt;a href=&quot;https://web.dev/reduce-javascript-payloads-with-code-splitting/&quot;&gt;code splitting&lt;/a&gt; at
component level, to divide JavaScript in smaller chunks and allow for smarter loading of the
different components.&lt;/li&gt;
&lt;li&gt;Defer &lt;a href=&quot;https://developers.google.com/web/updates/2019/02/rendering-on-the-web#rehydration&quot; rel=&quot;noopener&quot;&gt;component
hydration&lt;/a&gt; to
allow for a smarter use of the main thread. This technique is commonly referred to as &lt;a href=&quot;https://addyosmani.com/blog/rehydration/&quot; rel=&quot;noopener&quot;&gt;partial
hydration&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;measure-impact-2&quot;&gt;Measure impact &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact-2&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The resulting WebPageTest trace showed even smaller chunks of JS execution:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Main thread view of Mercado Libre&amp;#x27;s product detail pages after secoond round of optimizations.&quot; decoding=&quot;async&quot; height=&quot;150&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;And their Max Potential FID time in Lighthouse was reduced &lt;strong&gt;by an additional 60%&lt;/strong&gt;:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Lighthouse metrics in a PSI report for Mercado Libre&amp;#x27;s product detail pages after first round of optimizations.&quot; decoding=&quot;async&quot; height=&quot;345&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;visualize-progress-for-real-users&quot;&gt;Visualize progress for real users &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#visualize-progress-for-real-users&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While laboratory testing tools like WebPageTest and Lighthouse are great for iterating on solutions
during development, the true goal is to improve the experience for real users.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://developer.chrome.com/docs/crux/&quot; rel=&quot;noopener&quot;&gt;Chrome User Experience
Report&lt;/a&gt; provides user
experience metrics for how real-world Chrome users experience popular destinations on the web. The
data from the report can be obtained by &lt;a href=&quot;https://developer.chrome.com/blog/chrome-ux-report-bigquery/&quot; rel=&quot;noopener&quot;&gt;running queries in
BigQuery&lt;/a&gt;,
&lt;a href=&quot;https://pagespeed.web.dev/&quot; rel=&quot;noopener&quot;&gt;PageSpeedInsights&lt;/a&gt;, or the &lt;a href=&quot;https://developer.chrome.com/blog/chrome-ux-report-api/&quot; rel=&quot;noopener&quot;&gt;CrUX
API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://datastudio.google.com/c/datasources/create?connectorId=AKfycbxk7u2UtsqzgaA7I0bvkaJbBPannEx0_zmeCsGh9bBZy7wFMLrQ8x24WxpBzk_ln2i7&quot; rel=&quot;noopener&quot;&gt;CrUX
dashboard&lt;/a&gt;
is an easy way to visualize the progress of core metrics:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;.&quot; decoding=&quot;async&quot; height=&quot;163&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;
      Mercado Libre&#39;s FID progress between Jan 2020 and April 2020. Before the optimization project, 82% of the users were perceiving FID as fast (below 100ms). After, more than 91% of the users were perceiving the metric as fast.
    &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next steps &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/how-mercadolibre-optimized-web-vitals/#next-steps&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Web performance is never a finished task, and Mercado Libre understands the value these
optimizations bring to their users. While they continue applying several optimizations across the
site, including &lt;a href=&quot;https://web.dev/instant-navigation-experiences/#production-cases&quot;&gt;prefetching&lt;/a&gt; in
product listing pages, image optimizations, and others, they continue adding improvements to product
listing pages to reduce Total Blocking Time (TBT), and by proxy FID, even more. These optimizations
include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Iterating on the code splitting solution.&lt;/li&gt;
&lt;li&gt;Improving the execution of third-party scripts.&lt;/li&gt;
&lt;li&gt;Continuing improvements in asset bundling at the bundler level
(&lt;a href=&quot;https://webpack.js.org/&quot; rel=&quot;noopener&quot;&gt;webpack&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mercado Libre has a holistic view of performance, so while they continue optimizing interactivity in
the site, they have also started assessing opportunities for improvement on the other two current
&lt;a href=&quot;https://web.dev/vitals/&quot;&gt;Core Web Vitals&lt;/a&gt;: &lt;a href=&quot;https://web.dev/lcp/&quot;&gt;LCP (Largest Contentful Paint)&lt;/a&gt;
and &lt;a href=&quot;https://web.dev/cls/&quot;&gt;CLS (Cumulative Layout Shift)&lt;/a&gt; even more.&lt;/p&gt;
</content>
    <author>
      <name>Demian Renzulli</name>
    </author><author>
      <name>Carlos Aranha</name>
    </author><author>
      <name>Joan Baca</name>
    </author>
  </entry>
</feed>
