页面静态化

静态化特点:

1,利用seo搜索引擎优化         2,访问速度快          3,防止sql注入

动态网址:比如http://localhost/news.php?id=112,即,访问的是一个php页面,可以传入参数,称为动态网址

特点:1,不利于seo      2,访问速度慢        3,有被注入的危险


伪静态网址:在实际开发中,我们希望达到这样的目的,把下面的网址

http://localhost/news.php?lang=cn&class=sport&id=2

修改成如下网址:

http://localhost/news-cn-sport-id2.html

特点:1,利用SEO     2,防止注入   3,仍然要访问数据库,速度没有变化


页面静态化分类

从方式看(1,真静态,2伪静态)

从范围看(1,局部静态,2,全局静态)


介绍一款测试压力的工具 ab.exe  该工具程序是apache自带的大家在工作中可以使用该工具来测试自己的网站并发量大小,和某个页面的访问时间

 基本用法,进入到cmd 控制台

ab.exe –n 访问的总次数 –c  有多少人访问(并发量访问的页面url

举例说明:

ab.exe –n 10000 –c 100 http://locahost/test.php


当我们把 –c 调整到1000时,发现apache瘫痪给大家说下如何调整apache的最大并发量.

MPM (多路处理模块即 apache采用怎样的方式来处理并发.), 主要有三种方式 

1. perfork 预处理进程方式

2. worker 工作模式

3. winnt  这个一般说是windows采用的.

原理示意图:


如何设置我们的apache的最大并发数 ,步骤如下:

(1) 在httpd.conf 文件中 修改

# Server-pool management (MPM specific)

Include conf/extra/httpd-mpm.conf

(2) 确定当前的apahce是什么MPM模式

进入到 apache/bin 

httpd.exe –l



说明: 看 mpm_xxx.c 如果xxx是 winnt 说明是winnt  ,另外还可能是 perfork 或者  worker

(1) 修改httpd-mpm.conf 文件.

<IfModule mpm_winnt_module>

    ThreadsPerChild      1000  

    MaxRequestsPerChild    0

</IfModule>

(2) 重启apahce ,测试

 

 

因为在linux下,一般说采用的MPM是 perfork模式,我们看看如何配置.

 

<IfModule mpm_prefork_module>

    StartServers          5

    MinSpareServers       5

    MaxSpareServers      10

    MaxClients          150   #并发量

    MaxRequestsPerChild   0  #一个进程对应的线程数,对 worker更用.

</IfModule>

给大家一个合理的建议配置对大部分网站,中型网站,配置:

 

 

<IfModule mpm_prefork_module>
              StartServers         5      #预先启动
              MinSpareServers      5
              MaxSpareServers      10  #最大空闲进程
              ServerLimit          1500   #用于修改apache编程参数
              MaxClients           1000   #最大并发数
              MaxRequestsPerChild  0

</IfModule>

 

如果你的网站pv值  百万 

ServerLimit          2500   #用于修改apache编程参数
MaxClients           2000   #最大并发数

 

 

最后有一个关于htmlphp的访问效率图 :



分享一下页面seo技巧:

 

 

如果一个图片希望杯百度到

<img alt=’小狗’ src=’’/> 

在网站前台,我们建议 不要使用frame框架,不利用seo

如果我们给图片或者视频取名字,尽量简短.

 

 

页面静态化的技术实现有两种方式

1. 使用PHP自己的缓存机制

 

u 先说明一下OB缓存的机制.

ob1.php 代码:说明的ob的各个用法->项目中

ob2.php 代码,说明了浏览器缓存存在.

说明php5.2这个版本 在php.ini有一个配置 output_buffering  ,默认是关闭,如果是关闭,这刚才的代码就会警告.

 

☞ 如何打开ob缓存

① 配置php.ini 文件 output_buffering = 4096

② 直接在程序中  ob_start();

 

 

1. 使用模板替换技术实现(正则表达式)

 

 

使用ob缓存机制,完成一个简单的新闻管理系统-页面静态化(目标是实现全站静态化)

 

开发步骤:

(1) 做的页面:

(1)  简单的分析页面

 

(2) 创建数据表

 

create table news(

id int unsigned primary key auto_increment, /*新闻id,做成自增*/

title varchar(128) not null default ‘’, /*标题*/

content varchar(256) not null default ‘’, /*新闻内容*/

filename varchar(32) not null default ‘’ /*将来这个新闻对应静态页面*/

) engine=MyISAM charset utf8

 

测试数据:

insert into news (title,content) values('hello1','北京你好');

insert into news (title,content) values('hello2','四川你好');

 

 

(3) 走码

到此,我们已经实现了传统的查询任务

分析代码后,我们发现问题是,因为新闻内容相对稳定,所以没有必要每次都查询。优化的思路是当第一人查看某个新闻时,我们就生成一个对应的静态页面,当后面的人在查看,直接返回该静态页面即可.

代码实现

newsList.php 代码

showNews.php代码 

再想想,上面的代码缺点是什么?

cms(内容管理系统,新闻,软件发布文章管理内容就固定不变,我们不能接受.

解决方案:

① 我设一个超时,30s, 我们保证30内不去修改,超过30秒,就更新一把.

走码:

① 上面的解决方案有时间延时,所以如果我们希望静态化没有时间延时,就应该使用模板提换技术来搞定.

思路.

代码实现:整理

newslist.php 

addnews.html页面

newsAction.php 页面

思考题:

① 请大家完成更新新闻的这个页面静态处理

② 如何把newsList.php 也做成一个静态页面.->思想

 

 

u 任务是把新闻管理系统的首页面也静态化.

通用的CMS系统的示意图:

对我们的新闻管理系统首页静态化

 

思考我们能不能再添加新闻后,就直接静态化首页面, 如果你的确希望只要首页的内容有变化,就立即更新,最后的代理整理:

 

 

把所有的动态页面,放入到manage文件夹:

manage.html

<html>
<head>
<meta http-equiv='content-type' content='text/html;charset=utf-8'/>
</head>
<h1>管理新闻</h1>
<hr/>
<a href='addNews.html'>添加新闻</a>|
<a href='newsList.php'>更新首页</a>|
<a href='xxx.php'>列出所有信息</a>
</html>

addNews.html

<head>
<title>新闻标题</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<!--我们在添加新闻时,就同时生成一个对应的新闻页面(比如你设计好的一个新闻内容显示模板)-->

<form action="newsAction.php" method="post">
<table>
<tr><td>新闻标题</td><td><input type="text" name="title"/></td></tr>
<tr><td>新闻内容</td><td><textarea cols="50" rows="10" name="content"></textarea></td></tr>
<tr><td><input type="submit" value="添加"/></td><td><input type="reset" value="重新填写"/></td></tr>
<!--隐藏区-->
<input type='hidden' name='oper' value='add'/>
</table>
</form>
</html>

newsAction.php

<?php

	//处理用户的添加/更新/删除...请求
	//先获取 oper值
	$oper=$_POST['oper'];
	if($oper==='add'){
		//接收用户的新闻的各个信息
		$title=$_POST['title'];
		$content=$_POST['content'];
		//把新闻添加到数据库
		//这里大家可以使用工具类完成.
		$con=mysql_connect("localhost","root","root");
		if(!$con){
			die("连接失败");
		}
		mysql_select_db("newssys",$con);
		$sql="insert into news values(null,'$title','$content','')";
		//echo $sql;
		if(mysql_query($sql,$con)){
			//生成静态文件.
			$id=mysql_insert_id();
			$html_filename='news-id'.$id.'.html';
			$html_fp=fopen("../".$html_filename,'w');
			//把模板文件读取.
			$fp=fopen('news.tpl','r');
			//循环读取
			//如果没有读到文件的最后,就一直读取
			while(!feof($fp)){
				//一行行读.
				$row=fgets($fp);
				//把占位符替换掉->小函数 myreplace
				//问题?
				$row=str_replace('%title%',$title,$row);
				$row=str_replace('%content%',$content,$row);
				fwrite($html_fp,$row);
			}
			//关闭文件
			fclose($html_fp);
			fclose($fp);
			echo "恭喜你,添加成功<a href='manage.html'>管理新闻</a>";
			//怎样让首页面立即更新.
			include "newsList.php";

		}else{
			die('添加失败');
		}
	}else if($oper==='update'){
	
	}else if($oper==='delete'){
	
	}

newsList.php

<?php
	//列出新闻列表
	//这里,我使用最简单的方法来操作,没有使用mvc模式
	//这里你们可以使用工具类完成. db.class.php
	$con=mysql_connect("localhost","root","root");
	if(!$con){
		die("连接失败");
	}
	mysql_select_db("newssys",$con);
	$sql="select * from news";
	$res=mysql_query($sql,$con);
		ob_start();
		echo "<head><meta http-equiv='content-type' content='text/html;charset=utf-8' /></head>";
		echo "<h1>新闻列表</h1>";
		echo "<table>";
		echo "<tr><td>id</td><td>标题</td><td>查看详情</td><td>修改新闻</td></tr>";
		//循环的取出新闻列表
		while($row=mysql_fetch_assoc($res)){
		echo '<tr><td>'.$row['id'].'</td><td>'.$row['title'].'</td><td><a href="news-id'.$row['id'].'.html">查看详情</a></td><td><a href="#">修改页面</a></td></tr>';
		}
		echo "</table>";
		$str_ob=ob_get_contents();
		file_put_contents('../index.html',$str_ob);
		//这里关闭资源.
		//清空ob
		ob_clean();
		echo "恭喜你,首页面更新成功<a href='../index.html'>点击查看最新新闻列表</a>";

		mysql_free_result($res);
		mysql_close($con);

完毕,大家可以进一步深入的完成修改和删除.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值