转:php页面静态化之真静态
之前的缓存和现在所说的页面静态化都是为网站提速的,如果是访问量小的小型网站可能不需要但是如果网站规模或访问量很大,那么页面静态化和缓存就会体现出各自的价值了下面先来了解下页面静态化的分类
页面静态化的分类:
1,按照形式:
1)真静态
2)伪静态
2,按照范围:
1)局部静态话(jquery,ajax)
2)全部静态化
页面静态化可以为网站提速还能进行seo优化,因为搜索引擎偏向抓取静态页面,针对不同的搜索引擎seo的标准可能不同。下面提供一个百度搜索引擎优化的链接
这次给大家分享的是页面真静态技术,本次将以一个简单的新闻管理系统为例子介绍真静态技术的使用,项目使用mvc架构来弄
一.真静态的理解
真静态就是把我们先前访问的jsp,php,aspx变为html,保留先前的页面效果和业务逻辑,减轻服务器的压力、让网站被良好的收录。但是真静态也有缺点那就是过多的静态页面占用了服务器空间,维护不是很方便。
二 开始静态化新闻管理系统
1.通过列表页面以最快速度查看单条数据的详细信息(如通过新闻列表查看某一条新闻的详细内容)
如果没有静态化的前提下,我们的做法可能是通过点击列表页面的标题传一个ID过去,之后查询出单条数据之后显示在一个页面上,这样我们每次点击链接都会去访问一次数据库,这样服务器的压力必然变大,可取的做法是每次添加数据都生成对应的详细页面
(1)简单的后台管理页面
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>后台管理</title>
- </head>
- <body>
- <h3><a href="addNews.php">添加新闻</a></h3>
- <h3><a href="../controller/NewsAction.php?opper=updatecache">更新列表页</a></h3>
- </body>
- </html>
(2)添加新闻的操作
- if("add"==$opper){
- $news=new NewsManagerImpl();
- $title=$_POST["title"];
- $content=$_POST["content"];
- $result=$news->addNews($title, $content);
- if($result>0){
- //生成静态html(用于查询单条数据)
- $fp=fopen("../static/news-id-".$result.".html", "w");
- $ftpl=fopen("../tpl/newsDetail.tpl", "r");
- while(!feof($ftpl)){
- $row=fgets($ftpl);
- //替换相应的位置
- $row=str_replace("{title}", $title, $row);
- $row=str_replace("{content}", $content, $row);
- fwrite($fp, $row);
- }
- fclose($ftpl);
- fclose($fp);
- header("Location:../manage/success.html");
- }
- exit();
- }
下面来看看newsDetail.tpl这个模板文件
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>新闻列表</title>
- <style type="text/css">
- *{
- font-size:12px;
- }
- </style>
- </head>
- <body>
- <br></br>
- <table width="725" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse" bordercolor="#6699CC" >
- <tr bgcolor="#6699cc">
- <th scope="col">新闻标题</th>
- <th scope="col">新闻内容</th>
- </tr>
- <tr align='center' height='25px'>
- <td scope="col">{title}</td>
- <td scope="col">{content}</td>
- </tr>
- </table>
- </body>
- </html>
2.静态化列表页
这一部分的工作其实很简单,就看你能不能想的上去,像修改、删除我们可以按照原来的做法,该怎么弄就怎么弄,只需要定期更新静态化后的列表页就可以了,更新的频率按照自身需要即可。
下面是我的做法:
- if("updatecache"==$opper){
- $rowInfo="";
- $listInfo="";
- $news=new NewsManagerImpl();
- $all=$news->getAllNews();
- for ($i = 0; $i < count($all); $i++) {
- $row=$all[$i];
- //拼接列表信息
- $listInfo.="<tr align='center' height='25px'>";
- $listInfo.="<td>{$row['id']}</td>";
- $listInfo.="<td>{$row['title']}</td>";
- $listInfo.="<td><a href='../static/news-id-{$row['id']}.html'>查看</a></td>";
- //$listInfo.="<td><a href='../controller/NewsAction.php?opper=delete&id={$row['id']}'>删除</a></td>";
- //$listInfo.="<td><a href='../controller/NewsAction.php?opper=toupdatepage&id={$row['id']}'>修改</a></td>";
- $listInfo.= "</tr>";
- }
- //列表页静态化
- $listTpl=fopen("../tpl/newsList.tpl", "r");
- while(!feof($listTpl)){
- $rowInfo.=fgets($listTpl);
- }
- $all=str_replace("{newsContent}", $listInfo , $rowInfo);
- $staticListFp=fopen("../static/newsList.html", "w");
- fwrite($staticListFp, $all);
- fclose($listTpl);
- fclose($staticListFp);
- header("Location:../manage/success.html");
- }
是不是就只是一个重新读一下数据的简单操作呢,最后给大家拉几个效果图省的说我在这瞎写
后台的话一般不用考虑静态化,因为后台是给自己看的,只要性能不是很差静态化意义不大。
原文来自于:http://blog.csdn.net/walkcode/article/details/17115343
转:php页面静态化之真静态的更多相关文章
- PHP静态化之真静态化
参考文献:http://blog.sina.com.cn/s/blog_66aa1142010114lc.html 采用了动态服务器技术生成静态HTML的做法,这样做的好处是:一是能减轻其服务器的负担 ...
- [PHP]PHP页面静态化:真静态的两种方案
---------------------------------------------------------------------------------------------- /*|-- ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_21-页面静态化-静态化测试-静态化程序编写
public String getPageHtml(String pageId){ /** * 静态化程序获取页面的DataUrl * * 静态化程序远程请求DataUrl获取数据模型 * * 静态化 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作
这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线] ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_12-页面静态化-页面静态化流程
需要知道数据结构,然后去做模板标签.首先需要获取页面的数据模型.下面的每一条记录都代表一个页面. 比如这个轮播图.就需要提前给这个轮播图编写一个模板 有很多的页面如果知道每个页面的dataUrl.例如 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_01-页面静态化需求分析
上半部分就是静态化 业务流程如下: 1.获取模型数据 2.制作模板 3.对页面进行静态化 4.将静态化生成的html页面存放文件系统中 5.将存放在文件系统的html文件发布到服务器
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_22-页面静态化-静态化测试-静态化程序测试
测试service内些的静态化的方法 先新建一个测试类 模板的id 放到下拉的静态数据里面 这样这条数据 就是用用的轮播图005这个模板 把这条数据静态化 进入到断点里面.先获取数据模型 获取模板时 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_20-页面静态化-静态化测试-填写页面DataUrl
启动前端和后端.轮播图的数据url可以在这里修改. 找到列表页面的轮播图,然后点击编辑 随便更新一个地址测试 提交后数据再次编辑 发现url没有变化 在pageService里面update方法把更新 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_15-页面静态化-模板管理-模板管理业务流程
在视频教学的过程中,不会去做模板管理的模块 cms_template用来存储模板信息 cms_page 这一些课程页面用的是一个模板 模板的详情.templateFileId是模板的文件id 模板的文 ...
随机推荐
- 优化exp/imp导入导出速度大全
.exp 个相关的参数:DIRECT和RECORDLENGTH参数. DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N).常规路径导出使用SQL ...
- 在eclipse下编译hadoop2.0源码
Hadoop是一个分布式系统基础架构,由apache基金会维护并更新.官网地址: http://hadoop.apache.org/ Hadoop项目主要包括以下4个模块: Hadoop Common ...
- [Angular 2] Pipe Purity
Explaining how Pipes only change by default when your Pipe input parameters change and not when your ...
- 《Android开发艺术探索》读书笔记 (10) 第10章 Android的消息机制
第10章 Android的消息机制 10.1 Android消息机制概述 (1)Android的消息机制主要是指Handler的运行机制,其底层需要MessageQueue和Looper的支撑.Mes ...
- JSON 解析(门店)
package com.j1.mai.action; import java.io.BufferedReader; import java.io.IOException; import java.io ...
- AS Gradle构建工具与Android plugin插件【大全】
Android plugin version 与 gradle version 的关系 Gradle是一种构建工具,它通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对 ...
- 【开源java游戏框架libgdx专题】-02-Eclipse Gradle 环境安装
创建eclipse开发环境 Eclipse 4.5 Help -> install newsoftware 填上下载地址(Eclipse 4.5及以上版本): http://dist.sprin ...
- 分页技术之PageDataSource类
之前给大家介绍了分页技术之Gridview控件,今天给大家介绍另外一种分页技术,采用PageDataSource类 + Repeater控件来实现. 前台只需要拖出一个Repeater控件来绑定要显示 ...
- UIScrollView 之图片缩放
UIScrollView 之图片缩放 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理 也就是说,要完成缩放功能的话,只 ...
- asp.net 图片质量压缩(不改变尺寸)
private static ImageCodecInfo GetEncoderInfo(String mimeType) { int j; ImageCodecInfo[] encoders; en ...