Objective
Smarty is an excellent PHP template engine that separates the logical code from the user interface.
Learning and using smarty, there is no cache technology applied to it is a great loss, it can be the user finally see the HMTL file into a static HTML page, when the setting Smarty cache property is True, Converting a user's Web request directly into this static HTML file during the Cachetime period of the Smarty setting is equivalent to calling a static HTML file and reducing a lot of burden to the backend server.
Download and Configuration
Official Download: Smarty Download
After downloading, unzip to the file directory of your project.
The code is as follows |
Copy Code |
Require ('.. /libs/smarty.class.php ');
$smarty = new Smarty;
$smarty->force_compile = true; Forced compilation $smarty->debugging = true; Debugging $smarty->caching = true; Turn on caching $smarty->cache_lifetime = 120; Cache Survival Time (sec) Smarty->cache_dir = My_smarty_dir. '/cache/'; To set the storage path for the cache |
Note: If you find that cached files will change every time you browse, see Smarty's force_compile, which forces smarty to compile the template every time you call (re). This setting is not subject to $compile_check restrictions. By default, it is not valid. It is very convenient for development and debugging. But it must not be used in the product environment. If caching is started, the cached file will be regenerated each time.
$smarty->force_compile = false; Forced compilation
Smarty Caching Technology
Global cache
Local cache
Insert method
Dynamic Block method
Plug-in Block method
Global caching technology
As the name suggests, the global cache is the entire page generated cache file, specify the cache file survival time, in a specified time to browse the entire page again, will read the cached file directly.
$smarty->caching = true; Turn on caching
$smarty->cache_lifetime = 120; Cache Survival Time (sec)
Note: A template can have only one cache file, and if your template has multiple pages, you should set an ID for the cache. For example, a page has multiple articles:
Http://website/index.php?p=1
http://website/index.php?p=2
$_server[' Request_uri '] method
MD5 the URL of the current page (including all parameters that follow)
$url =md5 ($_server[' Request_uri '));
Set Cache file name
$smarty->display (' Index.tpl ', $url);
Focus: Using caching technology, a big reason is to reduce the read and write to the database, so we have to use $smarty->iscached (' INDEX.TPL ') to determine whether the cache exists, if it exists, do not operate the database again.
The code is as follows |
Copy Code |
if (! $smarty->iscached (' Index.tpl ')) { echo "Acache NO found!"; $sql = "SELECT * from Test"; $query = mysql_query ($sql); $row = Mysql_fetch_row ($query); $smarty->assign ("Loaddatabase", $row [1]); } |
There is a problem here, if I changed the content of the database, want to update the display content, but the cache has not yet to die time, that the swollen do?
$smarty->clearcache ("Index.tpl");
The above clearcache can solve this problem, as long as the data is updated, call ClearCache to clear the cache.
PS: I am using the Smarty3 version, this version of the name of many methods have changed, if it is Smarty2 words will appear "Call of the Unknown method ' iscached '.", use $smarty->is_cached ().
The following Smarty3:registerplugin (), Smarty2:register_block () is also the issue of versioning.
Now let's take a look at the speed comparison between cache and no cache:
1. First browsing, total time 0.01421 not cached
2.2nd browsing, total cache total time 0.00308
Here in my index.php only a few lines of code, if the amount of data, there are obvious differences.
Local caching technology
Local cache = Partial cache, is a page of the cache, not all generated cache, can be customized to set a function module does not generate a cache, each browse will update the data;
For example: The Web page displays the user's status, the webpage statistics, the advertisement article and so on, these data update speed are very fast, is not suitable the cache, thus, the local cache then has the useful.
There are 3 methods for local caching:
I. Insert method
The content contained in the insert is not cached, and the function is rerun each time the template is invoked.
How to use:
Note that the function name here must begin with insert, and the name in the template corresponds to it.
index.php
index.php
The code is as follows |
Copy Code |
Define a time to test the difference between inserts and ordinary assign $date = Date ("y-m-d h:i:s"); $smarty->assign ("date", $date); Insert function Insert_get_current_time ($date) { Return Date ("y-m-d h:i:s"); } Index.tpl Nocache:{insert name= "Get_current_time"} Cache: {$date} |
Then look at the generated cache file: Come to the conclusion the insert will rerun the function each time the template is called
The code is as follows |
Copy Code |
nocache:<?php Echo insert_get_current_time Array ( ), $_SMARTY_TPL);? > cache:2012-06-04 15:46:52 |
This method is simple, but if the content to be displayed is a large chunk, it is not suitable for use.
Second, dynamic block method
Custom Blocks in PHP
The code is as follows |
Copy Code |
index.php Smarty 3 function declaration function Smarty_block_nocache ($param, $content, $smarty) { return $content; }
Register with Smarty $smarty->registerplugin ("function", "NoCache", "Smarty_block_nocache");
At first it was mentioned that Smarty3 is used Registerplugin, Smarty2 is used Register_block Index.tpl {NoCache} {$date} {/nocache} Then look at the cached file and conclude that every time the template is invoked, the $date is executed again. <?php echo $_smarty_tpl->tpl_vars[' date ']->value;? >
|
Third, plug-in block method
This method is similar to the 2nd one, just put the custom block in PHP into the Plugins folder in the Smarty directory.
Create a file in the Smarty/plugins directory block.nocache.php the contents are as follows:
The code is as follows |
Copy Code |
<?php function Smarty_block_nocache ($param, $content, $smarty) { return $content; } ?>
|
The use of the TPL template is the same as the second method