• 页面静态化详解


    一、明确几个重要概念

    静态网址:纯静态HTML文档

    动态网址:内容存于数据库中,根据要求显示内容,URL中以 ?, & 显示不同的参数,如:news.php?lang=cn&class=1&id=2

    伪静态网址:伪静态仅仅是对动态网址的一个重写,伪静态网址不能让动态网址“静态化” ,搜索引擎不会认为伪静态就是HTML文档。其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。

    举例说明: 这是一个动态网址 news.php?lang=cn&class=1&id=2,从seo的角度来看, 最好重写为 news-cn-sport-id2.html。这样的也更加有效的防止sql注入攻击 ☞ 但是也不要精简重写为 news-2.html,这样简写同样不利于搜索引擎优化.

    二、页面静态化概念

    ■ 页面静态化概念

    我们大多数情况下是直接访问php文件,php脚本在服务器端执行并 返回信息,对于一些大型的网站,访问量很大,频繁的动态操作和操作 数据库会加重服务器的负担.

    在实际开发中,通常使用缓存技术(memcached)或者页面静态化 来解决

    从静态化形式看,页面静态化分为:

    ① 真静态

    ② 伪静态

    从静态范围看,页面静态化分为:

    ① 整个页面静态化

    ② 局部静态化(jquery)

    页面静态化的必要性1

    我们看一个实际问题? 使用apache提供的 benchmarking tool来测试 下面的两个程序,看看访问各种访问的时间是怎样的?

    //直接使用html输出for循环的 信息. 01......99
    for($i=0;$i<100;$i++){
    echo "$i";
    }

    apache/bin/ab.exe 程序可以来做效率测试

    基本使用: ab [options] [http[s]://]hostname[:port]/path

    options是选项: -n 执行访问次数 -c 用户并发数量

    页面静态化的必要性2

    从seo的角度来,google,baidu 更偏好静态网址(伪静态网址),比 如: news.php?lang=cn&class=1&id=2 这样的动态网址,不如 news-cn-sport-id2.html ,这样的格式.

    页面静态化的必要性3

    从安全的角度来看news-cn-sport-id2.html 更不容易被sql注入攻 击。

    三、使用php缓存机制完成页面静态化

    我们可以使用php自带的缓存机制来完成页面静态化,但在这里我要 说明一点,仅靠php自身的缓存机制并不能完美的解决页面静态化, 往往需要和其它静态化技术(通常是伪静态技术)结合使用,

    例子:(新闻查询系统)当访问一个页面时,先判断是否存在缓存,如果存在,则直接输出缓存文件中的内容。否则,则先查询数据库,获得数据,然后生成缓存文件。 详解PHP的缓存机制(图), Output_buffering ,常用的函数包括 ob_start() ob_get_contents() ,ob_clean(),ob_end_clean() ob_end_flush() ob_flush() flush()

    关于PHP经常有面试题.简述ob_flush() 和flush()的 区别? 简述PHP缓存机制.

    单纯使用php缓存机制完成页面静态的不足分析

    解决方案(真静态和伪静态技术.)

    四、页面静态化(真静态)--原理示意图

    简单的说: 页面静态化技术就是要把php->html直接访问,从 而减少对数据库的操作,达到提高访问速度

    基本流程是:

    1.创建模板文件template.html

    2.通过模板文件,创建静态页面的 php文件 xx.php

    3. 用户访问生成的静态页面 xx.html

    快速入门案例(根据模板生成静态页面)

    五、数据库和页面静态化(真静态)结合  

    使用静态页面技术如何处理,在添加新闻的时候完成两件事情:

    ①添加数据到数据库

    ②同时生成对应的新闻详细信息显示静态页面

    六、页面静态化(真静态)的优点和缺点

    html静态页(真静态)的好处有三点;

    一是减少服务器对数据响应的负荷,

    二是加载不用调动数据库,响应速度快。

    三是便于优化引擎。 缺点也有几点:一是空间占用比较大。二是生成的文件多了,服务器对html文件的响应负担也较重。

    如果一个系统使用真静态进行页面静态化,需要生成海量的静态 页面,我们可以考虑使用伪静态来处理.

    七、伪静态 1  

    比如这个网页 http://localhost/content.php/1,122,8912.html 其实处理的脚本是content.php 参数为1,122,8912 相当于content.php?a=1&amp;b=122&amp;c=8912 只不过这样的URL太难记。搜索引擎也不喜欢。

    真静态只是完全生成了HTML。 客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。 当然在你网站的流量没有那么大的时候。URL重写是最好的方法(如果访问量很大,还可以考虑负载均衡)

    URL重写的方法有很多种,APACHE(rewrite),IISREWRITE。PHP脚本直接处理。我们先讲解如何使用PHP脚本直接处理。

    八、伪静态 2  

    下面以程序为例讲一下PHP伪静态的程序实现方法 程序为例:

    http://localhost/content.php/1,122,8912.html

    //利用server变量 取得PATH_INFO信息 该例中为 /1,122,8912.html 也就是执行脚本名后面的部分
    if(@$path_info =$_SERVER["PATH_INFO"]){
    //正则匹配一下参数
    if(preg_match("//(d+),(d+),(d+).html/si",$path_info,$arr_path)){
    $gid =intval($arr_path[1]);
    //取得值 1
    $sid =intval($arr_path[2]);
    //取得值122
    $softid =intval($arr_path[3]);
    //取得值8912
    }else die("Path:Error!");
    }else die('Path:Nothing!');

    面试题: 匹配模式中的 s表示什么意思.

    九、伪静态 3

    下面以程序为例讲一下另外一种形式的PHP伪静态的程序实现方法程序为例:

    http://www.hsp.com/news-id23.html 实现上面形式的伪静态使用另外一种方式,通过apache的 rewrite机制来实现.

    十、伪静态4

    下面以程序为例讲一下另外一种形式的PHP伪静态的程序实现方法 程序为例:

    http://www.hsp.com/news-id23.html 我们使用另外一种方式,通过apache的 rewrite机制来实现.

    1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有 apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。

    如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文 件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。

    如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

    十一、伪静态5

    2.在httpd.conf中配置虚拟主机

    # Virtual hosts

    启用虚拟主机 Include conf/extra/httpd-vhosts.conf

    3.httpd_vhosts.conf文件中,配置相应的选项.详细讲解

    <VirtualHost *:80>
        DocumentRoot "C:/myenv2/apache/htdocs/static2"
        ServerName www.hsp.com
        <Directory "C:/myenv2/apache/htdocs/static2">
        #403错误提示,可以阻止人访问.
        #Allow from All
        #如果文件目录在apache目录外面,注释掉optinos 则,不能列表.
        #options +Indexes
        #不让列出列表配置
        #options None
        #设置欢迎页面
        #DirectoryIndex  aa.html
        #下面这个表示可以去读取 .htaccess文件,也可以直接在虚拟主机中配置.
        #Allowoverride All
        RewriteEngine On
        RewriteRule news-id(d+).html$ searchNews.php?id=$1
        #如果匹配不到,可以指定一个错误页
        errorDocument 404 /404.php
        #这里可以设置多个重写的规则
        #RewriteRule news-id.html$ error.php
        </Directory>
    </VirtualHost>

    十二、伪静态 6 

    4.在相应的目录下编写.htaccess 重写规则

    如果在linux下可以直接创建, 如果是在windows平台下,用记事本创建一个文件,比如abc.txt,然后另存 为 .htaccess文件即可

    5.重写规则,也可以直接在配置虚拟主机的<Directory>段配置.

    十三、伪静态 7

    ☞ rewrite规则介绍

    我们新建一个.htaccess文件之后,就在里面写入以下内容: RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭

    快速入门案例: RewriteRule ([0-9]{1,})$ index.php?id=$1 我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的 ([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!

    现在我们可以实现伪静态页面了,(上机练习题!)

    我们希望把用户输入的 http://localhost/view-23.html ulr

    重新被apache替换成 http://localhost/index.php?action=view&id=23 这个规则应当怎样写?

    ☞ 在.htaccess目录下创建一个index.php看看能否得到apache改写后的url $_GET['action'] => view $_GET['id'] => 23

    十四、伪静态特点

    如果一个网站使用真静态技术,会生成海 量的html静态页面,可以考虑使用伪静态 技术来优化我们的网站

    url重写(伪静态)的好处:

    一,可以方便的实现对化化引擎的优化,并且比生成静态更加方便。

    二、占空间比较小。

    三、首页每天都自动变化,不用维护。网站首页一般都有热点排行之类的,你可以设为,24小时排行,一周排行,再加上最新文章,最新点评等。这样首页天天是有变化的。

    四,便于广告的轮显。比如:你可以把art1234.php,这个虚成n个页,如art_1234.html,news_1234.html,top_1234.html,在不同的页面放不同的广告.总之是动态的,你就可以随意动。

    url重写的缺点:就是效率不如生成html的,因为它不是真正意义上的静态页,每次请求是要读取数据库的。但你可以用缓存技术来补偿一下。 

    十五、真静态 VS 伪静态

    ①真静态访问效率高,利于seo.可以减少对数据库的操作。但是会占用大量 的磁盘.

    ②伪静态

    一、可以方便的实现对搜索引擎的优化,

    二、占空间比较小。

    三、通过生成不同view-id2.hmtl 可以实现内容的变化.

    四、有效的防止了注入攻击

    小结: 如果一个网页会被频繁的访问(比如百万级别),通过该网页每次都会去操作数据库,可以考虑使用真静态(建议有针对性的使用),如果一个网页为了实现对搜索引擎的优化,提供网站的安全性,使用伪静态.

    十六、真静态和伪静态的选择

    使用静态化技术的建议.

    1.网站实时性要求高,不要使用静态化(真静态,伪静态均不适宜).

    2.如果网站访问量较小,没有必要使用静态化技术

    3.如果数据项目不多,但是访问频率极大,建议使用真静态,比如新浪新闻频道

    4.如果数据项目海量,使用真静态会生成海量的html静态页面,建议 使用伪静态

    5.在一个大型网站中,静态化技术是综合使用的,这个需要大家经验 的积累,多做项目

  • 相关阅读:
    Python笔记2(数据类型)
    Python笔记1(作业)
    Python笔记1(内容编码)
    Linux内核分析——第三周学习笔记
    Linux内核分析——第二周学习笔记
    Linux内核分析——第一周学习笔记
    day19-三元表达式,函数递归
    day18-有参装饰器
    day17-无参装饰器
    day16-函数对象,函数嵌套,闭包函数
  • 原文地址:https://www.cnblogs.com/suihui/p/3238190.html
Copyright © 2020-2023  润新知