Smarty configuration and advanced cache technology sharing _ php template _ PHP-php Tutorial

Source: Internet
Author: User
Tags php template time 0
Smarty is an excellent PHP template engine that separates logical code from userinterface Preface

Smarty is an excellent PHP template engine that separates logical code from user interface.

Learning and using Smarty without applying it to the cache technology is a huge loss. it can cache the HMTL file that the user finally sees into a static HTML page, when the cache attribute of Smarty is set to true, users' WEB requests are directly converted to this static HTML file during the cachetime period set by Smarty, this is equivalent to calling a static HTML file, which reduces the burden on the backend server.

Download and configuration

Official Download: Smarty Download

After the download, decompress the package to the file directory of your project.

The code is as follows:
Require ('../libs/Smarty. class. php ');
$ Smarty = new Smarty;
// $ Smarty-> force_compile = true; // force compile
$ Smarty-> debugging = true; // debug
$ Smarty-> caching = true; // enable cache
$ Smarty-> cache_lifetime = 120; // cache survival time (seconds)

$ Smarty-> cache_dir = MY_SMARTY_DIR. '/cache/'; // Set the cache storage path

Note: If you find that the cached file changes every time you browse it, please refer to the force_compile of Smarty, which forces Smarty to call (recompile) the template each time. This setting is not restricted by $ compile_check. By default, it is invalid. It is very convenient for development and debugging, but it cannot be used in the product environment. If cache is enabled, cache files will be generated again each time.

$ Smarty-> force_compile = false; // force compile

Smarty cache technology

Global Cache
Partial cache
Insert method
Dynamic block method
Plug-in block method

Global cache technology

As the name suggests, the global cache generates a cache file for the entire page, specifying the survival time of the cached file, and browsing the entire page again within the specified time. This will directly read the cached file.
The code is as follows:
$ Smarty-> caching = true; // enable cache
$ Smarty-> cache_lifetime = 120; // cache survival time (seconds)


Note: A template can only have one cached file. if your template has multiple pages, you must 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
The code is as follows:
// $ _ SERVER ['request _ URI '] method
// Add the URL of the current page (including? All parameters ).
$ Url = md5 ($ _ SERVER ['request _ URI ']);
// Set the cache file name
$ Smarty-> display ('index. tpl ', $ url );


Key point: a major reason for using the cache technology is to reduce read/write to the database, so we need to use $ smarty-> isCached ('index. tpl ') to determine whether the cache exists. If yes, do not operate the database again.
The code is as follows:
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 another problem here. if I have changed some content in the database and want to update the display content, but the cache has not expired yet, should it be swollen?
$ Smarty-> revoke ache ("index. tpl ");
The preceding caching ache can solve this problem. after updating the data, you can call it to clear the cache.

PS: I used the Smarty3 version. the naming of many methods in this version has changed. if it is Smarty2, "Call of unknown method 'iscached' will appear '. ", use $ smarty-> is_cached ().
The Smarty3: registerPlugin (), Smarty2: register_block () that follows is also a version issue.

The following is a comparison between the cache speed and the cache speed:
1. browsing for the first Time, no cache Total Time 0.01421

2. 2nd views with cache Total Time 0.00308

Here, I only have a few lines of code in index. php. if there is a large amount of data, there is a significant difference.

Local cache technology

Partial cache = partial cache, which is the cache of a page. not all of them generate a cache. you can customize a function module to not generate a cache. data will be updated each time you browse;

For example, when a web page displays the user's status, statistics on the web page, ads, and so on, the data is updated very quickly and cannot be cached. in this way, local cache is useful.

There are three methods for local cache:

I. insert method

The content contained in the insert statement is not cached. This function is re-executed every time this template is called.

Usage:

Note that the function name must start with insert, and the name in the template corresponds to it.

Index. php
The code is as follows:
// Define a time to test the difference between insert and normal 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
The code is as follows:
Nocache: {insert name = "get_current_time "}
Cache: {$ date}
[Code]
Then, let's look at the generated cache file: it is concluded that each time insert calls this template, the function will be re-executed.

Nocache: ), $ _ Smarty_tpl);?>

Cache: 15:46:52
The code is as follows:

This method is simple, but it is not suitable if the content to be displayed is large.

II. Dynamic block method

Php custom block
Index. php
[Code]
// Smarty 3
// Function declaration
Function smarty_block_nocache ($ param, $ content, $ smarty)
{
Return $ content;
}
// Register with smarty
$ Smarty-> registerPlugin ("function", "nocache", "smarty_block_nocache ");

As mentioned at the beginning, Smarty3 uses registerPlugin and Smarty2 uses register_block.

Index. tpl

{Nocache} {$ date} {/nocache}
Then, read the cached file and draw a conclusion that $ date will be re-executed every time this template is called.
[/Code]
Tpl_vars ['Date']-> value;?>
The code is as follows:
III. plug-in block method

This method is similar to the 2nd, just put the custom block in php into the plugins folder in the smarty directory.

In the Smarty/plugins directory, create a file block. nocache. php with the following content:

Function smarty_block_nocache ($ param, $ content, $ smarty)
{
Return $ content;
}
?>
[Code]
The use of the tpl template is the same as that of the second method.

Summary
The Smarty cache technology can be summarized to greatly improve the speed and quality of the website, and its usage is relatively simple.

The last note is that, although the extension of the cache file generated by Smarty is php, it will not be parsed as php code.

Author: that moment

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.