Как можно спроектировать системы плагинов, чтобы они не тратили так много ресурсов?

Я пытаюсь создать базовую систему плагинов , подобную той, которую вы часто найдете в CMS, такой как WordPress. У вас есть папка плагинов, которые связаны с основной работой системы посредством уведомлений о событиях с использованием шаблона проектирования Observer или Event .

Проблема в том, что невозможно для системы узнать , на какие события плагин хочет действовать, поэтому система должна загружать каждый плагин для каждого запроса страницы, чтобы узнать если этот плагин действительно нужен в какой-то момент. Излишне говорить, что это очень много потраченных впустую ресурсов - в случае WordPress, это добавляет до нескольких дополнительных МБ памяти для каждого запроса!

Есть ли альтернативные способы сделать это?

Например, есть ли способ загрузить все это один раз, а затем кэшировать результаты, чтобы ваша система знала, как лениво загружать плагины? Другими словами, система загружает файл конфигурации, который определяет все события, с которыми плагин хочет связать, а затем сохраняет его в APC или чем-то еще для будущих запросов?

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

8
задан Community 23 May 2017 в 10:26
поделиться