如何为大型网站提速页面静态化缓存技术memcachemysql优化

UPTATED:2014-07-05 | 分类:网络知识

中山网络公司,中山网络制作爱途科技公司2014-07-05日报

如何为大型网站提速(   静态化、 缓存技术memcache、 mysql优化)

提出问题->引出新技术->小案例(快速入门)->细节—(长期)---->使用项目

重要的概念

① 静态网址

 

② 动态网址

 

③ 伪静态网址

传统的做法->动态网址

 

2.(减少sql注入攻击风险)

 

补充说明 

Seo  (search engine optimization 搜索引擎优化)

页面静态化的分类

为什么要静态化

1. 访问php的速度比html慢

在apache / bin /ab.exe  可以做压力测试,该工具可以模拟多人,并发访问某个页面.

基本的用法

//–n 10000 请求多少次

//–c 10    

 ab.exe –n 10000  –c 10 

-n 表示 请求多少次

-c 表示 多少人

2. 静态化利于seo

3. 防止sql注入

① 真静态

方法1: 使用php自身的缓存机制

       output_buffering 缓存

       程序缓存

如果要测试php自己的缓存机制, 需要做配置.

php.ini 文件

display_errors=On

output_buffering=Off

error_reproting= 设置错误级别

看一段代码

<?php

echo “yyy”;

header(“content-type:text/htm;charset=utf-8”);

echo “hello”;

?>

开启缓存:  1.   Ob_start();

            2.   Php.ini

Ob_get_contents() 获取 output_buffering 的内容

Ob_clean();清空 output_buffering 的内容

Ob_end_clean() 关闭缓存 并删除ob 内容

Ob_end_flush() 输出缓存ob内容并关闭缓存

Ob_flush() 输出缓存ob内容并清空

Flush() 刷新程序缓存的内容

Str_repeat("",100);  //显示100个空白

这里我们看一个综合案例,需求如下:

传统解决方法:

页面静态化思路:

因为新闻这种信息不是对实时性要求高,并且比较稳定,所以我们可以这样做,当第一个用户访问某条新闻后,我们使用ob的缓存机制,把内容缓存到html页面,当下一次访问时,直接访问html即可.

问题?

1. 如果我们的新闻更新了,这样我们的静态页面不变->解决

解决方法1,我们可以判断静态页面是否过期(30s) ,如果过期,则重新创建

代码:-->

if(file_exists($html_filename)&& filemtime($html_filename)+30>time()){

//直接访问html页面(把html页面的内容 echo 浏览器)

echo file_get_contents($html_filename);

exit;

}

难道这样就完美了吗?

1. news_list.php页面中点击 查看时候,仍然是一个php页面-> html网址

2. 实时性不够好,30s的延时..

解决思想:

当我们添加新闻或者更新新闻的时候,就同步的更新html静态页面,通常的做法,设计模板文件(网页设计师/美工),通过模板创建静态页面.

整理思路

提出为什么需要静态化.

静态化的方式( 使用ob 缓存来实现静态化 问题1 实时性不好,有延时, 2, 请求某个查询页面时使用 php动态网站)

真静态 (在 添加和修改的时候,可以实时的处理静态页面 问题 如果数据时海量的,造成真静态的html 文件过多,占用磁盘很大.)伪静态技术

② 伪静态

我们可以有两种方法来处理

1. 在php文件中,直接使用正则表达式技术处理

代码:

<?php

//echo "hello ok";

//echo "<pre>";

//print_r($_SERVER);

//echo "</pre>";

$parameters=$_SERVER['PATH_INFO'];

if(preg_match('/^\/(\d+),(\d+),(\d+)\.html/si',$parameters,$arr)){

echo $arr[1]."<br/>";

echo $arr[2]."<br/>";

echo $arr[3]."<br/>";

}else{

echo "输入的地址有误!";

}

?>

课后练习:

请使用正则表达式完成

在news.php页面中可以获取到 

news  sport  5

提出问题?

 

相当向 http://localhost/news.php?class=sport&id=56

2. 配置apache的rewrite来处理

快速入门案例

请求

原理图

如何使用rewrite步骤:

1. 配置apache,启用rewrite机制

在httpd.conf中启用rewrite

LoadModule rewrite_module modules/mod_rewrite.so

2. 配置虚拟主机

到 c盘 hosts文件添加你的 ip 和 域名对应

127.0.0.1       

在 http.conf 文件中启用虚拟主机

# Virtual hosts 启用虚拟主机

Include conf/extra/httpd-vhosts.conf

3. 配置 httpd_vhosts.conf文件

在 <Direcotry >段的配置,默认值,是在httpd.conf 的中配置,看根目录.

<VirtualHost *:80>

    #ServerAdmin webmaster@dummy-host2.somenet.com

    #文档的根目录

    DocumentRoot "C:/myenv/apache/htdocs/static3"

    #域名

    ServerName www.hsp.com

    ErrorLog "logs/dummy-host2.somenet.com-error.log"

    #CustomLog "logs/dummy-host2.somenet.com-access.log" common

    #配置rewrite相关选项,

    <Directory "C:/myenv/apache/htdocs/static3">

    #拒绝所有的访问

    #Deny from all

    Allow from all

    #是否显示列表(在发布项目后一般是不启用,对于这个配置,针对 DocumentRoot在htdos外的目录生效)

    #Options +indexes

    #是否启用rewrite

    #Allowoverride  all

    </Directory>

