PHP页面静态化是大多数 PHP程序员耳熟能详、随手可写的功能了,在这里不讨论如
何生成静态页面的细节,而是考虑:将静态缓存功能作为系统的哪个部分的结构来实现(基
于 MVC模式,如果对 MVC不了解,对于下面的内容的理解可能有困难)。
。(代码使用 PHPLIB在我的总结有两种主要的方式,其他的还没有发现,如果你有第三种
可行的
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,请给我发一份示意代码,谢谢 template 示范)
第一种方式:由控制器来调用单独的缓存类。在这个时候缓存类是一个单独的类,与
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
引
擎相对独立,在一个请求开始的时候,缓存类即被调用,并进行一些相关的缓存操作。这一
工作甚至可以直接在调度器中完成(如果存在调度器 dispatcher的话)。下面给出一个简
单的代码示范(只有框架):
1. enableCache)
9. //没有启用缓存
10. {
11. //调用模型层、视图层来完成请求
12. }
13. else
14. //启动了缓存
15. {
16. if ($cache->isCached)
17. //如果文件已经被缓存
18. {
19. //重定向到缓存文件,getCacheFile
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
根据 url生成一个唯一的静态文
件名
20. header('Location:'.$cache->getCacheFile($_SERVER['REQUEST_URI']
));
21. return;
22. }
23. else
24. //如果文件还没有被缓存,则我们需要创建该文件并写入内容
25. {
26. //下面三行代码使用的 PHPLIB template的代码
27. $tpl->set_file('index', 'index.html');//载入模板文件
28. $tpl->set_var('title', 'Hello world');//赋值
29. $html = $this->parse('indexHtml', 'index');//解析模板文件并返回解
析结构字符串
30. //$html 变量包含了文件的内容,writeCache方法将其写入到文件
31. $cache->writeCache($html);
32. //重定向
33. header('Location:'.$cache->getCacheFile($_SERVER['REQUEST_URI']
));
34. }
35. }
36. }
37. }
enableCache) //没有启用缓
存 { //调用模型层、视图层来完成请求 } else //启动了缓
存 { if ($cache->isCached) //如果文件已经被缓
存 { //重定向到缓存文件,getCacheFile 方法根据 url生成一个唯一的
静态文件
名 header('Location:'.$cache->getCacheFile($_SERVER['REQUEST_URI']));
return; } else //如果文件还没有被缓存,则我们需要
创建该文件并写入内容 { //下面三行代码使用的 PHPLIB template 的代
码 $tpl->set_file('index', 'index.html');//载入模板文
件 $tpl->set_var('title', 'Hello world');//赋值 $html =
$this->parse('indexHtml', 'index');//解析模板文件并返回解析结构字符
串 //$html变量包含了文件的内容,writeCache 方法将其写入到文
件 $cache->writeCache($html); //重定
向 header('Location:'.$cache->getCacheFile($_SERVER['REQUEST_URI']));
} } } }
第二种方法:由模板类来控制缓存。对于任何请求,控制器都直接调用模板类来完成工作,
由模板类自己完成与缓存相关的工作。下面的代码我只列出框架:
view plaincopy to clipboardprint?
1.
2. class N_View_CacheTemplate extends Template_PHPLIB
3. {
4. /**
5. * html静态化目录,相对于系统根目录
6. *
7. * @var string
8. */
9. protected $cacheDir = './cache/';
10.
11. /**
12. * 是否打开静态缓存
13. *
14. * @var bool
15. */
16. protected $enableCache = false;
17.
18. /**
19. * 页面缓存时间
20. *
21. * @var int
22. */
23. protected $cacheTime = 900;
24.
25. protected $htmlFullPathName;
26.
27. protected $htmlFileName;
28.
29. /**
30. * 如果该选项打开,则在解析模板之后,自动生成对应缓存静态文件
31. *
32. * @var unknown_type
33. */
34. private $_autoCache = false;
35.
36.
37. public function __construct($enableCache = false, $root = ".", $unknowns
= "remove")
38. {
39. parent::__construct($root, $unknowns);
40. $this->enableCache = $enableCache;
41. $this->_cache();
42. }
43.
44. /**
45. * 返回当前对象实例
46. *
47. * @return N_View_CacheTemplate
48. */
49. public function getInstance()
50. {
51. return getInstanceOf(__CLASS__);
52. }
53.
54. /**
55. * 开始缓存调用
56. */
57. private function _cache()
58. {
59. if ($this->enableCache)
60. {
61. if (!$this->isCached)
62. {
63. $this->_writeCache();
64. }
65. header(‘Location:’.$this->cacheDir().$this->htmlFileName);
66. }
67. }
68.
69. //检测是否已经缓存了
70. public function isCached()
71. {
72. }
73.
74. //生成缓存
75. private function _writeCache()
76. {
77. }
78.
79. //更新缓存
80. private function _updateCache()
81. {
82. }
83.
class N_View_CacheTemplate extends Template_PHPLIB { /** * html静态化目录,
相对于系统根目录 * * @var string */ protected $cacheDir =
'./cache/'; /** * 是否打开静态缓存 * * @var
bool */ protected $enableCache = false; /** * 页面缓存时
间 * * @var int */ protected $cacheTime = 900; protected
$htmlFullPathName; protected $htmlFileName; /** * 如果该选项打开,则在
解析模板之后,自动生成对应缓存静态文件 * * @var
unknown_type */ private $_autoCache = false; public function
__construct($enableCache = false, $root = ".", $unknowns =
"remove") { parent::__construct($root,
$unknowns); $this->enableCache =
$enableCache; $this->_cache(); } /** * 返回当前对象实
例 * * @return N_View_CacheTemplate */ public function
getInstance() { return getInstanceOf(__CLASS__); } /** * 开始
缓存调用 */ private function _cache() { if
($this->enableCache) { if
(!$this->isCached) { $this->_writeCache(); } head
er(‘Location:’.$this->cacheDir().$this->htmlFileName); } } //检测
是否已经缓存了 public function isCached() { } //生成缓存 private
function _writeCache() { } //更新缓存 private function
_updateCache() { }
两种方式各有特点,从功能上来说:
第一种方式(独立缓存类)可较大程度的控制缓存,无论是否使用模板引擎、无论使用哪种
模板引擎,对其都几乎没有影响。如果模板引擎本身也提供静态缓存功能,则直接关闭模板
缓存功能即可;
第二种方式由于缓存功能是嵌入在模板引擎之内的,对于每一步的页面生成都能很好的把握,
所以可以更好的定制输出信息。
两种方式在核心处理上是一样的,区别只是他们的在模式中定位的不同,这在框架的编写中
是必须要考虑的。