Я вижу два довольно простых решения для этого.Первый - кэшировать проанализированный файл в каждом запросе.Другой - использовать фактический кеш для этой работы.
Первый вариант очень прост в реализации.В вашем классе Helper
вам нужно будет ввести статическое свойство для хранения проанализированного содержимого прочитанного файла.Затем, как и в случае с одноэлементным шаблоном, вы либо возвращаете кэшированные данные, либо сначала анализируете файл, кэшируете данные и затем возвращаете их.Этот сценарий решает вашу реальную проблему парсинга настроек дважды для запросов, если используется в двух местах вашего приложения.
class Helper
{
protected static $cachedSettings;
public function readSettingsFromFile()
{
if (!self::$cachedSettings) {
self::$cachedSettings = // Do the parsing here. This should be your current implementation of Helper::readSettingsFromFile(). You can also put this in its own function.
}
return self::$cachedSettings;
}
}
Другой вариант - использовать реальный кэш (внешний).Вы можете кэшировать анализируемый файл определенное количество раз (например, 1, 3, 5 или 10 минут или даже дольше).Или вы кешируете его навсегда и аннулируете кеш при обновлении настроек (если это происходит в вашем приложении, и вы знаете, оно было обновлено).
Это решение имеет смысл, только если ваши настройкине меняйте слишком часто, хотя.Это также немного зависит от количества запросов, которые вы ожидаете от вашего приложения.Если ваши настройки меняются не слишком часто (менее чем каждые x минут ) и ваше приложение используется часто (несколько запросов каждые x минут ), тогда это может быть жизнеспособным решением.
class Helper
{
public function readSettingsFromFile()
{
return Cache::remember(function () {
$settings = // Put your current calculation here
return $settings;
}, 3 * 60); // 3 * 60 = 180 seconds
}
}