Это очень сильно зависит от ожидаемого количества вычислений. На самом деле SO, очевидно, использует метод, который похож на ваш 1) подход, по соображениям производительности, я полагаю.
Это также предотвращает скачки чисел в случае изменения факторов (таких как удаленные элементы, которые получили баллы, или здесь, в ответах SO, которые становятся вики сообщества, изменения в правилах баллов, внешние действия, такие как присоединение к другой учетной записи здесь, в SO и т. Д.). )
Если вы хотите использовать решение для повторного вызова (2), вы можете реализовать «умное» кэширование, очистив значение (установив его в NULL, что будет означать «грязный») каждый раз, когда может произойти изменение точки, и повторно - вычислять его, когда он равен NULL, в противном случае использовать кеш. Вы также можете (в качестве самокорректирующейся меры, когда происходят неясные вещи) очистить значения через час, день или все, что вы считаете первыми, чтобы через некоторое время был произведен повторный вызов, независимо от состояния «грязного» состояния. .