рдЯреИрдЧ рдХреЗ рд╕рд╛рде Yii рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ

Yii рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реАрдзреЗ рд▓реМрдЯреЗ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ CDbCacheD dependency), рдЬреЛ рд▓реЛрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реНрдпрд░реНрде рд╣реИред

рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдпрд╛рдиреА рдХреБрдЫ рдЯреИрдЧ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдХреИрд╢ рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред рдФрд░ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ Yii рдореЗрдВ рдирд┐рдХрд▓рд╛, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЖрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрдЯрдХреЛрдВ рдореЗрдВ:

/** * CTagCacheDependency class. * * CTagCacheDependency represents a dependency based on a autoincrement(timestamp) of tags * * @author Roman <astronin@gmail.com> * @since 1.0 */ class CTagCacheDependency extends CCacheDependency { /** * @var autoincrement(timestamp) param is used to * check if the dependency has been changed. */ public $tag; /** * Cache component, by default used - cache * @var CCache */ public $cache; /** * Name of cache component, by default used - cache * @var string */ public $cacheName; /** * Constructor. * @param string $tag value of the tag for module */ public function __construct($tag=null, $cacheName='cache') { $this->tag=$tag; $this->cacheName = $cacheName; } /** * Generates the data needed to determine if dependency has been changed. * This method returns the integer(timestamp). * @return mixed the data needed to determine if dependency has been changed. */ protected function generateDependentData() { if($this->tag!==null) { $this->cache = Yii::app()->getComponent($this->cacheName); $t = $this->cache->get($this->tag); if ($t === false) { $t = microtime(true); $this->cache->set($this->tag, $t); } return $t; } } } 


рдореЙрдбрд▓ рдореЗрдВ, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВрдЧреЗред рдЪреВрдБрдХрд┐ рд╣рдо рдЗрд╕реЗ рдкреВрд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 protected function beforeFind() { $this->cache(30, new CTagCacheDependency(get_class($this))); parent::beforeFind(); } 


рдареАрдХ рд╣реИ, рдпрд╛ рдЬрд╣рд╛рдБ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдмрд╛рдд рд╣реИ "$ рдпрд╣-> рдХреИрд╢ (30, рдирдпрд╛ CTagCacheD dependency (get_class (рдпрд╣ $)));")



рдПрдХ рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рдореЙрдбрд▓ред

рдареАрдХ рд╣реИ, рдЬрдм рд╣рдо рдХреБрдЫ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ, рдмрд╛рдж рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ):

 Yii::app()->cache->set(get_class($this), microtime(true), 0); 




рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рдЯреИрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рдеред рдЕрдм, рдЬрдм рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЯреИрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЯреИрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рднреА рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдШрдЯрдХ: рдХреИрд╢ред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдЕрдиреНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп:


UPD рдорд╣рддреНрд╡рдкреВрд░реНрдг!

рдЕрдкрдбреЗрдЯреЗрдб рдХреЛрдб рдХреЛрдб CTagCacheD рдирд┐рд░реНрднрд░рддрд╛

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдм рдШрдЯрдХ рдХреЗ рдирд╛рдо рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 $this->cache($duration, new CTagCacheDependency(get_class($this), 'cache')); 


рдореЗрдордХреЗрдЪ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд╛рдо рдХреЗ рдХрд╛рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред

Source: https://habr.com/ru/post/In140414/


All Articles