- Navios
- 17 de setembro de 2026 às 19:43 UTC
- Autor
- Kamo
- Enviar
- 905fba8
Tudo sobre uma janela de ferramenta popup que MOVES - re-embalando a linha, trocando lugares com uma tira clique, saindo de uma fileira atrás, um arrasto, uma costura puxar, tomando e deixando o painel maximizado - estava custando um passe de layout e um re-re-render React completo do conteúdo de cada janela aberta por quadro. Medido no arnês com oito janelas abertas (cromado sem cabeça, antes/depois, três execuções cada): - um clique de tira: 12-14 passes de layout -> 1, tempo de script 87-104ms -> 44-52ms - um 40-move título-bar arrastar: 168 re-renders de janela CONTEÚDO -> 0, e 86 layout forçado leituras -> 3 - camadas de filtro de fundo realmente pintadas: 8 de 8 -> 5 de 8 (apenas as janelas de pé atrás) Cada janela termina no mesmo pixel, e cada transição percorre o mesmo caminho sobre o mesmo frames: dock->float, float->dock, dock->maximizado e maximizado->dock todas as amostras idênticas Endpoints, contagens idênticas de quadros móveis e passo maior idêntico. A única diferença de pixel em repouso é a fase de anti- aliasing subpixel nas bordas do glifo nas janelas acoplada - mesmas posições, mesmo peso do curso (2649 vs 2643 pixels de tinta), mesma energia de borda (5,47 vs 5,53). O que mudou: - Uma janela acoplada é colocada por 'traduzir' em vez de 'esquerda'/'top', com o hover lift dobrado. Os outros três regimes mantêm 'esquerda'/'top' e nenhuma tradução, e a entrega é exata porque todos os `esquerda', `top' e `traduzir' já compartilham um relógio de transição: duas rampas em um soma da curva à rampa entre os parâmetros. Deliberadamente não "vai mudar" - não comprou nada qualquer sonda pode ver e custa uma camada compositora por janela para a sessão. - `relayoutWindows' responde ao mesmo array quando nada se moveu. Sempre respondeu às mesmas janelas. e um novo array, então cada um dos quinze chamados de `store.relayout() - incluindo o sincronização da barra de rolagem que executa 120ms após qualquer mutação DOM em qualquer lugar do documento - re-rendered todos os leitores da lista de janelas. - `useToolWindowsStable(): a lista de janelas com sua geometria ignorada. Os sete corpos de ferramentas, o três pontes não lidas e o observador de realizações todos lê-lo para um booleano cada um e nenhum tem nunca ler uma caixa, então um arrastar em altura não re-render todas as listas de mensagens no ecrã. - `useToolWindowActions()`: os callbacks, por identidade, então um chamador que só envia não é re-rendered por uma janela em movimento. - `readViewport()` mantém sua medida de borda direita entre os eventos que podem alterá-lo. A chamada de fase de renderização no ToolDock estava ruborizando um layout sujo sessenta vezes por segundo durante um arrasto. - `DockedToolWindow` e `ToolWindowBody`: um limite de memorando por janela e por ferramenta, com cada Chamada de volta para a vida da janela. "MaximizedTabStrip", "MaximizedTab", «ChatNavigatorPanel», «DockSnapIndicator», «HexHeadSpring» e «HexHeadPopover» também. - O 'filtro de fundo' do véu é 'visibilidade: oculta' quando a janela não está atrás. Ele transições discretamente, de modo que o desbotamento ainda joga completamente antes que a camada deixe de ser pintada. - O laço de arremesso hexhead já não marca o estado de Reagir por quadro; as trilhas do cometa executam as suas próprias animation frame e escrever atributos SVG, para que um lançamento pare de re-rendering todo o palco. - A barra de título chegada varre-se quando termina em vez de estacionar fora do quadro para a sessão, e os keyframes do shell são memorizados - três dos cinco ramos retornam keyframe ARRAY, então uma re-re-render mid-wap usado para reiniciar o cross-dissolve. `dockRenderCost.test.tsx` pinos tudo isso como conta; o caso de identidade retransmissão falha no HEAD.