中山网络公司,中山网络制作爱途科技公司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>";
随着全球经济的快速发展,外贸行业已经成为了许多企业重要的经济来源。而中山作为广东省经济实力强大的地区之一,其外贸市场也日益壮大。在这样的大环境下,搭建一座专业化的中山外贸网站已经成为了中山企业拓展国际市场必不可少的一项工作。 一个好的中山外贸网站应该具备哪些特点呢? 首先,中山外贸网站应该具备专业性。...
在网站建设的过程中,安全设计是一项至关重要的工作。我们致力于为贵公司提供安全可靠的网络环境,确保网站能够稳定运行,并能妥善保障每个用户的个人信息以及各种重要数据的安全性。为此,我们建议贵公司时刻关注并保证所使用的软硬件系统都能够获得最新的功能更新。这些更新不仅能够有效地预防目前已经被公之于众的各种安...
在网战设计领域之中,对于用户体验的关注、对于视觉艺术美的深度挖掘及对内容策略的科学谋划等重大议题,均贯穿了设计师们工作的每一个环节。为了缔造更为卓越的网络设计杰作,设计师们应当深度研究并深刻洞察这些关键议题,并倾注更多的时间和精力到其中。对于设计师们来说,他们还需不时进行A/B测试以优化改进方案,以便...
网站建设对于互联网公司来说,可谓是重中之重了!针对每一公司来说,网站建设不但有益于公司的管理,更有利于促进公司的品牌推广,达到宣传目的。 网站建设有哪些具体步骤? 1.先做好网站定位 先将公司做好一个准确的定位,想好需要做的是什么类型的公司网站,对网站的主要内容和主题有明显的确定。最好做个公司业务市场的调...
本文可被看作是评估一家电商网站体验的10个检查点,这10点不仅侧重于可用性,更强调成功和失败的电商网站在哪些方面有区别,这意味着这些区别能直接影响转化、激活以及用户的参与度。 1.网站的易发现性 我们的顾客是通过互联网发现我们的吗?他们是在网上发现我们的...