{"id":374,"date":"2021-12-19T08:28:04","date_gmt":"2021-12-19T07:28:04","guid":{"rendered":"https:\/\/wp.catedu.es\/zgzsur\/?p=374"},"modified":"2021-12-19T08:28:04","modified_gmt":"2021-12-19T07:28:04","slug":"first-contentful-paint-fcp","status":"publish","type":"post","link":"https:\/\/wp.catedu.es\/zgzsur\/first-contentful-paint-fcp\/","title":{"rendered":"First Contentful Paint  (FCP)"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=cpizaragozasur\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n<header class=\"w-article-header\">\n<h1 id=\"first-contentful-paint-(fcp)\" class=\"w-article-header__headline\">First Contentful Paint (FCP)<\/h1>\n<\/header>\n<div class=\"w-aside w-aside--note\">\n<p>First Contentful Paint: Primer despliegue de contenido (FCP) es una m\u00e9trica importante, centrada en el usuario, para medir la\u00a0<a href=\"https:\/\/web.dev\/user-centric-performance-metrics\/#types-of-metrics\">velocidad de carga percibida<\/a>\u00a0porque marca el primer punto en la l\u00ednea de tiempo de carga de la p\u00e1gina en el que el usuario puede ver algo en la pantalla: una FCP r\u00e1pida ayuda a tranquilizar al usuario de que algo est\u00e1\u00a0<a href=\"https:\/\/web.dev\/user-centric-performance-metrics\/#questions\">ocurriendo<\/a>.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h2 id=\"que-es-fcp\">\u00bfQu\u00e9 es FCP?<\/h2>\n<p>La m\u00e9trica &#8220;First Contentful Paint&#8221; (FCP) mide el tiempo que transcurre desde que la p\u00e1gina comienza a cargarse hasta que cualquier parte del contenido de la p\u00e1gina se representa en la pantalla. Para esta m\u00e9trica, el &#8220;contenido&#8221; se refiere al texto, las im\u00e1genes (incluidas las im\u00e1genes que est\u00e1n en segundo plano), los elementos\u00a0<code>&lt;svg&gt;<\/code>\u00a0o los elementos\u00a0<code>&lt;canvas&gt;<\/code>\u00a0que no est\u00e1n en blanco.<\/p>\n<p><a href=\"https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format\" sizes=\"auto, (min-width: 800px) 800px, calc(100vw - 48px)\" srcset=\"https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=200 200w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=228 228w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=260 260w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=296 296w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=338 338w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=385 385w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=439 439w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=500 500w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=571 571w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=650 650w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=741 741w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=845 845w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=964 964w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=1098 1098w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=1252 1252w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=1428 1428w, https:\/\/web-dev.imgix.net\/image\/admin\/3UhlOxRc0j8Vc4DGd4dt.png?auto=format&amp;w=1600 1600w\" alt=\"L\u00ednea de tiempo de FCP de google.com\" width=\"800\" height=\"311\" \/><\/a><\/p>\n<p>En la carga anterior de la l\u00ednea de tiempo, FCP ocurre en el segundo marco, ya que es cuando los primeros elementos de texto e imagen se renderizan en la pantalla.<\/p>\n<p>Notar\u00e1 que, aunque se ha renderizado parte del contenido, no se ha renderizado todo. Esta es una distinci\u00f3n importante que se debe hacer entre\u00a0<em>First<\/em>\u00a0Contentful Paint (FCP) y\u00a0<em><a href=\"https:\/\/web.dev\/lcp\/\">Largest Contentful Paint (LCP)<\/a><\/em>, cuyo objetivo es medir cu\u00e1ndo se termin\u00f3 de cargar el contenido principal de la p\u00e1gina.<\/p>\n<picture><source srcset=\"https:\/\/web-dev.imgix.net\/image\/eqprBhZUGfb8WYnumQ9ljAxRrA72\/V1mtKJenViYAhn05WxqR.svg\" media=\"(min-width: 640px)\" \/><img loading=\"lazy\" decoding=\"async\" class=\"w-screenshot w-screenshot--filled width-full\" src=\"https:\/\/web-dev.imgix.net\/image\/eqprBhZUGfb8WYnumQ9ljAxRrA72\/vQKpz0S2SGnnoXHMDidj.svg\" alt=\"Los buenos valores de FCP son 1,8 segundos o menos, los valores malos son superiores a 3,0 segundos y cualquier cosa intermedia necesita mejora\" width=\"400\" height=\"300\" \/><\/picture>\n<h3 id=\"que-es-una-buena-puntuacion-fcp\">\u00bfQu\u00e9 es una buena puntuaci\u00f3n FCP?<\/h3>\n<p>Para brindar una buena experiencia de usuario, los sitios deber\u00edan esforzarse por tener una First Contentful Paint de\u00a0<strong>1.8 segundos<\/strong>\u00a0o menos. Para asegurarse de que est\u00e1 alcanzando este objetivo para la mayor\u00eda de sus usuarios, un buen umbral para medir es el\u00a0<strong>percentil 75<\/strong>\u00a0de cargas de p\u00e1ginas, segmentado en dispositivos m\u00f3viles y equipos de escritorio.<\/p>\n<h2 id=\"como-medir-fcp\">C\u00f3mo medir FCP<\/h2>\n<p>FCP se puede medir\u00a0<a href=\"https:\/\/web.dev\/user-centric-performance-metrics\/#in-the-lab\">en el laboratorio<\/a>\u00a0o\u00a0<a href=\"https:\/\/web.dev\/user-centric-performance-metrics\/#in-the-field\">en el campo<\/a>\u00a0y est\u00e1 disponible en las siguientes herramientas:<\/p>\n<h3 id=\"herramientas-de-campo\">Herramientas de campo<\/h3>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/speed\/pagespeed\/insights\/\" rel=\"noopener\">PageSpeed Insights<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-user-experience-report\" rel=\"noopener\">Chrome User Experience Report<\/a><\/li>\n<li><a href=\"https:\/\/webmasters.googleblog.com\/2019\/11\/search-console-speed-report.html\" rel=\"noopener\">Search Console (informe de velocidad)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/GoogleChrome\/web-vitals\" rel=\"noopener\">Biblioteca de JavaScript\u00a0<code>web-vitals<\/code><\/a><\/li>\n<\/ul>\n<h3 id=\"herramientas-de-laboratorio\">Herramientas de laboratorio<\/h3>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/web\/tools\/lighthouse\/\" rel=\"noopener\">Lighthouse<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\/\" rel=\"noopener\">Chrome DevTools<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/speed\/pagespeed\/insights\/\" rel=\"noopener\">PageSpeed Insights<\/a><\/li>\n<\/ul>\n<h3 id=\"medir-fcp-en-javascript\">Medir FCP en JavaScript<\/h3>\n<p>Para medir FCP en JavaScript, puede utilizar la\u00a0<a href=\"https:\/\/w3c.github.io\/paint-timing\/\" rel=\"noopener\">API de Paint Timing<\/a>. En el siguiente ejemplo se muestra c\u00f3mo crear un\u00a0<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceObserver\" rel=\"noopener\"><code>PerformanceObserver<\/code><\/a>\u00a0que capta una entrada de\u00a0<code>paint<\/code>\u00a0con el nombre\u00a0<code>first-contentful-paint<\/code>\u00a0y la registra en la consola.<\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">new<\/span> <span class=\"token class-name\">PerformanceObserver<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">entryList<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> entry <span class=\"token keyword\">of<\/span> entryList<span class=\"token punctuation\">.<\/span><span class=\"token function\">getEntriesByName<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'first-contentful-paint'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    console<span class=\"token punctuation\">.<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'FCP candidate:'<\/span><span class=\"token punctuation\">,<\/span> entry<span class=\"token punctuation\">.<\/span>startTime<span class=\"token punctuation\">,<\/span> entry<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n  <span class=\"token punctuation\">}<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">observe<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>type<span class=\"token operator\">:<\/span> <span class=\"token string\">'paint'<\/span><span class=\"token punctuation\">,<\/span> buffered<span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<div class=\"w-aside w-aside--warning\">\n<p><strong>Advertencia<\/strong>:<\/p>\n<p>En este c\u00f3digo se muestra c\u00f3mo registrar la entrada\u00a0<code>first-contentful-paint<\/code>\u00a0en la consola, pero medir FCP en JavaScript es m\u00e1s complicado. Vea a continuaci\u00f3n los detalles:<\/p>\n<\/div>\n<p>En el ejemplo anterior, la entrada registrada\u00a0<code>first-contentful-paint<\/code>\u00a0le indicar\u00e1 cu\u00e1ndo se despleg\u00f3 el primer elemento de contenido. Sin embargo, en algunos casos esta entrada no es v\u00e1lida para medir FCP.<\/p>\n<p>En la siguiente secci\u00f3n se enumeran las diferencias entre lo que reporta la API y c\u00f3mo se calcula la m\u00e9trica.<\/p>\n<h4 id=\"diferencias-entre-la-metrica-y-la-api\">Diferencias entre la m\u00e9trica y la API\u00a0<a class=\"w-headline-link\" href=\"https:\/\/web.dev\/fcp\/#diferencias-entre-la-metrica-y-la-api\">#<\/a><\/h4>\n<ul>\n<li>La API enviar\u00e1 una entrada\u00a0<code>first-contentful-paint<\/code>\u00a0para las p\u00e1ginas cargadas en una pesta\u00f1a de segundo plano, pero esas p\u00e1ginas deben ser ignoradas cuando se calcule el FCP (los tiempos del primer despliegue solo deben considerarse si la p\u00e1gina estuvo en primer plano todo el tiempo).<\/li>\n<li>La API no reporta\u00a0<code>first-contentful-paint<\/code>\u00a0cuando la p\u00e1gina se restaura desde la\u00a0<a href=\"https:\/\/web.dev\/bfcache\/#impact-on-core-web-vitals\">cach\u00e9 de retroceso\/avance<\/a>, pero LCP debe medirse en estos casos, ya que los usuarios las experimentan como visitas de p\u00e1gina distintas.<\/li>\n<li>Es\u00a0<a href=\"https:\/\/w3c.github.io\/paint-timing\/#:~:text=cross-origin%20iframes\" rel=\"noopener\">posible que la API no reporte los tiempos de despliegue de los iframes de origen cruzado<\/a>, pero para medir correctamente el FCP, debe considerar todos los marcos. Los sub-marcos pueden usar la API para reportar sus tiempos de despliegue al marco principal para su incorporaci\u00f3n.<\/li>\n<\/ul>\n<p>En vez de memorizar todas estas diferencias sutiles, los desarrolladores pueden utilizar la\u00a0<a href=\"https:\/\/github.com\/GoogleChrome\/web-vitals\" rel=\"noopener\">Biblioteca de JavaScript\u00a0<code>web-vitals<\/code><\/a>\u00a0para medir FCP, que maneja estas diferencias por usted (cuando sea posible):<\/p>\n<pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">{<\/span>getFCP<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">'web-vitals'<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token comment\">\/\/ Measure and log FCP as soon as it's available.<\/span>\r\n<span class=\"token function\">getFCP<\/span><span class=\"token punctuation\">(<\/span>console<span class=\"token punctuation\">.<\/span>log<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>Puede consultar\u00a0<a href=\"https:\/\/github.com\/GoogleChrome\/web-vitals\/blob\/master\/src\/getFCP.ts\" rel=\"noopener\">el c\u00f3digo fuente de\u00a0<code>getFCP()<\/code><\/a>\u00a0para obtener un ejemplo completo de c\u00f3mo medir FCP en JavaScript.<\/p>\n<div class=\"w-aside w-aside--note\">\n<p>En algunos casos (como los iframes de origen cruzado) no es posible medir LCP en JavaScript. Consulte la secci\u00f3n de\u00a0<a href=\"https:\/\/github.com\/GoogleChrome\/web-vitals#limitations\" rel=\"noopener\">limitaciones<\/a>\u00a0<code>web-vitals<\/code>\u00a0para obtener m\u00e1s informaci\u00f3n.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h2 id=\"como-mejorar-fcp\">C\u00f3mo mejorar FCP<\/h2>\n<p>Para aprender a mejorar FCP para un sitio espec\u00edfico, puede ejecutar una auditor\u00eda de desempe\u00f1o Lighthouse y prestar atenci\u00f3n a cualquier\u00a0<a href=\"https:\/\/web.dev\/lighthouse-performance\/#opportunities\">oportunidad<\/a>\u00a0espec\u00edfica que sugiera la auditor\u00eda.<\/p>\n<p>Para saber c\u00f3mo mejorar la FCP en general (para cualquier sitio), consulte las siguientes normas de rendimiento:<\/p>\n<ul>\n<li><a href=\"https:\/\/web.dev\/render-blocking-resources\/\">Eliminar los recursos que bloquean el renderizado<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/unminified-css\/\">Minificar CSS<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/unused-css-rules\/\">Eliminar CSS no utilizado<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/uses-rel-preconnect\/\">Preconectar a los or\u00edgenes requeridos<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/ttfb\/\">Reducir los tiempos de respuesta del servidor (TTFB)<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/redirects\/\">Evitar los redireccionamientos de varias p\u00e1ginas<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/uses-rel-preload\/\">Precargar solicitudes clave<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/total-byte-weight\/\">Evitar cargas \u00fatiles de red enormes<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/uses-long-cache-ttl\/\">Publicar activos est\u00e1ticos con una pol\u00edtica de cach\u00e9 eficiente<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/dom-size\/\">Evitar un tama\u00f1o de DOM excesivo<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/critical-request-chains\/\">Minimizar la profundidad de la solicitud cr\u00edtica<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/font-display\/\">Asegurarse de que el texto permanezca visible durante la carga de la fuente web<\/a><\/li>\n<li><a href=\"https:\/\/web.dev\/resource-summary\/\">Mantener la cantidad de solicitudes bajas y los tama\u00f1os de transferencia reducidos<\/a><\/li>\n<\/ul>\n<div class=\"w-mb--l w-mt--l w-post-github-link\"><\/div>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=cpizaragozasur\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>First Contentful Paint (FCP) First Contentful Paint: Primer despliegue de contenido (FCP) es una m\u00e9trica importante, centrada en el usuario, para medir la\u00a0velocidad de carga percibida\u00a0porque marca el primer punto&#8230;<\/p>\n","protected":false},"author":355,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"yes","footnotes":""},"categories":[17],"tags":[18,19],"class_list":["post-374","post","type-post","status-publish","format-standard","hentry","category-web","tag-fcp","tag-first-contentful-paint"],"_links":{"self":[{"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/posts\/374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/users\/355"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/comments?post=374"}],"version-history":[{"count":1,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/posts\/374\/revisions"}],"predecessor-version":[{"id":375,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/posts\/374\/revisions\/375"}],"wp:attachment":[{"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/media?parent=374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/categories?post=374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.catedu.es\/zgzsur\/wp-json\/wp\/v2\/tags?post=374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}