2009-03-24 10 views
6

Estoy tratando de aprender C# .net para programar una aplicación web.¿Cómo optimiza StackOverflow el rendimiento para la visualización de las preguntas?

Y habiendo aprendido que stackoverflow usa C# .net estoy feliz de descubrirlo.

Lo noté en la página de inicio o en la sección de preguntas, cada vez que actualizo la página. La página siempre me devuelve la información más reciente sin fallas y a velocidades aceptables.

No estoy seguro de cómo hacerlo. Perdón por la larga serie de preguntas. Estoy intentando aprender cuáles son las mejores prácticas para la recuperación de datos, paginación, rendimiento, etc.

Sé que la página de inicio solo devuelve un número limitado de preguntas y sus estadísticas, pero la sección de preguntas en realidad devuelve todo.

¿Cómo optimizarlo?

  1. Para la página de inicio, ¿siempre agarra TODAS las estadísticas de las preguntas recientes? por lo que su consulta es algo como "select * from questions order by datetime_created limit 20"?

    ¿El * contiene TODA la información incluyendo título de pregunta, identificación, vistas, etc.?

    ¿Utiliza HttpContext.Current.Server.cache para ayudar con eso?

  2. Para las preguntas, esto es aún más intrigante.

    ¿Cómo se hace la paginación?

    ¿Siempre tomas de la base de datos solo los resultados para la página específica?

    ¿O captura todos los resultados y los almacena en un conjunto de datos? Entonces, ¿usa algún tipo de control de cuadrícula de datos para ayudar con la búsqueda?

Si es el último, ¿cómo se mantienen los datos para actualizar?

+0

Dividir sus preguntas. – Cherian

+0

Por favor envíe preguntas específicas a Jeff, nadie aquí sabe cómo implementa sus cosas –

+0

hola ¿quiere decir por correo electrónico a [email protected]? Si ese es el lugar correcto para enviar, lo haré. Solo espero no estar abusando de eso, eso es todo. –

Respuesta

1

SO usa MVC y LINQ2SQL. Escucharía algunos de los podcasts para tener más idea de los detalles. Sé que usan mucho almacenamiento en caché pero no estoy seguro si eso incluye la lista de preguntas en la página de inicio.

1

No tengo idea de cómo lo hicieron - No escribí TANTO.

Para algo como esto, utilizaría algún tipo de mecanismo de caché para toda la clase de preguntas con todas sus respuestas. La memoria caché sería de corta duración, pero dado que las preguntas nuevas/calientes se ven muy a menudo, se mantendrían con vida. Las preguntas más antiguas tendrían que solicitarse al DB. Esto también evitaría que surjan problemas cuando una persona responde la pregunta y mientras otro hilo ve la pregunta.

Otra cosa que puedes notar aquí, es que hacen un uso intensivo de AJAX. Pero dado que AJAX.Net es extremadamente desperdicio de ancho de banda, implementaron las llamadas AJAX para que devolvieran objetos JSON simples, p. Ej.cuando se subevota solo se devuelve un objeto de éxito con un nuevo número de votos o un mensaje de error, por ejemplo: (este es un ejemplo inventado y no es representativo de lo que sucede porque no puedo molestarme en verificarlo ahora)

{"status": "ok", "votes": 3} 

AJAX.Net devolvería los enteros UpdatePanel 's de contenidos, cualquiera que sea su tamaño, lo que no importa cuán pequeño, todavía sería bastante grande.

12

Aquí desbordamiento de pila, tratamos de utilizar el almacenamiento en caché agresiva en muchos niveles:

  • páginas totalmente en caché por el caché de resultados de IIS', independientemente de la autenticación de usuarios
  • páginas en caché sólo para usuarios anónimos; los usuarios registrados ven el contenido más reciente
  • porciones de páginas 'html almacenadas en caché para todos; HttpRuntime.Cache se utiliza para este

La página casa se compone de tres piezas en caché HTML - Preguntas recientes, etiquetas, insignias recientes recientes - cada uno con una duración diferente.

A lista de preguntas La página guardará en caché los ids (Int32[]) de todas las preguntas para un filtro de clasificación/etiqueta particular, haciendo que la búsqueda sea trivial. Además, se realiza un almacenamiento en caché de las estadísticas (por ejemplo, recuento de preguntas, recuentos de etiquetas relacionadas).

A detalles de la pregunta La página se almacenará completamente en caché para usuarios anónimos, mientras que los usuarios registrados verán las últimas novedades. Además, las preguntas relacionadas en el lado se almacenan en caché en el disco por una duración más larga.

Si bien tratamos de almacenar en caché las páginas enteras siempre que sea posible, mostramos la información del usuario en la parte superior de la página; algunas partes simplemente no pueden almacenarse en caché.

Así que mira el almacenamiento en caché como un rompecabezas: ¿qué partes se pueden compartir de forma segura entre todas mis solicitudes? En función del gasto, ¿qué partes DEBEN compartirse en todas mis solicitudes?

+2

Directamente desde la boca de los caballos. –

Cuestiones relacionadas