2011-11-24 11 views
5

Voy a comenzar con una página completamente en blanco (sin elementos que no sean html, cabeza y cuerpo) y luego construir la página usando jQuery. El contenido de la página tendrá el formato de JSON de una solicitud de AJAX. Los contenidos de JSON no tendrán ningún HTML. El HTML con contenido se compilará para diferentes secciones de la página dependiendo de la estructura del objeto JSON.jQuery DOM manipulación de la eficiencia - creación de toda la página con JavaScript

Esta página tendrá varios controles deslizantes, modales y otro contenido "dinámico".

Mi pregunta es, ¿será más rápido (tome IE7 como el denominador común más bajo) construir el HTML como una cadena grande (utilizando un constructor de cadenas mucho más rápido que la concatenación estándar) e inyectar esto en el cuerpo en de forma a granel, es decir

var html = "<div id='content'><p>All markup required for the page, built from the contents of the JSON object</p></div><div id='slider'>...</div>...etc." 
$("body").html(html) 

y luego, cuando lo que hay en el DOM, utilizar jQuery para encontrar y aplicar plugins a las diversas partes dinámicas, es decir,

$("#slider").sliderPlugin(options); 

O

¿Sería mejor crear cada elemento (o algunos) como una variable, y luego agregarlo al cuerpo? es decir

var content = $('<div/>', {id: "content"}) 
var slider = $('<div/>', {id: "slider", html="<ul><li>...</li></ul>"}).appendTo(content); 
$('body').append(content) 

entonces con este enfoque no tengo para consultar el DOM, lo único que tiene que hacer esto:

slider.sliderPlugin(options); 
+1

¿Por qué harías esto?Si va a emitir el marcado como una variable de cadena en JavaScript, ¿por qué no simplemente crearlo en el cuerpo? – tvanfosson

+0

No veo el punto en "¿por qué harías esto?" Preguntas. Pero, para resumir, las restricciones de la plataforma, el contenido JSON es modificable, JSON diferente = salida de página diferente, el marcado no está contenido en JSON, solo el contenido de cada área de la página, el marcado se genera según la estructura de JSON. En el futuro, esto permite que se utilicen diferentes marcas para el mismo JSON, por lo que el diseño se puede actualizar sin reformar el contenido de origen. – Fergal

+0

Bastante justo. Solo tenía curiosidad. Probablemente entregue vistas parciales de HTML a través de AJAX en lugar de JSON y construya el HTML del modelo en el servidor. Supongo, sin embargo, que hay instancias en las que el servidor de datos no es el mismo que el servidor web. Acabo de descubrir que construir HTML a partir de cadenas es bastante tedioso y propenso a errores. Es posible que desee considerar el uso de http://knockoutjs.com – tvanfosson

Respuesta

1

supongo construyendo el código HTML vez es la mejor manera, recuerdo vagamente leyendo esto en algún lugar

editar: Lo leí here con muchas más optimizaciones de jQuery. una buena y recomendada lectura

1

El consejo que he visto es que, por lo general, es más rápido proporcionar una gran porción de HTML a .html() y luego confiar en el analizador integrado de su navegador para hacer lo suyo.

Sin embargo, si posteriormente va a manipular elementos individuales (por ejemplo, agregar controladores de eventos, etc.), entonces hay algo que decir para crear esos elementos utilizando el método jQuery $('<element>').

Además, dado un valor de atributo como xx"xx (NB: incrustado comillas) es mucho más fiable y segura para hacer:

$('<div>', { attr: foo }) 

de hacer esto:

html += '<div attr="' + foo + '"/>'; 

ya que si foo contiene caracteres HTML especiales que tendrías que escapar tú mismo.

Por lo tanto, a menos que su contenido sea realmente grande Olvidé las preocupaciones sobre el rendimiento y busqué trozos grandes de HTML cuando hay HTML estático, pero utilizo los métodos de creación de etiquetas si está interponiendo cadenas de variables.

0

Las características de plantilla de KnockoutJS parecen ser una muy buena opción para su aplicación.

Cuestiones relacionadas