¿Cuándo debo crear múltiples pantallas de una vista en lugar de múltiples vistas?

8

¿Es simplemente una cuestión de conveniencia crear múltiples pantallas de una vista en lugar de múltiples vistas, o hay algún beneficio de rendimiento?

¿Tener alguno de los siguientes elementos presentes en algunas pantallas pero no en otras afecta la vista en su conjunto?

  • filtros contextuales
  • filtros de tipo de contenido
  • agregación

Por ejemplo, tengo curiosidad por saber si hacer que una pantalla muestre solo los resultados del tipo de contenido del Artículo, otra que muestre los resultados del Foro, otra que muestre un tipo de contenido de Foto personalizado hace que cada pantalla se ejecute más lentamente. O si todas las Vistas comparten el mismo tipo de contenido, pero solo difieren en que una tiene un filtro contextual para nid y las otras no, ¿se ralentizan todas?

Si tengo 30 pantallas para una sola vista, ¿debería refactorizarlo para obtener un beneficio de rendimiento, o simplemente porque la interfaz de usuario no estaba destinada a mostrar tantas pantallas?

PetróleoJelliffe
fuente

Respuestas:

8

En cuanto al código, tanto las vistas como las pantallas están representadas por objetos. Cuando se procesa una Vista, carga todas sus pantallas secundarias en la memoria, independientemente de si está representando solo una Vista en la página que está viendo. Si bien las consultas de la base de datos se ejecutan solo para la pantalla activa, las propiedades de las pantallas inactivas aún se cargan en la memoria.

Esto significa que si tiene 50 pantallas en una Vista, se cargarán 50 pantallas en la memoria, independientemente de si solo está mostrando una de ellas. Por lo tanto, la respuesta a su pregunta es sí, por lo general, mientras más pantallas tenga en una vista, más ineficiente será la Vista en cuanto a memoria.

Dicho esto, personalmente creo que tener entre 2 y 10 pantallas en una Vista debería ser insignificante en cuanto a memoria. Tener una cantidad discreta de pantallas en una Vista sirve para fines prácticos, después de todo (de lo contrario, ¿por qué estarían allí en primer lugar?).

En cuanto a su segunda pregunta (impacto en el rendimiento de filtros adicionales, etc.), sí, agregar ciertos parámetros a su Vista afectará el rendimiento. Si desea saber exactamente cuánto, puede ir a admin / structure / views / settings (si está en D7) y seleccionar Mostrar información y estadísticas sobre la vista durante la vista previa en vivo , Mostrar la consulta SQL y Mostrar estadísticas de rendimiento . Aquí hay una captura de pantalla de la pantalla de rendimiento:

Visualiza la configuración de rendimiento

Si está más interesado en el comportamiento de las consultas (cuántas filas se analizan, qué teclas se usan), puede copiar la consulta desde la interfaz de Vistas (una vez que haya seleccionado "Mostrar consulta SQL") y analizar la consulta usando el explaincomando MySQL . Hay muchos artículos como este para explainusar en Google.

barista aficionado
fuente
1
Una pregunta de seguimiento: cuando dice que las pantallas secundarias se cargan en la memoria, ¿se cargan los conjuntos de resultados de todas las pantallas o solo las cadenas de consulta?
PetroleumJelliffe
1
@PetroleumJelliffe Una instancia de clase que representa cada pantalla se adjunta a una instancia de clase View. Los resultados de la base de datos solo se obtienen para la visualización "activa" actual, por lo que ninguna de las otras instancias de visualización adjuntas contienen resultados de la base de datos o cadenas de consulta. Hasta donde sé, las cadenas de consulta en las pantallas de Vistas se construyen solo para la pantalla activa que se está ejecutando.
barista aficionado