{"componentChunkName":"component---src-templates-docs-js","path":"/docs/profiler.html","result":{"data":{"markdownRemark":{"html":"<p>O componente <code class=\"gatsby-code-text\">Profiler</code> mede a frequência de renderização de uma aplicação React e o “custo” dessa renderização.\nSeu objetivo  é ajudar a identificar partes de aplicação que são lentas e podem se beneficiar de <a href=\"/docs/hooks-faq.html#how-to-memoize-calculations\">otimizações como a memorização</a></p>\n<blockquote>\n<p>Nota:</p>\n<p>O uso do <code class=\"gatsby-code-text\">Profiler</code> adiciona uma sobrecarga de processamento, sendo portanto <strong>desabilitada no <a href=\"/docs/optimizing-performance.html#use-the-production-build\"><em>build</em> de produção</a></strong>.</p>\n<p>Ao optar pelo uso do <code class=\"gatsby-code-text\">Profiler</code> em produção, o React provisiona um <em>build</em> especial de produção com o <code class=\"gatsby-code-text\">Profiler</code> habilitado.\nLeia mais sobre como utilizar esse <em>build</em> em <a href=\"https://fb.me/react-profiling\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">fb.me/react-profiling</a></p>\n</blockquote>\n<h2 id=\"usage\"><a href=\"#usage\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Utilização </h2>\n<p>O <code class=\"gatsby-code-text\">Profiler</code> pode ser adicionado em qualquer lugar dentro da árvore de React para mensurar o custo de renderização dessa parte da árvore.\nEle exige duas <em>props</em>: um <code class=\"gatsby-code-text\">id</code> (formato <em>string</em>) e uma função de callback <code class=\"gatsby-code-text\">onRender</code>, o qual o react executa no momento em que a árvore “envia” uma atualização.</p>\n<p>Por exemplo, para executar um <em>profile</em> em um componente de <code class=\"gatsby-code-text\">Navigation</code> e seus descendentes:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Navigation<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Navigation</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Main</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Múltiplos componentes <code class=\"gatsby-code-text\">Profiler</code> podem ser utilizados para mensurar diferentes partes de uma aplicação:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Navigation<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Navigation</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Main<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Main</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Componentes <code class=\"gatsby-code-text\">Profiler</code> também podem estar aninhados para mensurar diferentes componentes em uma mesma subárvore:</p>\n<div class=\"gatsby-highlight has-highlighted-lines\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token function\">render</span><span class=\"token punctuation\">(</span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Panel<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Panel</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Content<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Content</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Profiler</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>PreviewPane<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onRender</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>callback<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">          </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">PreviewPane</span></span> <span class=\"token spread\"><span class=\"token punctuation\">{</span><span class=\"token punctuation\">...</span><span class=\"token attr-value\">props</span><span class=\"token punctuation\">}</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Panel</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Profiler</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">  </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<blockquote>\n<p>Nota</p>\n<p>Apesar do <code class=\"gatsby-code-text\">Profiler</code> ser um componente leve, deve ser usado apenas quando necessário; cada uso traz uma carga adicional de CPU e memória para uma aplicação.</p>\n</blockquote>\n<h2 id=\"onrender-callback\"><a href=\"#onrender-callback\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><em>Callback</em> <code class=\"gatsby-code-text\">onRender</code> </h2>\n<p>O <code class=\"gatsby-code-text\">Profiler</code> requer uma função <code class=\"gatsby-code-text\">onRender</code> como <em>prop</em>.\nO React chama essa função em todo momento que o a árvore dentro dele “envia” uma atualização.\nEla recebe parâmetros descrevendo o que foi renderizado e quanto tempo levou.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">onRenderCallback</span><span class=\"token punctuation\">(</span>\n  id<span class=\"token punctuation\">,</span> <span class=\"token comment\">// o prop \"id\" da árvore Profiler que acabou de atualizar </span>\n  phase<span class=\"token punctuation\">,</span> <span class=\"token comment\">//  \"mount\" (se a árvore acabou de ser montada) ou \"update\" (se foi renderizada novamente)</span>\n  actualDuration<span class=\"token punctuation\">,</span> <span class=\"token comment\">// tempo gasto renderizando a atualização enviada</span>\n  baseDuration<span class=\"token punctuation\">,</span> <span class=\"token comment\">// tempo estimado para renderizar totalmente a subárvore sem memorização</span>\n  startTime<span class=\"token punctuation\">,</span> <span class=\"token comment\">// quando o React começou renderizar essa atualização</span>\n  commitTime<span class=\"token punctuation\">,</span> <span class=\"token comment\">// quando o React enviou essa atualização</span>\n  interactions <span class=\"token comment\">// um Set de interações pertencentes â essa atualização</span>\n<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Agregue ou registre os tempos de renderização..</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Vamos ver no detalhe cada uma dessas <em>props</em>:</p>\n<ul>\n<li><strong><code class=\"gatsby-code-text\">id: string</code></strong> -\nO <code class=\"gatsby-code-text\">id</code> da árvore Profiler que acabou de atualizar.\nIsso pode ser utilizado para identificar qual parte da árvore foi atualizada se você está utilizando múltiplos componentes <code class=\"gatsby-code-text\">Profiler</code>.</li>\n<li><strong><code class=\"gatsby-code-text\">phase: &quot;mount&quot; | &quot;update&quot;</code></strong> -\nIdentifica se a árvore que foi montada pela primeira vez ou renderizada novamente por uma mudança na <em>props</em>, no estado ou por <em>hooks</em>.</li>\n<li><strong><code class=\"gatsby-code-text\">actualDuration: number</code></strong> -\nTempo desprendido renderizańdo o <code class=\"gatsby-code-text\">Profiler</code> e seus descententes para a atualização corrente.\nIsso indica o quão bem essa subárvore faz o uso da memorização (e.g. <a href=\"/docs/react-api.html#reactmemo\"><code class=\"gatsby-code-text\">React.memo</code></a>, <a href=\"/docs/hooks-reference.html#usememo\"><code class=\"gatsby-code-text\">useMemo</code></a>, <a href=\"/docs/hooks-faq.html#how-do-i-implement-shouldcomponentupdate\"><code class=\"gatsby-code-text\">shouldComponentUpdate</code></a>).\nIdealmente esse valor deve diminuir significativamente depois da montagem inicial visto que os descendentes só precisarão renderizar novamente se as suas <em>props</em> específicas forem alteradas.</li>\n<li><strong><code class=\"gatsby-code-text\">baseDuration: number</code></strong> -\nA duração da renderização mais recente para cada componente individual dentro da árvore <code class=\"gatsby-code-text\">Profiler</code>.\nEsse valor estima um pior cenário de renderização (por exemplo, a montagem inicial de uma árvore sem memorização).</li>\n<li><strong><code class=\"gatsby-code-text\">startTime: number</code></strong> -\n<em>Timestamp</em> de quando o React começou a renderizar a atualização corrente.</li>\n<li><strong><code class=\"gatsby-code-text\">commitTime: number</code></strong> -\n<em>Timestamp</em> de quando o React enviou a atualização corrente.\nEsse valor é compartilhado entre todos os componentes <code class=\"gatsby-code-text\">Profiler</code> em um envio, permitindo o agrupamento deles se desejável.</li>\n<li><strong><code class=\"gatsby-code-text\">interactions: Set</code></strong> -\n<em>Set</em> de <a href=\"https://fb.me/react-interaction-tracing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">“interações”</a> que estavam sendo rastreadas quando a atualização foi agendada (por exemplo, quando um <code class=\"gatsby-code-text\">render</code> ou <code class=\"gatsby-code-text\">setState</code> foi invocado).</li>\n</ul>\n<blockquote>\n<p>Nota</p>\n<p>Interações podem ser usadas para identificar a causa de uma atualização, apesar da API para rastreá-las ainda ser experimental.</p>\n<p>Aprenda mais sobre em <a href=\"https://fb.me/react-interaction-tracing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">fb.me/react-interaction-tracing</a></p>\n</blockquote>","frontmatter":{"title":"Profiler API","next":null,"prev":null},"fields":{"path":"content/docs/reference-profiler.md","slug":"docs/profiler.html"}}},"pageContext":{"slug":"docs/profiler.html"}},"staticQueryHashes":[]}