{"id":4079,"date":"2019-11-26T13:44:01","date_gmt":"2019-11-26T13:44:01","guid":{"rendered":"https:\/\/www.tcit.cl\/2019\/11\/26\/desarrolladores-front-end-tensorflowjs-copy\/"},"modified":"2023-04-26T15:30:25","modified_gmt":"2023-04-26T19:30:25","slug":"perfile-aplicacion-react-rendimiento","status":"publish","type":"post","link":"https:\/\/www.tcit.cl\/ingles\/perfile-aplicacion-react-rendimiento\/","title":{"rendered":"Perfile una aplicaci\u00f3n React para rendimiento"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:4%;--awb-padding-bottom:4%;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1341.6px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:3%;--awb-padding-right:5%;--awb-padding-bottom:3%;--awb-padding-left:5%;--awb-overflow:hidden;--awb-bg-size:cover;--awb-border-color:#4db6ac;--awb-border-top:1px;--awb-border-right:1px;--awb-border-bottom:1px;--awb-border-left:1px;--awb-border-style:solid;--awb-border-radius:5px 5px 5px 5px;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1 text-blog\"><h1 class=\"css-smbne5\">Perfile una aplicaci\u00f3n React para rendimiento<\/h1>\n<p class=\"css-yw8fqx e11rucy10\">React DevTools\u00a0es un software incre\u00edble y est\u00e1 disponible como una extensi\u00f3n de navegador para\u00a0Chrome\u00a0,\u00a0Firefox\u00a0, y puede conectarse para funcionar con la aplicaci\u00f3n React en cualquier lugar.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Una de las mejores caracter\u00edsticas de React DevTools es su capacidad de creaci\u00f3n de perfiles.\u00a0Hay mucho en el generador de perfiles, y no vamos a entrar en todo esto en esta publicaci\u00f3n, pero pens\u00e9 que deber\u00eda mostrarle c\u00f3mo puede comenzar a usar React Profiler y evitar un escollo com\u00fan que las personas encuentran al perfilar su aplicaciones.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Voy a trabajar con\u00a0mi aplicaci\u00f3n de estanter\u00eda\u00a0que hace un buen trabajo al caminar en la l\u00ednea entre lo suficientemente pr\u00e1ctico como para ser \u00abmundo real\u00bb pero lo suficientemente simple como para no requerir una gran cantidad de conocimiento espec\u00edfico de dominio para entender.\u00a0Si\u00e9ntase libre de seguirlo si lo desea, o (a\u00fan mejor) seguirlo en su propio proyecto.<\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Instalar la extensi\u00f3n<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">El primer paso es asegurarse de instalar la extensi\u00f3n React DevTools para el navegador que est\u00e1 utilizando.\u00a0Estoy usando Chrome, as\u00ed que lo instal\u00e9\u00a0en Chrome WebStore\u00a0.\u00a0Si no aparece despu\u00e9s de instalar la extensi\u00f3n, es posible que deba cerrar el panel DevTools de su navegador y volver a abrirlos.<\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Inicia la aplicaci\u00f3n<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">La aplicaci\u00f3n de estanter\u00eda utiliza\u00a0<code>react-scripts<\/code>(gracias a\u00a0<code>create-react-app<\/code>), as\u00ed que despu\u00e9s de haber instalado el proyecto localmente, ejec\u00fatelo\u00a0<code>npm run start<\/code>para\u00a0ejecutar\u00a0el servidor de desarrollo.\u00a0Esto abrir\u00e1 la aplicaci\u00f3n en su navegador en\u00a0<code>http:\/\/localhost:3000<\/code>:<\/p>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/35f073f34dd28bc989b49861820c77f9\/17fa4\/1.png\" alt=\"aplicaci\u00f3n de estanter\u00eda con botones de inicio de sesi\u00f3n y registro\" \/><\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Comience una sesi\u00f3n de perfilado<\/h2>\n<p>Abra las herramientas de desarrollo del navegador haciendo clic derecho en cualquier parte de la p\u00e1gina y haciendo clic en \u00abInspeccionar\u00bb. Luego seleccione la pesta\u00f1a \u00ab\u269b Profiler\u00bb. Este es el perfilador React DevTools y ahora puede hacer clic en el peque\u00f1o c\u00edrculo azul para \u00abComenzar a perfilar\u00bb la aplicaci\u00f3n.<img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/8c171b25922405b7bc0a9f58ef11f442\/17fa4\/2.png\" alt=\"aplicaci\u00f3n de estanter\u00eda con la pesta\u00f1a React DevTools Profile abierta y el bot\u00f3n azul &quot;Iniciar perfil&quot; resaltado\" \/><\/p>\n<p>Desde aqu\u00ed, adelante e interact\u00faa un poco con la aplicaci\u00f3n.\u00a0Me voy a registrar para una nueva cuenta.\u00a0Luego haga clic en el peque\u00f1o c\u00edrculo rojo para \u00abDejar de perfilar\u00bb.<\/p>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/2c3dc178ed34a54a1f4e0bb21ecde137\/17fa4\/3.png\" alt=\"aplicaci\u00f3n de estanter\u00eda con la pesta\u00f1a React DevTools Profile abierta y el bot\u00f3n rojo &quot;Stop profile&quot; resaltado\" \/><\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Explore los datos de perfil<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">Desde aqu\u00ed, tiene algunas opciones para explorar los datos que las DevTools recopilaron mientras interactuaba con la aplicaci\u00f3n.\u00a0La vista predeterminada es el \u00abgr\u00e1fico Flamegraph\u00bb, y tambi\u00e9n est\u00e1 el \u00abgr\u00e1fico clasificado\u00bb.\u00a0As\u00ed es como se ve el \u00abgr\u00e1fico de Flamegraph\u00bb<\/p>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/2eefbdccdee9a50cab9bb129b2d379e4\/17fa4\/4.png\" alt=\"aplicaci\u00f3n de estanter\u00eda con la pesta\u00f1a React DevTools Profile que muestra un gr\u00e1fico de llamas\" \/><\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Peligro: medir el modo de desarrollo<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">Quiero mencionar un grave obst\u00e1culo que debe evitar al realizar mediciones de rendimiento como la creaci\u00f3n de perfiles.\u00a0En este momento estamos midiendo c\u00f3mo funciona nuestra aplicaci\u00f3n en modo de desarrollo.\u00a0Si ha estado usando React por un tiempo, es probable que sepa que viene con muchas advertencias en tiempo de desarrollo para ayudarlo a alejarse de c\u00f3digos y pr\u00e1cticas problem\u00e1ticos.\u00a0Esta es una de las cosas que m\u00e1s me gusta de React, pero eso tiene un costo de rendimiento (a menudo significativo).<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Debido a esto, sus mediciones de rendimiento est\u00e1n contaminadas por el c\u00f3digo de tiempo de desarrollo de React (algo que sus usuarios nunca deber\u00edan estar ejecutando).<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Entonces, si desea obtener una medici\u00f3n precisa del rendimiento de producci\u00f3n de su aplicaci\u00f3n, debe asegurarse de realizar sus mediciones en la versi\u00f3n de producci\u00f3n de su c\u00f3digo (el c\u00f3digo que usar\u00e1n sus usuarios finales).<\/p>\n<h3 class=\"css-19l02bv e1xf8te20\">Crea y mide la aplicaci\u00f3n de producci\u00f3n<\/h3>\n<p class=\"css-yw8fqx e11rucy10\">As\u00ed que ejecutemos la compilaci\u00f3n de producci\u00f3n optimizada con\u00a0<code>npm run build<\/code>.\u00a0A continuaci\u00f3n, ejecutaremos\u00a0<code>npx serve -s build<\/code>la versi\u00f3n compilada de la aplicaci\u00f3n en un servidor HTTP.\u00a0Eso deber\u00eda iniciar la aplicaci\u00f3n en el puerto 5000. As\u00ed que hablemos de eso y comencemos una sesi\u00f3n de creaci\u00f3n de perfiles sobre eso &#8230; \u00a1Espere!\u00a0\u00a1Oh no!\u00a0\u00bfQu\u00e9 es esto?<\/p>\n<p><img decoding=\"async\" class=\"lazyload aligncenter\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/2cf971f3bb2e4412146606f4335a9303\/17fa4\/5.png\" alt=\"Reaccione la pesta\u00f1a Perfil de DevTools que muestra el error &quot;No se admite la creaci\u00f3n de perfiles&quot;\" \/><\/p>\n<p class=\"css-yw8fqx e11rucy10\"><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Perfiles no admitidos.<\/em><\/p>\n<p class=\"css-yw8fqx e11rucy10\"><em>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0El soporte de creaci\u00f3n de perfiles requiere un desarrollo o una creaci\u00f3n de perfiles de producci\u00f3n de React v16.5 +.<\/em><\/p>\n<p class=\"css-yw8fqx e11rucy10\">Como resultado, React tiene un c\u00f3digo espec\u00edfico para la creaci\u00f3n de perfiles y con el inter\u00e9s de hacer que su aplicaci\u00f3n sea lo m\u00e1s r\u00e1pida posible, en realidad eliminan ese c\u00f3digo de la compilaci\u00f3n de producci\u00f3n de React.\u00a0Gracias reaccionar!\u00a0Excepto ahora, \u00bfqu\u00e9 hacemos?\u00a0Bueno, supongo que podr\u00edamos ir a la esencia vinculada por Brian.\u00a0O podr\u00edas seguir leyendo y te mostrar\u00e9 qu\u00e9 hacer.<\/p>\n<p class=\"css-yw8fqx e11rucy10\"><strong>NOTA: Si est\u00e1 utilizando create-react-app<\/strong>\u00a0con\u00a0<code>react-scripts@&gt;=3.2.0<\/code>, simplemente puede ejecutar\u00a0<code>npx react-scripts build --profile<\/code>y har\u00e1 todo esto por usted (\u00a0gracias a Jacob\u00a0) y puede pasar al siguiente escollo.\u00a0De lo contrario, sigue leyendo.<\/p>\n<h3 class=\"css-19l02bv e1xf8te20\">Actualice la configuraci\u00f3n del paquete web para perfiles de producci\u00f3n<\/h3>\n<p class=\"css-yw8fqx e11rucy10\">Como se se\u00f1al\u00f3 en el mensaje, hay una versi\u00f3n de producci\u00f3n de React que elimina la mayor parte del c\u00f3digo \u00fatil del tiempo de desarrollo, pero deja intacto el c\u00f3digo de creaci\u00f3n de perfiles.\u00a0Todav\u00eda es un poco m\u00e1s lento, pero nos da la mejor idea de c\u00f3mo est\u00e1n funcionando nuestros componentes en un entorno de producci\u00f3n.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Hay algunas formas de hacerlo, pero la m\u00e1s simple es actualizar la configuraci\u00f3n del paquete web para alias cualquier importaci\u00f3n de ciertos m\u00f3dulos a la versi\u00f3n de creaci\u00f3n de perfiles de ese m\u00f3dulo.\u00a0Hay dos de estos m\u00f3dulos:<\/p>\n<ul class=\"css-q2y3yl entvr80\">\n<li><code>react-dom<\/code>\u00a0-&gt;\u00a0<code>react-dom\/profiling<\/code><\/li>\n<li><code>scheduler\/tracing<\/code>\u00a0-&gt;\u00a0<code>scheduler\/tracing-profiling<\/code><\/li>\n<\/ul>\n<p class=\"css-yw8fqx e11rucy10\">Ambos son paquetes React y necesitan un c\u00f3digo especial para que funcione el generador de perfiles.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">La forma de actualizar la configuraci\u00f3n de su paquete web variar\u00e1 seg\u00fan el marco que est\u00e9 utilizando (create-react-app, next.js, gatsby.js o el suyo con el paquete web sin formato).\u00a0En nuestro caso, estamos usando create-react-app y no hay una forma oficialmente admitida de extender o modificar la configuraci\u00f3n del paquete web.\u00a0Afortunadamente para nosotros, esto es solo algo que queremos hacer localmente, as\u00ed que haremos un poco de\u00a0espeleolog\u00eda en nuestro<code>node_modules<\/code>\u00a0.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Entonces, si est\u00e1 usando\u00a0<code>react-scripts@3.1.1<\/code>(o en alg\u00fan lugar por all\u00ed), puede abrir la configuraci\u00f3n del paquete web aqu\u00ed:\u00a0<code>.\/node_modules\/react-scripts\/config\/webpack.config.js<\/code><\/p>\n<p class=\"css-yw8fqx e11rucy10\">Luego ubique el c\u00f3digo que se ve as\u00ed y agregue las l\u00edneas indicadas:<\/p>\n<div class=\"token-line\"><strong><em><span class=\"token comment\">1 \/\/ &#8230; config &#8230;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">2 <\/span><span class=\"token plain\">resolver <\/span><span class=\"token punctuation\">: <\/span><span class=\"token punctuation\">{<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">3 <\/span><span class=\"token comment\">\/\/ &#8230; config &#8230;<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">4<\/span><span class=\"token plain\"> alias<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">5 <\/span><span class=\"token comment\">\/\/ Soporte React Native Web<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">6<\/span> <span class=\"token comment\">\/\/ https:\/\/www.smashingmagazine.com\/2016\/08\/a-glimpse-into-the-future-with-react-native-for-web\/<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">7 <\/span><span class=\"token string\">&#8216;react-native&#8217; <\/span><span class=\"token punctuation\">: <\/span><span class=\"token string\">&#8216;react-native-web&#8217; <\/span><span class=\"token punctuation\">,<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line highlight-line\"><strong><em><span class=\"css-12apmis\">8 <\/span><span class=\"token string\">&#8216;react-dom $&#8217; <\/span><span class=\"token punctuation\">: <\/span><span class=\"token string\">&#8216;react-dom \/ profiling&#8217; <\/span><span class=\"token punctuation\">,<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line highlight-line\"><strong><em><span class=\"css-12apmis\">9 <\/span><span class=\"token string\">&#8216;Scheduler \/ Tracing&#8217; <\/span><span class=\"token punctuation\">: <\/span><span class=\"token string\">&#8216;Scheduler \/ Tracing-Profiling&#8217; <\/span><span class=\"token punctuation\">,<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">10<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">11 <\/span><span class=\"token comment\">\/\/ &#8230; m\u00e1s config &#8230;<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">12<\/span><span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">13<\/span><span class=\"token comment\">\/\/ &#8230; m\u00e1s config &#8230;<\/span><\/em><\/strong><\/div>\n<div><\/div>\n<div>\n<h3 class=\"css-19l02bv e1xf8te20\">Perfilar la compilaci\u00f3n de perfiles de producci\u00f3n<\/h3>\n<p class=\"css-yw8fqx e11rucy10\">Genial, ahora corre\u00a0<code>npm run build<\/code>, \u00a1\u00a0<code>npx serve -s build<\/code>y volvamos a crear un perfil de la aplicaci\u00f3n!\u00a0Seguir\u00e9 los mismos pasos de registro que hice la \u00faltima vez.\u00a0Esto es con lo que sal\u00ed:<\/p>\n<\/div>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/520077309df2893073caa130c3ba7f6c\/17fa4\/6.png\" alt=\"Pesta\u00f1a Perfil React DevTools que muestra el gr\u00e1fico de llamas\" \/><\/p>\n<p class=\"css-yw8fqx e11rucy10\">\u00a1Agradable!\u00a0Notar\u00e1s que esta es la misma interacci\u00f3n que la \u00faltima vez (muestra la p\u00e1gina despu\u00e9s del registro) y pasamos de 13.7ms a 6.5ms.\u00a0Buena mejora!<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Pero uh oh, \u00bfqu\u00e9 es esta\u00a0<code>Anonymous<\/code>cosa componente en todo el lugar?\u00a0\u00bfY tenemos un componente llamado\u00a0<code>ee<\/code>otro llamado\u00a0<code>Z<\/code>?\u00a0\u00bfEh?\u00a0\u00bfQue est\u00e1 pasando aqui?\u00a0Bueno, debido a que estamos creando nuestra aplicaci\u00f3n para producci\u00f3n, estamos minimizando nuestro c\u00f3digo para que sea m\u00e1s r\u00e1pido cargarlo \/ analizarlo, lo cual es algo bueno para nuestros usuarios finales, pero algo malo para nuestra medici\u00f3n de rendimiento porque es dif\u00edcil para nosotros saber cu\u00e1l de estos componentes es el culpable de nuestros problemas de rendimiento.<\/p>\n<h3 class=\"css-19l02bv e1xf8te20\">Desactivar el cambio de nombre de la funci\u00f3n<\/h3>\n<p class=\"css-yw8fqx e11rucy10\">React sabe c\u00f3mo llamar a sus componentes en funci\u00f3n de la\u00a0<code>name<\/code>propiedad del componente:<\/p>\n<div class=\"token-line\"><strong><em><span class=\"token keyword\">1 funci\u00f3n <\/span><span class=\"token function maybe-class-name\">AwesomeAppComponent <\/span><span class=\"token punctuation\">( <\/span><span class=\"token punctuation\">) <\/span><span class=\"token punctuation\">{<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">2 <\/span><span class=\"token keyword\">return <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt; <\/span><span class=\"token maybe-class-name\">Impresionante <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token operator\">\/ <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt;<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">3<\/span><span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">4<\/span><span class=\"token console class-name\">consola <\/span><span class=\"token punctuation\">. <\/span><span class=\"token method function property-access\">log <\/span><span class=\"token punctuation\">( <\/span><span class=\"token maybe-class-name\">AwesomeAppComponent <\/span><span class=\"token punctuation\">. <\/span><span class=\"token property-access\">name <\/span><span class=\"token punctuation\">) <\/span><span class=\"token comment\">\/\/ &lt;- registra \u00abAwesomeAppComponent\u00bb<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">5<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">6<\/span><span class=\"token keyword\">La clase <\/span><span class=\"token class-name\">LessAwesomeAppComponent <\/span><span class=\"token keyword\">extiende <\/span><span class=\"token class-name\">React <\/span><span class=\"token class-name punctuation\">. <\/span><span class=\"token class-name\">Componente <\/span><span class=\"token punctuation\">{<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">7 <\/span><span class=\"token function\">representaci\u00f3n <\/span><span class=\"token punctuation\">( <\/span><span class=\"token punctuation\">) <\/span><span class=\"token punctuation\">{<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">8 <\/span><span class=\"token keyword\">return <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt; <\/span><span class=\"token maybe-class-name\">Menos <\/span><span class=\"token maybe-class-name\">impresionante <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token operator\">\/ <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt;<\/span> <\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">9<\/span> <span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">10<\/span><span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">11<\/span><span class=\"token console class-name\">consola <\/span><span class=\"token punctuation\">. <\/span><span class=\"token method function property-access\">log <\/span><span class=\"token punctuation\">( <\/span><span class=\"token maybe-class-name\">LessAwesomeAppComponent <\/span><span class=\"token punctuation\">. <\/span><span class=\"token property-access\">name <\/span><span class=\"token punctuation\">) <\/span><span class=\"token comment\">\/\/ &lt;- registra \u00abLessAwesomeAppComponent\u00bb<\/span> <\/em><\/strong><\/div>\n<div><\/div>\n<div>Sin embargo, cuando construimos nuestro c\u00f3digo con un \u00abuglifier\u00bb o un \u00abminifier\u00bb, la herramienta cambia esos nombres de una manera que hace que nuestro c\u00f3digo funcione igual que antes, pero reduce el tama\u00f1o de archivo de nuestro archivo JavaScript de producci\u00f3n que mejora el rendimiento :<\/div>\n<div><\/div>\n<div>\n<div class=\"token-line\"><strong><em><span class=\"token keyword\"><span class=\"\">1 funci\u00f3n <\/span><\/span><span class=\"token function\"><span class=\"\">a <\/span><\/span><span class=\"token punctuation\"><span class=\"\">( <\/span><\/span><span class=\"token punctuation\"><span class=\"\">) <\/span><\/span><span class=\"token punctuation\"><span class=\"\">{<\/span><\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">2 <\/span><span class=\"token keyword\">return <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt; <\/span><span class=\"token maybe-class-name\">Impresionante <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token operator\">\/ <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">3<\/span><span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">4<\/span><span class=\"token console class-name\">consola <\/span><span class=\"token punctuation\">. <\/span><span class=\"token method function property-access\">log <\/span><span class=\"token punctuation\">( <\/span><span class=\"token plain\">a <\/span><span class=\"token punctuation\">. <\/span><span class=\"token property-access\">name <\/span><span class=\"token punctuation\">) <\/span><span class=\"token comment\">\/\/ &lt;- registra \u00aba\u00bb<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">5<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">6<\/span><span class=\"token keyword\">la clase <\/span><span class=\"token class-name\">b se <\/span><span class=\"token keyword\">extiende <\/span><span class=\"token class-name\">Reaccionar <\/span><span class=\"token class-name punctuation\">. <\/span><span class=\"token class-name\">Componente <\/span><span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">7 <\/span><span class=\"token function\">representaci\u00f3n <\/span><span class=\"token punctuation\">( <\/span><span class=\"token punctuation\">) <\/span><span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">8 <\/span><span class=\"token keyword\">return <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt; <\/span><span class=\"token maybe-class-name\">Menos <\/span><span class=\"token maybe-class-name\">impresionante <\/span><span class=\"token operator\">&lt; <\/span><span class=\"token operator\">\/ <\/span><span class=\"token plain\">div <\/span><span class=\"token operator\">&gt;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">9<\/span> <span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">10<\/span><span class=\"token punctuation\">}<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">11<\/span><span class=\"token console class-name\">consola <\/span><span class=\"token punctuation\">. <\/span><span class=\"token method function property-access\">log <\/span><span class=\"token punctuation\">( <\/span><span class=\"token plain\">b <\/span><span class=\"token punctuation\">. <\/span><span class=\"token property-access\">name <\/span><span class=\"token punctuation\">) <\/span><span class=\"token comment\">\/\/ &lt;- registra \u00abb\u00bb<\/span><\/em><\/strong><\/div>\n<\/div>\n<div><\/div>\n<div>\n<p class=\"css-yw8fqx e11rucy10\">Es por eso que estamos viendo estos nombres divertidos en nuestras mediciones de rendimiento.\u00a0Por lo tanto, debemos deshabilitar esta funci\u00f3n de manipulaci\u00f3n.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">La aplicaci\u00f3n Create React utiliza una herramienta llamada Terser via\u00a0<a href=\"https:\/\/github.com\/webpack-contrib\/terser-webpack-plugin\"><code>terser-webpack-plugin<\/code><\/a>\u00a0para hacer la minificaci\u00f3n, por lo que simplemente necesitamos actualizar la configuraci\u00f3n para preservar la funci\u00f3n y los nombres de clase.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Entonces, en el mismo archivo de configuraci\u00f3n del paquete web, despl\u00e1cese hacia abajo hasta donde est\u00e1 configurado el complemento y modif\u00edquelo as\u00ed:<\/p>\n<div class=\"token-line\"><strong><em><span class=\"token comment\">1\/\/ &#8230; alguna configuraci\u00f3n &#8230;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">2<\/span><span class=\"token keyword\">nuevo <\/span><span class=\"token class-name\">TerserPlugin <\/span><span class=\"token punctuation\">( <\/span><span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">3 <\/span><span class=\"token plain\"> opciones <\/span><span class=\"css-12apmis\">disponibles <\/span><span class=\"token punctuation\">: <\/span><span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">4 <\/span><span class=\"token comment\">\/\/ &#8230; alguna otra configuraci\u00f3n &#8230;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">5 <\/span><span class=\"token plain\"> faltantes <\/span><span class=\"token punctuation\">: <\/span><span class=\"token punctuation\">{<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">6 <\/span><span class=\"token plain\"> safari10 <\/span><span class=\"token punctuation\">: <\/span><span class=\"token boolean\">cierto <\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">7<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line highlight-line\"><strong><em><span class=\"css-12apmis\">8 <\/span><span class=\"token plain\"> keep_classnames <\/span><span class=\"token punctuation\">: <\/span><span class=\"token boolean\">verdadero <\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line highlight-line\"><strong><em><span class=\"css-12apmis\">9 <\/span><span class=\"token plain\"> keep_fnames <\/span><span class=\"token punctuation\">: <\/span><span class=\"token boolean\">verdadero <\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">10 <\/span><span class=\"token comment\">\/\/ &#8230; algo m\u00e1s de configuraci\u00f3n &#8230;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">11<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">12 <\/span><span class=\"token comment\">\/\/ &#8230; a\u00fan m\u00e1s config &#8230;<\/span><\/em><\/strong><\/div>\n<div class=\"token-line\"><strong><em><span class=\"css-12apmis\">13<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/em><\/strong><\/div>\n<\/div>\n<div><\/div>\n<div>Con\u00a0<code>keep_classnames<\/code>y\u00a0<code>keep_fnames<\/code>configurado para\u00a0<code>true<\/code>, ahora intentemos construir nuestro c\u00f3digo de aplicaci\u00f3n y ejecutar una sesi\u00f3n de creaci\u00f3n de perfiles una vez m\u00e1s.<\/div>\n<div><\/div>\n<div><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/ab8b4fa30250387c236e241afd1e23fc\/17fa4\/7.png\" alt=\"Pesta\u00f1a Perfil React DevTools que muestra el gr\u00e1fico de llamas\" \/><\/div>\n<div>\n<p class=\"css-yw8fqx e11rucy10\">\u00a1El m\u00e1s excelente! \u00a1Ahora tenemos una sesi\u00f3n de perfil que nos muestra los nombres de todos nuestros componentes y se est\u00e1n ejecutando usando un c\u00f3digo similar al c\u00f3digo que nuestros usuarios finales ejecutar\u00e1n mucho m\u00e1s de cerca!<\/p>\n<h2 class=\"css-hhhtg6 ext0gm70\">Peligro: Perfilar con una computadora r\u00e1pida<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">Les garantizo que la mayor\u00eda de ustedes que est\u00e1n leyendo esto ahora est\u00e1n desarrollando su aplicaci\u00f3n con un dispositivo que es mucho m\u00e1s poderoso que la mayor\u00eda de las personas que usan la aplicaci\u00f3n.\u00a0No hay sustituto para probar su aplicaci\u00f3n en los dispositivos que usar\u00e1n los usuarios.\u00a0Dicho esto, puede obtener una idea mucho mejor del rendimiento real de su aplicaci\u00f3n si acelera su CPU para simular la experiencia de algunos usuarios de su aplicaci\u00f3n.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">Entonces hagamos eso.\u00a0Haga clic en la pesta\u00f1a \u00abRendimiento\u00bb de Chrome DevTools, luego en el \u00edcono de ajustes para mostrar la configuraci\u00f3n, luego en la opci\u00f3n CPU, seleccione \u00ab6x desaceleraci\u00f3n\u00bb.<\/p>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/ace2b5cf4a6c8ed5aaf0c6d553a7fbe9\/17fa4\/8.png\" alt=\"Ficha de rendimiento de Chrome DevTools que muestra la ralentizaci\u00f3n de CPU 6x seleccionada\" \/><\/p>\n<p class=\"css-yw8fqx e11rucy10\"><span class=\"\">Ahora haz todo de nuevo y comprueba la diferencia:<\/span><\/p>\n<p><img class=\"lazyload\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-orig-src=\"https:\/\/kentcdodds.com\/static\/f53e42d7c19eed988fd66d17f1b6d5d9\/17fa4\/9.png\" alt=\"Pesta\u00f1a Perfil React DevTools que muestra el gr\u00e1fico de llamas\" \/><\/p>\n<p>\u00a1Uf!\u00a031.8ms!\u00a0Eso es bastante la desaceleraci\u00f3n!\u00a0Obtenga m\u00e1s informaci\u00f3n sobre el impacto de ese momento en la experiencia del usuario en esta publicaci\u00f3n de blog titulada\u00a0Rendering Performance\u00a0.\u00a0\u00a1Esto puede ser algo que valga la pena considerar!<\/p>\n<\/div>\n<h2 class=\"css-hhhtg6 ext0gm70\">Conclusi\u00f3n<\/h2>\n<p class=\"css-yw8fqx e11rucy10\">Solo hemos cubierto lo que necesita hacer para comenzar a perfilar correctamente una aplicaci\u00f3n React, pero esperamos que haya aprendido lo suficiente como para probarla en su propia aplicaci\u00f3n y comenzar a explorar las implicaciones de rendimiento de su aplicaci\u00f3n.<\/p>\n<p class=\"css-yw8fqx e11rucy10\">\u00a1Buena suerte!<\/p>\n<\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":9,"featured_media":4086,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[32],"tags":[],"class_list":["post-4079","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.7 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Perfile una aplicaci\u00f3n React para rendimiento - TCIT<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tcit.cl\/ingles\/perfile-aplicacion-react-rendimiento\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Perfile una aplicaci\u00f3n React para rendimiento\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tcit.cl\/ingles\/perfile-aplicacion-react-rendimiento\/\" \/>\n<meta property=\"og:site_name\" content=\"TCIT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/web.facebook.com\/tcitcloudsolutions\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-26T13:44:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-26T19:30:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gonzalo Burgos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gonzalo Burgos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/\"},\"author\":{\"name\":\"Gonzalo Burgos\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#\\\/schema\\\/person\\\/3feac3eca66491ec20151f9127ed7ea1\"},\"headline\":\"Perfile una aplicaci\u00f3n React para rendimiento\",\"datePublished\":\"2019-11-26T13:44:01+00:00\",\"dateModified\":\"2023-04-26T19:30:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/\"},\"wordCount\":2294,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/21-ReactJs-Dev-Tools.jpg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/\",\"url\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/\",\"name\":\"Perfile una aplicaci\u00f3n React para rendimiento - TCIT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/21-ReactJs-Dev-Tools.jpg\",\"datePublished\":\"2019-11-26T13:44:01+00:00\",\"dateModified\":\"2023-04-26T19:30:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/21-ReactJs-Dev-Tools.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/21-ReactJs-Dev-Tools.jpg\",\"width\":1100,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/perfile-aplicacion-react-rendimiento\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.tcit.cl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Perfile una aplicaci\u00f3n React para rendimiento\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#website\",\"url\":\"https:\\\/\\\/www.tcit.cl\\\/\",\"name\":\"https:\\\/\\\/www.tcit.cl\\\/\",\"description\":\"AI Solutions\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tcit.cl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#organization\",\"name\":\"TCIT EIRL\",\"alternateName\":\"TCIT AI Solutions\",\"url\":\"https:\\\/\\\/www.tcit.cl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-TCIT_isotipo-color.png\",\"contentUrl\":\"https:\\\/\\\/www.tcit.cl\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/cropped-TCIT_isotipo-color.png\",\"width\":512,\"height\":512,\"caption\":\"TCIT EIRL\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/web.facebook.com\\\/tcitcloudsolutions\\\/\",\"https:\\\/\\\/www.instagram.com\\\/tcitcloudsolutions\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/tcit-cloud-solutions\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tcit.cl\\\/#\\\/schema\\\/person\\\/3feac3eca66491ec20151f9127ed7ea1\",\"name\":\"Gonzalo Burgos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g\",\"caption\":\"Gonzalo Burgos\"},\"url\":\"https:\\\/\\\/www.tcit.cl\\\/ingles\\\/author\\\/eduardo-albornoz-2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Perfile una aplicaci\u00f3n React para rendimiento - TCIT","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tcit.cl\/ingles\/perfile-aplicacion-react-rendimiento\/","og_locale":"en_US","og_type":"article","og_title":"Perfile una aplicaci\u00f3n React para rendimiento","og_url":"https:\/\/www.tcit.cl\/ingles\/perfile-aplicacion-react-rendimiento\/","og_site_name":"TCIT","article_publisher":"https:\/\/web.facebook.com\/tcitcloudsolutions\/","article_published_time":"2019-11-26T13:44:01+00:00","article_modified_time":"2023-04-26T19:30:25+00:00","og_image":[{"width":1100,"height":750,"url":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg","type":"image\/jpeg"}],"author":"Gonzalo Burgos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Gonzalo Burgos","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#article","isPartOf":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/"},"author":{"name":"Gonzalo Burgos","@id":"https:\/\/www.tcit.cl\/#\/schema\/person\/3feac3eca66491ec20151f9127ed7ea1"},"headline":"Perfile una aplicaci\u00f3n React para rendimiento","datePublished":"2019-11-26T13:44:01+00:00","dateModified":"2023-04-26T19:30:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/"},"wordCount":2294,"commentCount":0,"publisher":{"@id":"https:\/\/www.tcit.cl\/#organization"},"image":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/","url":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/","name":"Perfile una aplicaci\u00f3n React para rendimiento - TCIT","isPartOf":{"@id":"https:\/\/www.tcit.cl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#primaryimage"},"image":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg","datePublished":"2019-11-26T13:44:01+00:00","dateModified":"2023-04-26T19:30:25+00:00","breadcrumb":{"@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#primaryimage","url":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg","contentUrl":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2019\/11\/21-ReactJs-Dev-Tools.jpg","width":1100,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/www.tcit.cl\/perfile-aplicacion-react-rendimiento\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.tcit.cl\/"},{"@type":"ListItem","position":2,"name":"Perfile una aplicaci\u00f3n React para rendimiento"}]},{"@type":"WebSite","@id":"https:\/\/www.tcit.cl\/#website","url":"https:\/\/www.tcit.cl\/","name":"https:\/\/www.tcit.cl\/","description":"AI Solutions","publisher":{"@id":"https:\/\/www.tcit.cl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tcit.cl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.tcit.cl\/#organization","name":"TCIT EIRL","alternateName":"TCIT AI Solutions","url":"https:\/\/www.tcit.cl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tcit.cl\/#\/schema\/logo\/image\/","url":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2025\/09\/cropped-TCIT_isotipo-color.png","contentUrl":"https:\/\/www.tcit.cl\/wp-content\/uploads\/2025\/09\/cropped-TCIT_isotipo-color.png","width":512,"height":512,"caption":"TCIT EIRL"},"image":{"@id":"https:\/\/www.tcit.cl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/web.facebook.com\/tcitcloudsolutions\/","https:\/\/www.instagram.com\/tcitcloudsolutions\/","https:\/\/www.linkedin.com\/company\/tcit-cloud-solutions\/"]},{"@type":"Person","@id":"https:\/\/www.tcit.cl\/#\/schema\/person\/3feac3eca66491ec20151f9127ed7ea1","name":"Gonzalo Burgos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e2d4d08554b58b6bdc8ddfc801c6b583fb9207e71f73b8a119ced6a71fc814d0?s=96&d=mm&r=g","caption":"Gonzalo Burgos"},"url":"https:\/\/www.tcit.cl\/ingles\/author\/eduardo-albornoz-2\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/posts\/4079","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/comments?post=4079"}],"version-history":[{"count":0,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/posts\/4079\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/media\/4086"}],"wp:attachment":[{"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/media?parent=4079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/categories?post=4079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tcit.cl\/ingles\/wp-json\/wp\/v2\/tags?post=4079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}