K4:Что находится в кеше
From In-Portal Developers Guide
m (категория) |
Current revision (16:18, 28 February 2009) (view source) m (1 версия) |
Current revision
| ||
---|---|---|
Статьи в этой категории | ||
|
Contents |
K4 задуман, как механизм для решения широкого спектра задач. С увеличением его возможностей рос и объём оперативной памяти, использовавшейся скриптом. А это непосредственным образом отражалось на скорости выполнения скрипта. Конечно это не совсем хорошо, поэтому было принято решение всю статическую (не изменяющуюся в процессе выполнения скрипта) информацию записать в cache, находящийся в базе данных.
Для этого используется таблица Cache. Каждая запись в данной таблице представляет определённого рода cache, и не зависит от других записей.
Системный cache
Для успешного функционирования K4 использует следующие caches (значения из поля VarName
):
-
config_files
- относительные пути (без пути к директории проекта, т.е. значения FULL_PATH константы) ко всем найденным в проекте unit config файлам -
configs_parsed
- разного рода информация из всех найденных unit configs (об этом ниже) -
sections_parsed
- собранное со всех найденных unit configs меню (navigation tree), видное в левом frame в административной консоли -
cms_menu
- все страницы, помеченные какIsMenu
из секции "Content Management -> Structure" -
mod_rw_*
- mapping между mod-rewrite url и эквивалентной ему переменной окружения (уже разобранной) -
RegularEventRuns
- mapping между regular event alias и временем (timestamp), когда оно было последний раз выполнено.
Если изменить ту часть unit config, которая находиться в cache, то изменение не вступит в силу, пока связанный cache не будет перестроен. Для того, чтобы перестроить определённый cache достаточно стереть его запись из таблицы Cache и при следующем запуске скрипта он построится по новой уже учитывая сделанные в unit config изменения.
Понять что находиться в cache, а что нет можно воспользовавшись этой ссылкой. |
Ключ "config_files"
Ниже приведён фрагмент данного cache. В базе данных он конечно храниться в serialized виде.
Array ( 0 => '/in-edit/units/form_fields/form_fields_config.php', 1 => '/in-edit/units/forms/forms_config.php', 2 => '/in-edit/units/content/content_config.php', 3 => '/in-edit/units/pages/pages_config.php', 4 => '/in-edit/units/form_submissions/form_submissions_config.php', 5 => '/core/units/theme_files/theme_files_config.php', 6 => '/core/units/permissions/permissions_config.php', 7 => '/core/units/user_groups/user_groups_config.php', 8 => '/core/units/translator/translator_config.php', 9 => '/core/units/themes/themes_config.php', 10 => '/core/units/skins/skins_config.php', 11 => '/core/units/general/general_config.php', 12 => '/core/units/general/helpers/helpers_config.php', 13 => '/core/units/groups/groups_config.php', 14 => '/core/units/configuration/configuration_config.php', 15 => '/core/units/email_messages/email_messages_config.php', 16 => '/core/units/users/users_config.php', 17 => '/core/units/phrases/phrases_config.php', )
Ключ "configs_parsed"
Далее приведено краткое описание того, что находиться в данном cache, а также фрагмент данного cache. В базе данных он конечно храниться в serialized виде.
-
Factory.Files
- mapping между названием класса и пути файла, где его искать -
Factory.realClasses
- mapping между pseudo и названием класса, который будет подгружен при использовании этого pseudo -
Factory.Dependencies
- mapping между названием класса и тех классов, которые надо подгрузить когда вызывают его -
ConfigReader.prefixFiles
- mapping междуPrefix
и файлом unit config, где он описан -
EventManager.buildEvents
- mapping между pseudo и методом класса, который является конструктором для класса связанного с этим pseudo -
EventManager.beforeRegularEvents
- regular events, которые будут выполняться до показа страницы -
EventManager.afterRegularEvents
- regular events, которые будут выполняться после показа страницы -
EventManager.beforeHooks
- hooks, которые будут выполнены до указанных events -
EventManager.afterHooks
- hooks, которые будут выполнены после указанных events -
TagsAggregator.data
- запутанная технология, которую использовать НЕ НАДО -
Application.Caches.ConfigVariables
- -
Application.ConfigCacheIds
- -
Application.ConfigHash
- -
Application.ReplacementTemplates
- подменённые шаблоны (только в административной консоли) -
Application.ModuleInfo
- информация о инсталлированных модулях в проекте (т.к. K4 это модульная система)
Array ( 'Factory.Files' => Array ( 'kTempTablesHandler' => 'core/kernel/utility/temp_handler.php', 'kEventManager' => 'core/kernel/event_manager.php', 'kUnitConfigReader' => 'core/kernel/utility/unit_config_reader.php', 'kArray' => 'core/kernel/utility/params.php', ), 'Factory.realClasses' => Array ( 'kTempTablesHandler' => 'kTempTablesHandler', 'EventManager' => 'kEventManager', 'kUnitConfigReader' => 'kUnitConfigReader', 'kArray' => 'kArray', 'Params' => 'Params', 'kHelper' => 'kHelper', 'Cache' => 'kCache', 'HTTPQuery' => 'kHTTPQuery', 'Session' => 'InpSession', 'SessionStorage' => 'InpSessionStorage', 'formflds' => 'kDBItem', 'formflds_List' => 'kDBList', 'formflds_EventHandler' => 'FormFieldsEventHandler', 'formflds_TagProcessor' => 'FormFieldsTagProcessor', 'form' => 'kDBItem', 'form_List' => 'kDBList', 'form_EventHandler' => 'FormsEventHandler', 'form_TagProcessor' => 'FormsTagProcessor', 'content' => 'kDBItem', 'content_List' => 'kDBList', 'content_EventHandler' => 'kDBEventHandler', 'content_TagProcessor' => 'kDBTagProcessor', 'gwfv' => 'kDBItem', 'gwfv_List' => 'kDBList', 'gwfv_EventHandler' => 'kDBEventHandler', 'gwfv_TagProcessor' => 'kDBTagProcessor', ), 'Factory.Dependencies' => Array ( 'kCache' => Array (0 => 'Params'), 'kHTTPQuery' => Array (0 => 'Params'), 'kMainTagProcessor' => Array (0 => 'kTagProcessor'), 'kDBTagProcessor' => Array (0 => 'kTagProcessor'), ), 'ConfigReader.prefixFiles' => Array ( 'formflds' => 'in-edit/units/form_fields/form_fields_config.php', 'form' => 'in-edit/units/forms/forms_config.php', 'content' => 'in-edit/units/content/content_config.php', 'cms' => 'in-edit/units/pages/pages_config.php', 'formsubs' => 'in-edit/units/form_submissions/form_submissions_config.php', 'theme-file' => 'core/units/theme_files/theme_files_config.php', 'perm' => 'core/units/permissions/permissions_config.php', 'ug' => 'core/units/user_groups/user_groups_config.php', 'trans' => 'core/units/translator/translator_config.php', 'theme' => 'core/units/themes/themes_config.php', 'skin' => 'core/units/skins/skins_config.php', 'm' => 'core/units/general/general_config.php', 'helpers' => 'core/units/general/helpers/helpers_config.php', 'g' => 'core/units/groups/groups_config.php', 'conf' => 'core/units/configuration/configuration_config.php', 'emailmessages' => 'core/units/email_messages/email_messages_config.php', 'u' => 'core/units/users/users_config.php', ), 'EventManager.buildEvents' => Array ( 'kTempTablesHandler' => 'OnTempHandlerBuild', 'formflds' => 'OnItemBuild', 'formflds_List' => 'OnListBuild', 'formflds_EventHandler' => 'OnBuild', 'form' => 'OnItemBuild', 'form_List' => 'OnListBuild', 'form_EventHandler' => 'OnBuild', 'form_TagProcessor' => 'OnBuild', 'content' => 'OnItemBuild', 'content_List' => 'OnListBuild', 'content_EventHandler' => 'OnBuild', 'content_TagProcessor' => 'OnBuild', ), 'EventManager.beforeRegularEvents' => Array ( 'store_affiliate' => Array ('EventName' => 'affil:OnStoreAffiliate', 'RunInterval' => 0,), 'reset_affiliate_stats' => Array ('EventName' => 'affil:OnResetStatistics', 'RunInterval' => 0,), ), 'EventManager.afterRegularEvents' => Array ( 'listings_expiration' => Array ('EventName' => 'ls:OnCheckExpiredPaidListings', 'RunInterval' => 1800), 'membership_expiration' => Array ('EventName' => 'u:OnCheckExpiredMembership', 'RunInterval' => 1800), ), 'EventManager.beforeHooks' => Array ( 'phrases.oncreate' => Array ( 0 => Array ( 'DoPrefix' => 'phrases', 'DoSpecial' => '', 'DoEvent' => 'OnBeforePhraseCreate', 'Conditional' => false, ), 1 => Array ( 'DoPrefix' => 'phrases', 'DoSpecial' => '', 'DoEvent' => 'OnBeforePhraseCreate', 'Conditional' => false, ), ), 'adm.onstartup' => Array ( 0 => Array ( 'DoPrefix' => 'visits', 'DoSpecial' => '', 'DoEvent' => 'OnRegisterVisit', 'Conditional' => false, ), ), ), 'EventManager.afterHooks' => Array ( 'form.*.onafterconfigread' => Array ( 0 => Array ( 'DoPrefix' => 'form', 'DoSpecial' => '', 'DoEvent' => 'OnCreateSubmissionNodes', 'Conditional' => false, ), ), ), 'TagsAggregator.data' => Array ( 'p' => Array ( 'Image' => Array (0] => 'img', 1 => 'ItemImageTag', 2 => '-item',), 'ImageSrc' => Array (0 => 'img', 1 => 'ItemImageTag', 2 => '-item',), ), 'ord' => Array ( 'PrintShippingTypes' => Array (0 => 's', 1 => 'Order_PrintShippingTypes', 2 => '',), ), ), 'Application.Caches.ConfigVariables' => Array ( 0 => 254, 1 => 267, 2 => 274, 3 => 251, 4 => 359, 5 => 117, ), 'Application.ConfigCacheIds' => Array ( 0 => 254, 1 => 267, 2 => 274, 3 => 251, 4 => 359, 5 => 117, ), 'Application.ConfigHash' => Array ( 'Site_Name' => 'In-Portal', 'UseModRewrite' => 0, 'SessionTimeout' => 3600, 'SessionCookieName' => 'sid', 'Config_Server_Time' => 14, 'Config_Site_Time' => 14, ), 'Application.ReplacementTemplates' => Array ( ), 'Application.ModuleInfo' => Array ( 'In-Portal' => Array ( 'Name' => 'In-Portal', 'Path' => 'kernel/', 'Var' => 'm', 'Version' => '4.2.0', 'Loaded' => 1. 'LoadOrder' => 0 'TemplatePath' => '', 'RootCat' => 0. 'BuildDate' => 1054738405, ), 'Core' => Array ( 'Name' => 'Core', 'Path' => 'core/', 'Var' => 'adm', 'Version' => '4.2.0', 'Loaded' => 1, 'LoadOrder' => 1, 'TemplatePath' => '', 'RootCat' => 0, 'BuildDate' => 0, ), ), )
Ключ "sections_parsed"
Ниже приведён фрагмент данного cache. В базе данных он конечно храниться в serialized виде. Более подробная информация о том из чего состоит данный cache и как добавлять новые секции в меню административной консоли доступна в этом разделе.
Array ( 'in-link:listing_types' => Array ( 'parent' => 'in-link:paid_listings_folder', 'icon' => 'paid_listings', 'label' => 'la_tab_ListingTypes', 'url' => Array ('t' => 'in-link/paid_listings/paid_listing_types_list', 'pass' => 'm', 'm_opener' => 'r', 'no_pass_through' => 1,), 'permissions' => Array (0 => 'view', 1 => 'add', 2 => 'edit', 3 => 'delete',), 'priority' => 8.2, 'type' => 2, 'SectionPrefix' => 'lst', 'onclick' => 'checkEditMode()', 'container' => 0, ), 'in-commerce:affiliate_payment_types' => Array ( 'parent' => 'in-commerce:affiliates_folder', 'icon' => 'affiliates', 'label' => 'la_tab_AffiliatePaymentTypes', 'url' => Array ('t' => 'in-commerce/affiliate_plans/affiliate_payment_types_list', 'pass' => 'm', 'm_opener' => 'r', 'no_pass_through' => 1,), 'permissions' => Array ( 0 => 'view', 1 => 'add', 2 => 'edit', 3 => 'delete', 4 => 'advanced:approve', 5 => 'advanced:decline', 6 => 'advanced:set_primary', 7 => 'advanced:move_up', 8 => 'advanced:move_down', ), 'priority' => 8.3, 'type' => 2, 'SectionPrefix' => 'apt', 'onclick' => 'checkEditMode()', 'container' => 0, ), )