Editor performance issues when trying to load complex ACF groups on blocks
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript, jquery, php, wordpress
- Área
- frontend, performance
Línea de trabajo
Reproduce el caso usando el bloque de theme functions.php, el grupo de campos y el contenido de la entrada del gist enlazado; después, perfila la inicialización cuando el bloque se abre en la barra lateral. Empieza con la ruta de renderizado de true_false y la inicialización del select basada en Select2 descrita en el informe, centrándote en el recálculo repetido de estilos. El trabajo estará terminado cuando los campos de bloque complejos de ACF se inicialicen sin bloquear el navegador durante varios segundos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
ACF is blocking the browser when attempting to initialize the editor fields for ACF block with complex field group and a lot of content inside of it.
This "blocking" is only happening when trying to initialize the block's fields after the page was already loaded. Also, blocking time is way smaller on Firefox.
To Reproduce
Reproduction requires the ACF & ACF Pro plugins to be installed.
- Register the dummy block inside the theme's functions.php using the snippet in the gist
- Import the field group from the gist
- Create the new page and insert the content provided in the gist
- Once page is saved, switch the block to the "preview" mode.
- Reload the page, wait for the editor page to load
- Click on the block to open its editor in the right sidebar
- Field group will try to initialize, blocking the browser for several seconds (~6s on my machine).
- After this initial blocking, editor functions normally
Expected behavior
Block fields groups should load near-instantly without blocking the whole browser for several seconds.
Screenshots or Video
Video preview of the lag when clicking on the ACF block and loading the field group:
https://github.com/user-attachments/assets/7ae1f0e8-45b2-41f3-a45c-099ed211700b
Using Chrome DevTools, I've captured the following monstrosity of the "Long Task":
Code
ACF field group, code for creating the dummy block and the content of the page required for reproduction can be found in this gist: https://gist.github.com/koloml/00a529c3ce935753c5e481b0c1898ab3
Version Information:
- WordPress Version: 6.8.1
- PHP Version: 8.2.27
- ACF PRO Version: 6.5.0.1
- Browser: Chrome 139
Additional context
I've tried to analyze the profile results. As you might have seen, the issue lies in the styles recalculation constantly being triggered while field group is rendering itself. Some fields are editing the styles, invalidating the browser internal caches related to styling. Then other fields are requesting the browser to calculate some properties which are dependent on the styling. Browser then recalculates styles and fields are invalidating the styles again.
Here are my attempts to pin-point the causes of the issues from the reproduction.
Checkbox (true_false) on render() is trying to calculate width of .acf-switch-on and .acf-switch-off. JQuery then attempts to get this width and causes browser to recalculate styles. Resulting width is added to inline styles.
Selector (select) with stylized UI enabled is initializing Select2 instance. During dropdown initialization, Select2 tries to subscribe to mousewheel events. This triggers special hook which calculates the line height for the options. During the calculation, it tries to request the font size on one of the parent elements.
I'm pretty sure this does not cover all blocks that cause this issue. I think, at least the fields which are based on Select2 or which are using jQuery in some way might also trigger unnecessary styling recalculations.
- Lenguaje dominante
- PHP
- Estrellas
- 948
- Forks
- 198
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de AdvancedCustomFields/acf
-
PHP 8.5: "Using null as an array offset" deprecation in ACF_Data::is() when rendering a block with empty data (local-meta.php is_request)Posiblemente ocupada @faisalahammad la tomó hace 6 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
AdvancedCustomFields/acf#1044 ·
-
is_preview was called incorrectly notice on every early get_field() since 6.8.10 (acf_revisions::acf_validate_post_id)Posiblemente ocupada @faisalahammad la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
AdvancedCustomFields/acf#1041 · 1 comentario ·
-
True / False ACF control bug on RTL layoutsPosiblemente ocupada @elicohenator la tomó hace 28 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
AdvancedCustomFields/acf#1038 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
AdvancedCustomFields/acf#1034 · 3 comentarios ·
-
Bug: class-acf-field-icon_picker.php calls wp_get_attachment_image_url() with string Dashicon slug, causing fatal TypeError on PHP 8+Posiblemente ocupada @antwonw la tomó hace 40 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
AdvancedCustomFields/acf#1032 · 1 comentario ·
Todos los issues de AdvancedCustomFields/acf
Issues similares
-
InvoiceSettled is answered 200 when the invoice cannot be re-fetched, so BTCPay never redelivers itAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
btcpayserver/woocommerce-greenfield-plugin#93 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
opnsense/core#11052 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
grokability/snipe-it#19857 ·
Los mantenedores suelen responder en 1 día