转:php页面静态化之真静态

之前的缓存和现在所说的页面静态化都是为网站提速的,如果是访问量小的小型网站可能不需要但是如果网站规模或访问量很大,那么页面静态化和缓存就会体现出各自的价值了下面先来了解下页面静态化的分类

页面静态化的分类:

1,按照形式:

1)真静态

2)伪静态

2,按照范围:

   1)局部静态话(jquery,ajax)

   2)全部静态化

页面静态化可以为网站提速还能进行seo优化,因为搜索引擎偏向抓取静态页面,针对不同的搜索引擎seo的标准可能不同。下面提供一个百度搜索引擎优化的链接

http://baiduseoguide.com/

这次给大家分享的是页面真静态技术,本次将以一个简单的新闻管理系统为例子介绍真静态技术的使用,项目使用mvc架构来弄

一.真静态的理解

真静态就是把我们先前访问的jsp,php,aspx变为html,保留先前的页面效果和业务逻辑,减轻服务器的压力、让网站被良好的收录。但是真静态也有缺点那就是过多的静态页面占用了服务器空间,维护不是很方便。

二 开始静态化新闻管理系统

1.通过列表页面以最快速度查看单条数据的详细信息(如通过新闻列表查看某一条新闻的详细内容)

如果没有静态化的前提下,我们的做法可能是通过点击列表页面的标题传一个ID过去,之后查询出单条数据之后显示在一个页面上,这样我们每次点击链接都会去访问一次数据库,这样服务器的压力必然变大,可取的做法是每次添加数据都生成对应的详细页面

(1)简单的后台管理页面

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>后台管理</title>  
  6. </head>  
  7. <body>  
  8.   <h3><a href="addNews.php">添加新闻</a></h3>  
  9.   <h3><a href="../controller/NewsAction.php?opper=updatecache">更新列表页</a></h3>  
  10. </body>  
  11. </html>  


(2)添加新闻的操作

[php] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. if("add"==$opper){  
  2.     $news=new NewsManagerImpl();  
  3.     $title=$_POST["title"];  
  4.     $content=$_POST["content"];  
  5.     $result=$news->addNews($title$content);  
  6.     if($result>0){  
  7.         //生成静态html(用于查询单条数据)  
  8.         $fp=fopen("../static/news-id-".$result.".html""w");  
  9.         $ftpl=fopen("../tpl/newsDetail.tpl""r");  
  10.           
  11.         while(!feof($ftpl)){  
  12.             $row=fgets($ftpl);  
  13.             //替换相应的位置  
  14.             $row=str_replace("{title}",  $title$row);  
  15.             $row=str_replace("{content}",  $content$row);  
  16.             fwrite($fp$row);  
  17.               
  18.         }  
  19.         fclose($ftpl);  
  20.         fclose($fp);  
  21.         header("Location:../manage/success.html");  
  22.     }  
  23.       
  24.     exit();  
  25. }  


下面来看看newsDetail.tpl这个模板文件

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  5. <title>新闻列表</title>  
  6. <style type="text/css">  
  7. *{  
  8.     font-size:12px;  
  9. }  
  10. </style>  
  11. </head>  
  12. <body>  
  13.   
  14. <br></br>  
  15. <table width="725" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse" bordercolor="#6699CC" >  
  16.   <tr bgcolor="#6699cc">  
  17.     <th scope="col">新闻标题</th>  
  18.     <th scope="col">新闻内容</th>  
  19.     
  20.     </tr>  
  21.    <tr align='center' height='25px'>  
  22.     <td scope="col">{title}</td>  
  23.     <td scope="col">{content}</td>  
  24.     
  25.     </tr>  
  26. </table>  
  27. </body>  
  28. </html>  


2.静态化列表页

这一部分的工作其实很简单,就看你能不能想的上去,像修改、删除我们可以按照原来的做法,该怎么弄就怎么弄,只需要定期更新静态化后的列表页就可以了,更新的频率按照自身需要即可。

下面是我的做法:

[php] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. if("updatecache"==$opper){  
  2.     $rowInfo="";  
  3.     $listInfo="";  
  4.     $news=new NewsManagerImpl();  
  5.       
  6.     $all=$news->getAllNews();  
  7.     for ($i = 0; $i < count($all); $i++) {  
  8.         $row=$all[$i];  
  9.         //拼接列表信息  
  10.         $listInfo.="<tr align='center' height='25px'>";  
  11.         $listInfo.="<td>{$row['id']}</td>";  
  12.         $listInfo.="<td>{$row['title']}</td>";  
  13.         $listInfo.="<td><a href='../static/news-id-{$row['id']}.html'>查看</a></td>";  
  14.         //$listInfo.="<td><a href='../controller/NewsAction.php?opper=delete&id={$row['id']}'>删除</a></td>";  
  15.         //$listInfo.="<td><a href='../controller/NewsAction.php?opper=toupdatepage&id={$row['id']}'>修改</a></td>";  
  16.         $listInfo.= "</tr>";  
  17.     }  
  18.     //列表页静态化  
  19.     $listTpl=fopen("../tpl/newsList.tpl""r");  
  20.     while(!feof($listTpl)){  
  21.         $rowInfo.=fgets($listTpl);  
  22.       
  23.     }  
  24.     $all=str_replace("{newsContent}"$listInfo , $rowInfo);  
  25.     $staticListFp=fopen("../static/newsList.html""w");  
  26.     fwrite($staticListFp$all);  
  27.     fclose($listTpl);  
  28.     fclose($staticListFp);  
  29.     header("Location:../manage/success.html");  
  30. }  


是不是就只是一个重新读一下数据的简单操作呢,最后给大家拉几个效果图省的说我在这瞎写

后台的话一般不用考虑静态化,因为后台是给自己看的,只要性能不是很差静态化意义不大。

原文来自于:http://blog.csdn.net/walkcode/article/details/17115343

原文地址:https://www.cnblogs.com/guoyongrong/p/3467893.html