2009-07-18 11 views
28

Tengo un sitio bastante ajax y algunas páginas con formato html de 3k se insertan en el DOM a partir de solicitudes ajax.ajax html vs respuestas xml/json - rendimiento u otras razones

Lo que he estado haciendo es tomar las respuestas html y simplemente insertar todo usando jQuery.

Mi otra opción es imprimir en xml (o posiblemente json) y luego analizar el documento e insertarlo en la página.

Me he dado cuenta de que parece que el sitio más grande hace las cosas de la manera json/xml. Google Mail devuelve xml en lugar de formato html.

¿Esto se debe al rendimiento? o hay otra razón para usar xml/json vs solo recuperar html?

Desde el punto de vista de javascript, parece que inyectar html directo es lo más simple. En jQuery Sólo que esta

jQuery.ajax({ 
    type: "POST", 
    url: "getpage.php", 
    data: requestData, 
    success: function(response) { 
     jQuery('div#putItHear').html(response); 
    } 

con una respuesta XML/JSON que tendría que hacer

jQuery.ajax({ 
    type: "POST", 
    url: "getpage.php", 
    data: requestData, 
    success: function(xml) { 
     $("message",xml).each(function(id) { 
      message = $("message",xml).get(id); 
      $("#messagewindow").prepend("<b>" + $("author",message).text() + 
      "</b>: " + $("text",message).text() + 
      "<br />"); 
     }); 
    } 
}); 

claramente no es tan eficiente desde el punto de vista de código, y no puedo esperar que es mejor rendimiento del navegador, entonces, ¿por qué hacer las cosas de la segunda manera?

Respuesta

6

Normalmente reducirá la cantidad de datos transferidos y, por lo tanto, mejorará la velocidad de transferencia. Como todo lo que ocurre por encima del cable normalmente es el cuello de botella en un proceso que reduce el tiempo de transferencia, reducirá el tiempo total requerido para realizar el proceso, mejorando la experiencia del usuario.

+2

esto realmente se pone en el centro del problema Garry. Aunque también lo abre a un mayor debate. con 2K entrando en la línea, me pregunto de dónde vendrá el golpe de rendimiento. ¿es por venir por la tubería?o es de insertar un chuck versos analizando a través de json/xml y luego insertando uno a uno – pedalpete

+1

También es útil tener en cuenta que cuando jQuery recupera html de AJAX, si es una página HTML hay una gran cantidad de datos allí que jQuery no puede analizar. Dado que el método de jQuery para construir los nuevos nodos DOM es mantenerlos dentro de un div, los elementos como html, head, body, etc. son inválidos e ignorados. Esto puede significar que está enviando una gran cantidad de datos desperdiciados a través del cable. –

1

Generalmente JSON es una forma más eficiente de recuperar datos a través de ajax ya que los mismos datos en XML son mucho más grandes. JSON también es consumido más fácilmente por su lado del cliente Javascript. Sin embargo, si está recuperando contenido HTML puro, probablemente haga lo que sugiere. Aunque, si realmente se necesita para, usted podría insertar tu contenido HTML dentro de una cadena JSON y obtener lo mejor de ambos mundos

4

Aquí hay algunas ventajas para el envío de JSON/XML en lugar de HTML:

  1. Si los datos se va a utilizar cada vez fuera de su HTML aplicación podría ser más difícil de analizar y encajar en otra estructura
  2. JSON se puede integrar directamente en script etiquetas que permite escenarios AJAX entre dominios
  3. JSON/XML conserva la separación de preocupaciones entre los scripts del lado del servidor y las vistas
  4. Reduce el ancho de banda
16

Volviendo JSON/XML proporciona la aplicación más libertad con respecto a la devolución de HTML, y requiere menos conocimiento específico en diferentes campos (datos vs marcado).

Dado que los datos siguen siendo solo datos, usted deja la opción de cómo mostrarlos al lado del cliente. Esto permite que gran parte del código se ejecute en el lado del cliente en lugar de en el servidor; el lado del servidor solo necesita saber sobre las estructuras de datos y nada sobre el marcado. Todo lo que el programador necesita saber es cómo entregar estructuras de datos.

La implementación del cliente solo necesita saber cómo mostrar las estructuras de datos devueltas por el servidor, y no necesita preocuparse acerca de cómo estas estructuras realmente obtienen compilación.Todo lo que el programador necesita saber es cómo mostrar las estructuras de datos.

Si se va a compilar otro cliente (que no utiliza HTML como lenguaje de marcado), todos los componentes del servidor se pueden reutilizar. Lo mismo ocurre con la construcción de otra implementación de servidor.

+0

tengo una versión xml para estos propósitos. Me preocupa más que el cliente maneje la entrada de html frente a xml/json. no es muy diferente para el servidor crear xml vs html. pero si sé que el 90% de las solicitudes van a venir de este cliente, entonces ¿por qué ir a xml primero? – pedalpete

+0

XML es un poco más fácil de construir, ya que no necesita pensar cómo se mostrará. Todo lo que debe preocuparse en ese momento es asegurarse de tener todos los datos que necesita y de que los datos están en una estructura utilizable. Si sabe cómo se verá su estructura de datos XML al comienzo de un proyecto, puede trabajar fácilmente en el proyecto con 2 equipos, uno para recopilar los datos de las fuentes y verterlos en el XML. El otro equipo puede trabajar con la maqueta XML para trabajar en la presentación de los datos. Dado que los equipos pueden trabajar independientemente, pueden trabajar en paralelo, por lo tanto, más rápido. – ylebre

1

Actualmente estoy luchando con esta decisión y también que no acababa de hacer clic hasta que vi cómo Darin hierve abajo:

"Si los datos van a ser utilizado siempre fuera de su aplicación podría ser HTML más difícil de analizar y encajar en otra estructura "

Creo que mucho de eso es dónde y cómo van los datos. Si se trata de una aplicación única que no necesita compartir/enviar datos en ningún otro lugar, entonces escupir HTML puro está bien, incluso si pesa más.

Personalmente, si hay un HTML complejo para envolver los datos, escupo el HTML y lo dejo caer. JQuery es dulce y todo, pero construir HTML con Javascript suele ser un problema. Pero es un juego de equilibrio.

+0

A pesar de lo defectuoso que es DOM, creo que es bastante fácil atravesar el documento a través de javascript. Por ejemplo, con PHP tendrías que poner un código PHP exactamente donde quieres que aparezca la salida: desde JavaScript puedes seleccionar nodos y con gracia (o no tanto) volcar datos en varios elementos en la página desde el mismo bloque de código. –

2

Debe consultar Pure, una herramienta de plantillas para generar HTML a partir de datos JSON.

1

En algunos casos, las respuestas AJAX deben devolver más información que solo el HTML que se mostrará. Por ejemplo, supongamos que devuelve una lista de los primeros veinte elementos de una búsqueda. Es posible que deba devolver el número total de resultados de búsqueda que se mostrarán en otro lugar del DOM. Podrías tratar de cargar el conteo total en un div oculto, pero eso puede ser complicado. Con JSON, el recuento total puede ser simplemente un valor de campo una respuesta estructurada de JSON.

0

Para mí se reduce a esto:

Es para muchos de nosotros, mucho menos trabajo para utilizar un servidor motor de plantillas, madura, que estamos acostumbrados, para generar html y enviarlo por la pipe, que usar un montón de código javascript para generar el lado del cliente HTML. Sí, hay algunos motores de plantillas para JavaScript ahora que pueden mitigarlo de alguna manera.

Dado que ya separe el modelo, la lógica y las vistas del lado del servidor, no hay argumento para tener otra separación. JSON es una vista, HTML es otra vista.

Y admitámoslo; tanto HTML/AJAX como JSON/AJAX son muchas veces mejores que la página completa sobre la tubería.

Lo último en lo que quizás deba pensar es; si vas a ser amigable con los motores de búsqueda, es posible que tengas que generar el lado del servidor HTML de cualquier forma (el antiguo degradado gratamente mantra).

Normalmente hago una combinación. Si hay una lógica del lado del cliente, utilizo JSON; de lo contrario, uso HTML. Las notificaciones y los campos especiales de autocompletar se envían a través de JSON.

+1

considera que esta pregunta fue hecha en 2009 (hace 6 años) probablemente ya no sea relevante. Es probable que le dedique mejor su tiempo a responder preguntas más actuales. – pedalpete

Cuestiones relacionadas