Допустим, в приложении два поля для ввода значений и одна кнопка по нажатию на которую проходит долгий расчет результата с несколькими длинными циклами, который длится около 3-4 секунд. Есть ли смысл кэшировать результат, например при закрытии приложения писать сериализованный HashMap с кэшем в файл, а при запуске приложения из этого файла кэш считывать и во время выполнения программы проверять кэш на наличие запрашиваемого результата и, если его нет только тогда считать с помощью циклов и т.д.? В кэш писать, например, 10000 значений. Интересно мнение специалистов даст ли такое кэширование заметный прирост производительности.
Ответ
Манипуляции с кэшами - это дополнительная работа, дополнительный код, который нужно поддерживать. Манипуляции по сериализации-десериализации - тем более. Кроме того, это может усложнять старт-стоп и вообще обслуживание приложения создавая лишнюю нагрузку на саппорт. Лично мне почему-то кажется, что достаточно сделать обычный кэш в памяти на сколько-нибудь значений. Первые пользователи будут получать небольшие задержки, но со временем всё устаканится. Если же вероятность повторов невелика, то и вовсе незачем кэшировать. Разве что количество комбинаций входных данных ограничено и тогда можно не кэшировать, а вычислить их заранее и заготовить файл с результатами вычислений, чтобы потом всегда читать их. Но, как я понимаю, это не тот случай. UPD: есть правда ещё один фактор, влияющий на принятие решения: как часто будет осуществляться перезапуск сервера или редеплой приложения. Если очень очень часто, вариантов много, пользователей много, а повторяемость ни то ни сё, то возможно будет иметь смысл делать сериализацию..
Комментариев нет:
Отправить комментарий