Home  >  Article  >  Backend Development  >  Detailed explanation of smarty template engine caching mechanism, detailed explanation of smarty template engine_PHP tutorial

Detailed explanation of smarty template engine caching mechanism, detailed explanation of smarty template engine_PHP tutorial

WBOY
WBOYOriginal
2016-07-12 08:50:40793browse

Detailed explanation of the caching mechanism of Smarty template engine, detailed explanation of smarty template engine

This article describes the caching mechanism of Smarty template engine with examples. Share it with everyone for your reference, the details are as follows:

First of all, let’s talk about smarty caching and compilation. These are two different concepts. Compilation is enabled by default, while the caching mechanism needs to be turned on manually. Smarty-compiled files are still PHP files, so they are still compiled when executed. , if it involves a database, you still have to access the database, so the overhead is not small, so smart caching is needed to solve it!

1. Enable global cache

$smarty->cache_dir = "/caches/"; //缓存目录
$smarty->caching = true; //开启缓存,为flase的时侯缓存无效
$smarty->cache_lifetime = 3600; //缓存时间

2. One page uses multiple caches

For example: an article template page will generate multiple article pages, which are of course cached into many pages. It is very simple to implement. Just set the second parameter in the display() method and specify a unique identifier. The following php code:

$smarty->display('index.tpl',$_GET["article_id"]);

As above, cache an article page through the id of the article as the second parameter.

3. Reduce overhead for caching

In other words, cached pages do not need to be processed by the database, and can be judged through the is_cached() method!

if(!$smarty->is_cached('index.tpl')){
 //调用数据库
}
$smarty->display('index.tpl');

4. Clear cache

Generally, caching is not enabled during the development process because the output results remain unchanged during the cache time. However, enabling caching during the application process can greatly improve web performance. The method to clear the cache is as follows:

clear_all_cache();//清除所有缓存
clear_cache('index.tpl');//清除index.tpl的缓存
clear_cache('index.tpl',cache_id);//清除指定id的缓存

5. Turn off local cache

If part of a page is cached and another part does not need to be cached, you can do this. For example, to display the user's login name, you need to turn off the cache. Smarty provides the following three solutions:

(1) Part of the template using insert is not cached

Define a processing function to be used by the insert tag. The function name format is: insert_xx (array $params, object &$smarty) where xx is the name of insert. That is to say, if the function you define is insert_abc, then The method used in the template is {insert name=abc}

Parameters are passed in through $params

It can also be made into an insert plug-in. The file name is: insert.xx.php, the function is named: smarty_insert_aa($params,&$smarty), and the definition of xx is the same as above

(2)$smarty->register_block($params, &$smarty) prevents a certain block of the entire page from being cached

Define a block:

smarty_block_name($params,$content, &$smarty){return $content;} 
//name表示区域名

Registration block:

$smarty->register_block(name, smarty_block_name, false);
//第三参数false表示该区域不被缓存

Template writing:

{name}内容 {/name}

is written as block plug-in:

Step one: Define a plug-in function: block.cacheless.php and place it in smarty’s plugins directory

The content of block.cacheless.php is as follows:

<&#63;php
function smarty_block_cacheless($param, $content, &$smarty) {
return $content;
}
&#63;>

Step 2: Write programs and templates

Sample program: testCacheLess.php

<&#63;php
include(Smarty.class.php);
$smarty = new Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display(cache.tpl);
&#63;>

Template used: cache.tpl

已经缓存的:{$smarty.now}<br>
{cacheless}
没有缓存的:{$smarty.now}
{/cacheless}

Run it now and find that it doesn’t work. Both lines of content are cached

Step 3: Rewrite Smarty_Compiler.class.php(Note: This file is very important, please back it up first to restore it if necessary)

Find:
Copy code The code is as follows: $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);

was changed to:

if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false);
else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);

You can also directly change the last parameter of the original sentence to false, which means turning off the default cache.

(3) Use register_function to prevent the plug-in from outputting from the cache

index.tpl:

<div>{current_time}{/div}
index.php:
function smarty_function_current_time($params, &$smarty){
  return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
if(!$smarty->is_cached()){
  .......
}
$smarty->display('index.tpl');

Note:

Define a function, the function name format is: smarty_type_name($params, &$smarty)
type is function

name is the user-defined label name, here it is {current_time}

The two parameters are required, even if they are not used in the function, they must be written. The functions of the two parameters are the same as above.

Readers who are interested in more Smarty-related content can check out the special topics on this site: "Basic Tutorial for Getting Started with Smarty Templates", "Summary of PHP Template Technology", "Summary of PHP Database Operation Skills Based on PDO", "PHP Operations and Operators" Usage summary", "PHP network programming skills summary", "PHP basic syntax introductory tutorial", "php object-oriented programming introductory tutorial", "php string (string) usage summary", "php mysql database operation introductory tutorial" and "Summary of Common Database Operation Skills in PHP"

I hope this article will be helpful to everyone’s PHP program design based on smarty templates.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1133106.htmlTechArticleDetailed explanation of Smarty template engine caching mechanism, Detailed explanation of smarty template engine. This article describes the Smarty template engine caching mechanism with examples. Share it with everyone for your reference, the details are as follows: First of all, let’s talk about s...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn