¿Cuáles son las compensaciones de la representación del lado del cliente frente a la representación del lado del servidor?
Respuestas
10/08/2024
Amitie
Dado que Google Plus y algunos otros sitios web de vanguardia ahora representan enteramente en el cliente, revisemos por qué es deseable la representación del lado del servidor.
La representación del lado del servidor significa que cuando el navegador recupera la página a través de HTTP, inmediatamente recupera el HTML que describe la página. La representación del lado del servidor es buena porque:
Su contenido es visible para los motores de búsqueda como Google
La página carga más rápido. No hay una "página blanca" mientras el navegador descarga el código de representación y los datos y ejecuta el código.
Mantiene la idea de que las páginas son documentos, y si le pide a un servidor un documento por URL, obtiene el texto del documento en lugar de un programa que genera ese texto utilizando una API complicada.
La representación del lado del cliente significa que JavaScript que se ejecuta en el navegador produce HTML o manipula el DOM. El beneficio es que puedes actualizar la pantalla al instante cuando el usuario hace clic, en lugar de esperar unos cientos de milisegundos al menos mientras se contacta al servidor para preguntar qué mostrar. Los sitios en los que navega y ve contenido estático en su mayoría pueden salirse con la mayoría del procesamiento del lado del servidor, pero no puedo pensar en ningún sitio web que no funcione cualquier Representación del lado del cliente. Cualquier parte de una página que sea animada o altamente interactiva (un control deslizante arrastrable, una tabla ordenable, un menú desplegable) casi con toda seguridad utiliza la representación del lado del cliente.
La gente no suele darse cuenta no tiene que haber una compensación. ¿Por qué no representar el estado inicial de la página en el servidor, los widgets interactivos y todo, y luego volver a representar las partes que deben actualizarse en el cliente? Aunque es típico representar la carne de una página en el servidor y luego "mejorarla" en el cliente con una biblioteca como jQuery, es raro que un sitio realice las mismas tareas de representación en el servidor y el cliente, según corresponda.
La razón por la que el renderizado del lado del servidor y del lado del cliente generalmente no se mezclan es que generalmente se realizan en diferentes entornos de programación, generalmente en diferentes idiomas. Por ejemplo, casi todos los sitios web representan el diseño general de la página y el contenido, como las publicaciones de blog, en el servidor, generando HTML en un lenguaje como Ruby, PHP o Python. Por otro lado, un widget de chat o una galería de imágenes podrían escribirse completamente en JavaScript del lado del cliente, mientras que un control deslizante o un editor de texto enriquecido ciertamente lo serían.
Para los sitios web que combinan contenido estático y navegable e interactividad similar a una aplicación (o para empresas que buscan proporcionar una medida adicional de cordura para sus ingenieros y diseñadores), esta división se convierte en un gran dolor. Esta es la razón por la cual Google Plus realiza todo el procesamiento en el cliente. Quora realiza inteligentemente casi todo el procesamiento en el servidor (incluso cuando, por ejemplo, hace clic en el botón "Seguir"), pero solo las partes actualizadas se envían al cliente. (Los widgets particulares como el editor y el control deslizante "Promover" que proporcionan comentarios instantáneos son claramente del lado del cliente). En un esfuerzo por aumentar la capacidad de respuesta y la flexibilidad, muchos sitios ahora muestran plantillas Ruby en el servidor y plantillas Backbone en el cliente para diferentes partes del cliente. La misma interfaz de usuario. AirBnB ha experimentado con la ejecución de plantillas JavaScript del lado del cliente en el servidor.
Con JavaScript en el lado del servidor en aumento, creo que la solución es simplemente tener un marco de interfaz de usuario único que se ejecute tanto en el cliente como en el servidor, generando el HTML inicial en el servidor y proporcionando una experiencia interactiva en el cliente. Estoy trabajando para llevar dicho marco a Meteor, que ya unifica otras API entre el cliente y el servidor, como buscar una URL o consultar una colección de datos.
En ausencia de tal solución, los programadores generalmente terminan argumentando que la representación del lado del cliente no es muy importante (porque la mayoría de los sitios o aplicaciones consisten en grandes "páginas" o "pantallas" y un viaje de ida y vuelta al servidor es aceptable cuando se navega entre ellos), o que la representación del lado del servidor no es muy importante (porque una aplicación para todos los clientes solo necesita una pantalla de carga y un poco de atención extra para la optimización del motor de búsqueda). Estos argumentos están motivados por el dolor de tener que lidiar con ambos tipos de renderizado en la misma aplicación cuando involucran diferentes lenguajes y API.
Editar: más ejemplos de sitios importantes y sus estrategias de representación: Facebook es principalmente PHP, pero ciertas partes de la interfaz de usuario son JavaScript puro: el chat, el formulario de comentarios, probablemente la galería de fotos. Gmail está escrito en algo así como C ++ o Java, y no estoy seguro de dónde se realiza el renderizado, pero supongo que está mayor o completamente en el cliente (dada la barra de progreso que se muestra mientras se carga). La vista antigua o "básica" de Gmail se presume presumiblemente del lado del servidor. La implementación de Markdown de Github está escrita en C y se ejecuta en el servidor. StackOverflow tiene dos implementaciones de Markdown, una para la vista previa en vivo en el cliente y otra para el servidor.
Editar (julio de 2016): dado que esta respuesta sigue obteniendo puntos de vista y votos, notaré que "tener un único marco de interfaz de usuario que se ejecuta tanto en el cliente como en el servidor" es ahora una solución más popular que nunca, como Node y React hacerse cada vez más maduro y extendido. Node es un servidor que ejecuta JavaScript, y React es un marco de interfaz de usuario de Facebook. Se ha invertido mucho trabajo y pensamiento en las funciones de representación del lado del servidor de React.
La redirección de Tradeexhange no es un virus, es un adware.Elimine todas las aplicaciones no deseadas y gratuitas de su dispositivo. Incluyendo cualquier juego que muestre anuncios mientras juega.También asegúrese de en -> Configuración -> Aplicaciones -> Aplicación en ejecución.No se debe ejecutar ninguna aplicación desconocida, asegúrese de que no se estén ejecutando otras aplicaciones...
Respuestas
Dado que Google Plus y algunos otros sitios web de vanguardia ahora representan enteramente en el cliente, revisemos por qué es deseable la representación del lado del servidor.
La representación del lado del servidor significa que cuando el navegador recupera la página a través de HTTP, inmediatamente recupera el HTML que describe la página. La representación del lado del servidor es buena porque:
La representación del lado del cliente significa que JavaScript que se ejecuta en el navegador produce HTML o manipula el DOM. El beneficio es que puedes actualizar la pantalla al instante cuando el usuario hace clic, en lugar de esperar unos cientos de milisegundos al menos mientras se contacta al servidor para preguntar qué mostrar. Los sitios en los que navega y ve contenido estático en su mayoría pueden salirse con la mayoría del procesamiento del lado del servidor, pero no puedo pensar en ningún sitio web que no funcione cualquier Representación del lado del cliente. Cualquier parte de una página que sea animada o altamente interactiva (un control deslizante arrastrable, una tabla ordenable, un menú desplegable) casi con toda seguridad utiliza la representación del lado del cliente.
La gente no suele darse cuenta no tiene que haber una compensación. ¿Por qué no representar el estado inicial de la página en el servidor, los widgets interactivos y todo, y luego volver a representar las partes que deben actualizarse en el cliente? Aunque es típico representar la carne de una página en el servidor y luego "mejorarla" en el cliente con una biblioteca como jQuery, es raro que un sitio realice las mismas tareas de representación en el servidor y el cliente, según corresponda.
La razón por la que el renderizado del lado del servidor y del lado del cliente generalmente no se mezclan es que generalmente se realizan en diferentes entornos de programación, generalmente en diferentes idiomas. Por ejemplo, casi todos los sitios web representan el diseño general de la página y el contenido, como las publicaciones de blog, en el servidor, generando HTML en un lenguaje como Ruby, PHP o Python. Por otro lado, un widget de chat o una galería de imágenes podrían escribirse completamente en JavaScript del lado del cliente, mientras que un control deslizante o un editor de texto enriquecido ciertamente lo serían.
Para los sitios web que combinan contenido estático y navegable e interactividad similar a una aplicación (o para empresas que buscan proporcionar una medida adicional de cordura para sus ingenieros y diseñadores), esta división se convierte en un gran dolor. Esta es la razón por la cual Google Plus realiza todo el procesamiento en el cliente. Quora realiza inteligentemente casi todo el procesamiento en el servidor (incluso cuando, por ejemplo, hace clic en el botón "Seguir"), pero solo las partes actualizadas se envían al cliente. (Los widgets particulares como el editor y el control deslizante "Promover" que proporcionan comentarios instantáneos son claramente del lado del cliente). En un esfuerzo por aumentar la capacidad de respuesta y la flexibilidad, muchos sitios ahora muestran plantillas Ruby en el servidor y plantillas Backbone en el cliente para diferentes partes del cliente. La misma interfaz de usuario. AirBnB ha experimentado con la ejecución de plantillas JavaScript del lado del cliente en el servidor.
Con JavaScript en el lado del servidor en aumento, creo que la solución es simplemente tener un marco de interfaz de usuario único que se ejecute tanto en el cliente como en el servidor, generando el HTML inicial en el servidor y proporcionando una experiencia interactiva en el cliente. Estoy trabajando para llevar dicho marco a Meteor, que ya unifica otras API entre el cliente y el servidor, como buscar una URL o consultar una colección de datos.
En ausencia de tal solución, los programadores generalmente terminan argumentando que la representación del lado del cliente no es muy importante (porque la mayoría de los sitios o aplicaciones consisten en grandes "páginas" o "pantallas" y un viaje de ida y vuelta al servidor es aceptable cuando se navega entre ellos), o que la representación del lado del servidor no es muy importante (porque una aplicación para todos los clientes solo necesita una pantalla de carga y un poco de atención extra para la optimización del motor de búsqueda). Estos argumentos están motivados por el dolor de tener que lidiar con ambos tipos de renderizado en la misma aplicación cuando involucran diferentes lenguajes y API.
Editar: más ejemplos de sitios importantes y sus estrategias de representación: Facebook es principalmente PHP, pero ciertas partes de la interfaz de usuario son JavaScript puro: el chat, el formulario de comentarios, probablemente la galería de fotos. Gmail está escrito en algo así como C ++ o Java, y no estoy seguro de dónde se realiza el renderizado, pero supongo que está mayor o completamente en el cliente (dada la barra de progreso que se muestra mientras se carga). La vista antigua o "básica" de Gmail se presume presumiblemente del lado del servidor. La implementación de Markdown de Github está escrita en C y se ejecuta en el servidor. StackOverflow tiene dos implementaciones de Markdown, una para la vista previa en vivo en el cliente y otra para el servidor.
Editar (julio de 2016): dado que esta respuesta sigue obteniendo puntos de vista y votos, notaré que "tener un único marco de interfaz de usuario que se ejecuta tanto en el cliente como en el servidor" es ahora una solución más popular que nunca, como Node y React hacerse cada vez más maduro y extendido. Node es un servidor que ejecuta JavaScript, y React es un marco de interfaz de usuario de Facebook. Se ha invertido mucho trabajo y pensamiento en las funciones de representación del lado del servidor de React.