Как StackOverflow оптимизирует производительность для дисплея вопросов?

Исправлено в новой версии ( 1.1.0-alpha04 ) Appcompat.

implementation "androidx.appcompat:appcompat:1.1.0-alpha04"
6
задан Brian Tompsett - 汤莱恩 3 November 2015 в 12:02
поделиться

4 ответа

Я понятия не имею, как они сделали это - я не записал ТАК.

Для чего-то вроде этого я использовал бы своего рода механизм кэширования для всего класса Вопроса со всеми его Ответами. Кэш был бы недолгим, но так как новые/горячие вопросы просматриваются очень часто, они остались бы в живых. Более старые вопросы нужно было бы требовать от DB. Это также предотвратило бы проблему многопоточности, когда один человек отвечает на вопрос и в то время как другой поток просматривает вопрос.

Другая вещь, которую можно заметить здесь, они делают интенсивное использование Ajax. Но так как AJAX.Net чрезвычайно расточителен пропускной способностью, они реализовали вызовы Ajax, таким образом, они возвратят простые объекты JSON, например, когда upvoting только объект успеха с новым количеством голосов или сообщения об ошибке будет возвратом, например: (это - искусственный пример и не является представительным для того, что происходит, потому что я не могу быть побеспокоен для проверки прямо сейчас),

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

AJAX.Net возвратил бы все UpdatePanelсодержание, безотносительно его размера, который, неважно, как маленький, все еще было бы довольно большим.

1
ответ дан 8 December 2019 в 17:27
поделиться

ТАК использует MVC и LINQ2SQL. Я слушал бы некоторые подкасты для получения большего количества идеи специфических особенностей. Я действительно знаю, что они используют большое кэширование, но не уверенные, если это включает список вопроса в домашнюю страницу.

1
ответ дан 8 December 2019 в 17:27
поделиться

Здесь, в Stack Overflow, мы пытаемся использовать агрессивное кеширование на многих уровнях:

  • страницы полностью кэшируются в кэше вывода IIS, независимо от аутентификации пользователя
  • страницы кэшируются только для анонимных пользователей ; зарегистрированные пользователи видят самое последнее содержимое
  • частей html страниц, кэшированных для всех; HttpRuntime.Cache используется для этого

Домашняя страница состоит из трех кешированных частей HTML - недавних вопросов, недавних тегов, недавних значков - каждый с разной продолжительностью.

На странице списка вопросов кэшируются идентификаторы ( Int32 [] ) всех вопросов для определенного фильтра сортировки / тегов, что делает разбиение на страницы тривиальным. Также выполняется дополнительное кэширование статистики (например, количества вопросов, количества связанных тегов).

страница с подробным описанием вопроса будет полностью кэшироваться для анонимных пользователей, в то время как зарегистрированные пользователи видят последние товары. Кроме того, связанные вопросы сбоку кэшируются на диск на более длительный срок.

Хотя мы стараемся кэшировать целые страницы, где это возможно, мы показываем информацию о пользователе вверху страницы - некоторые части просто невозможно кэшировать.

Так что смотрите на кеширование как на головоломку - какие части можно безопасно разделить между всеми моими запросами? Какие части ДОЛЖНЫ использоваться во всех моих запросах с учетом расходов?

Так что смотрите на кеширование как на головоломку - какие части можно безопасно разделить между всеми моими запросами? Какие части ДОЛЖНЫ использоваться во всех моих запросах с учетом расходов?

Так что смотрите на кеширование как на головоломку - какие части можно безопасно разделить между всеми моими запросами? Какие части ДОЛЖНЫ использоваться во всех моих запросах с учетом расходов?

12
ответ дан 8 December 2019 в 17:27
поделиться

Вы также можете взглянуть на этот Stack Overflow Inspired Knowledge Exchange .

Это группа статей, пытающихся имитировать Stack Overflow. Вы сможете найти кодовую базу здесь на CodePlex.

0
ответ дан 8 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: