Понятия не имею, как они это сделали - я не писал ТАК.
Для чего-то подобного я бы использовал какой-то механизм кэширования для всего класса Question со всеми его ответами. Кэш-память будет недолгой, но поскольку новые / горячие вопросы просматриваются очень часто, они остаются в живых. Более старые вопросы должны быть запрошены в БД. Это также предотвратит проблему с многопоточностью, когда один человек отвечает на вопрос, а другой просматривает вопрос.
Еще одна вещь, которую вы можете заметить здесь, это то, что они интенсивно используют AJAX. Но поскольку AJAX.Net является чрезвычайно трафиком бесполезной, они реализовали вызовы AJAX, чтобы они возвращали простые объекты JSON, например. при голосовании возвращается только объект успеха с новым числом голосов или возвращается сообщение об ошибке, например: (это выдуманный пример, который не отражает того, что происходит, потому что я не могу потрудиться проверить правильность в настоящее время)
{"status": "ok", "votes": 3}
AJAX.Net вернет все содержимое UpdatePanel
, независимо от его размера, который, независимо от его размера, все равно будет довольно большим.