</VirtualHost>

4.在目录下添加了一个 .htaccess  文件,这个文件时配置rewrite机制和规则

<IfModule rewrite_module>

#写你的rewrite规则

RewriteEngine On

#news-id(\d+)\.html$ 是规则  news.php?id=$1 是转发的页面

#正则 子表达式 捕获 反向引用

#  "news-id33.html"

# 可以配置多个规则,匹配的顺序是从上到下

RewriteRule  news-id(\d+)\.html$   news.php?id=$1

RewriteRule  news-id(\d+)\.html$     error.php

</IfModule>

综合使用案例

4. 这个rewrite的规则也直接在 < Direcotry > 段直接配置

<Directory "C:/myenv/apache/htdocs/static3">

    #拒绝所有的访问

    #Deny from all

    Allow from all

    #是否显示列表(在发布项目后一般是不启用,对于这个配置,针对 DocumentRoot在htdos外的目录生效)

    #Options +indexes

    #是否启用rewrite

    Allowoverride  all

    #我们有时候,也可以把rewrite机制和规则写这里

    #RewriteEngine On

    #RewriteRule  news-id(\d+)\.html$   news.php?id=$1

    </Directory>

使用伪静态来完成简单的新闻查询.

☞ 伪静态是站在seo角度看.,他对于的页面不是存在的,而是每次查询数据库得到的信息,

真静态的页面是真的存在.

如果只是为了seo, 完全不希望有html ,那就只使用 伪静态.

如果的网址要seo ,项目 数据大(1000 w) 你就希望伪静态同时ob 来缓存.

如何更好的使用 伪静态+ob

在windows 下

① 编写一个 clear.php 文件,可以去检测某个目录下的文件是否过期

② 在编写my.bat文件

"C:\\myenv\\apache\\bin\\ab.exe" -n 1 -c 1

③ 在windows使用任务计划.

④ ok

在linux

使用crontab 参看 linux视频.

面试题: 请说明一下伪静态和真静态的特点和区别

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

的磁盘.

②伪静态一、可以方便的实现对搜索引擎的优化,二、占空间比较小。三、通过生成不同view-id2.hmtl 可以实现内容的变化.四有效的防止了注入攻击

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

补充知识 php中如何 使用正则表达式?

<?php

//案例

$str="akfdka1234 kafdla 9000";

//需求: 把 四个连续的数找到

//preg_match 函数只匹配第一个目标,$arr[0] 就存放匹配到得结果,

//$arr[1] 会匹配 模式中第一个子表达式的结果

//$arr[n] 会匹配 模式中第n个子表达式的结果

preg_match("/(\d\d)(\d\d)/si",$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

//preg_match_all 函数匹配所有目标,$arr[0] 就存放匹配到得所有结果,

//$arr[0][1] 存放第一个匹配的结果

//$arr[0][n] 存放第n个匹配的结果

//$arr[1][0] 放入第一个匹配到得结果中的第一个子表达式的结果

//$arr[1][n] 放入第n+1个匹配到得结果中的第一个子表达式的结果

preg_match_all('/(\d\d)(\d\d)/si',$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

$str="111-999-444 ka345-900-890 jdl90akjdfals";

preg_match('/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/si',$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

本文来源中山网站建设https://www.zsitw.com/,引用或者转载请注明。多谢~
  • 2021-05-09 中山公司网站建设需要注意哪些问题?

    网站建设对于互联网公司来说,可谓是重中之重了!针对每一公司来说,网站建设不但有益于公司的管理,更有利于促进公司的品牌推广,达到宣传目的。 网站建设有哪些具体步骤? 1.先做好网站定位 先将公司做好一个准确的定位,想好需要做的是什么类型的公司网站,对网站的主要内容和主题有明显的确定。最好做个公司业务市场的调...

  • 2017-12-29 评估一家电商网站,用户体验的10个检查点

    本文可被看作是评估一家电商网站体验的10个检查点,这10点不仅侧重于可用性,更强调成功和失败的电商网站在哪些方面有区别,这意味着这些区别能直接影响转化、激活以及用户的参与度。     1.网站的易发现性     我们的顾客是通过互联网发现我们的吗?他们是在网上发现我们的...

  • 2017-04-01 响应式网站如何设计

    响应式网站使得不同设备、分辨率的网站都有最好的视觉体验。为了获得更好的效果,那么响应式网站如何设计才能表现出更好的效果呢?     一、网站设计     首先,生活常用亮色可以被柔和色反衬出来,这是非常明显是事情,在网页设计中也一样,你可以利于这一点去吸引观众眼...

  • 2016-10-06 网站排版美化

     seo是什么,seo就是优化网站美化网站。注重用户体验而来,一个网站质量好,美观。自然用户体验也就好,转化率也就高!首先我们需要把自己的站内优化好。站内优化也就是网站美化、排版,其次就是站内代码优化和内容优化了!   在日常上网中,我们上网打开一个排版乱七八糟的网站相信你也会马上关闭不想多看!这个就说明了...

  • 2016-09-02 官网搭建必须注意的三点

       网络营销的崛起带动了一大批人投入进来,都纷纷为自己的企业打造站点,想通过自己的网赚钱,然而对于新朋友而言,做好官网搭建往往是需要注意很多问题的,要是问我做网站的前期选择重不重要,这个我可以很肯定的回答:重要,非常的重要。我们应该走好站长的第一步,有了好的第一步,然后才会有第二步,第三步...