Tag-Archive for » zend «

星期三, 08月 13th, 2008 | Author: Joshua

首先Apache的Rewite规则差别不是很大,但是Nginx的Rewrite规则比Apache的简单灵活多了
Nginx可以用if进行条件匹配,语法规则类似C


if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}

官方文档请点击这里
Rewrite的Flags

Flags can be any of the following:
* last - completes processing of rewrite directives, after which searches for corresponding URI and location
* break - completes processing of rewrite directives
*redirect - returns temporary redirect with code 302; it is used if the substituting line begins with http://
* permanent - returns permanent redirect with code 301

last - 完成重写指令后,搜索相应的URI和位置。相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则。
break - 中止Rewirte,不在继续匹配。
redirect - 返回临时重定向的HTTP状态302。
permanent - 返回永久重定向的HTTP状态301。

ZEND Framework的重定向规则:
案例一:
全部重定向到 /index.php
rewrite ^/(.*) /index.php?$1&;
案例二:
如果文件或目录不存在则重定向到index.php
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?$1&;
}

Wordpress的重定向规则:
案例一:
http://www.wemvc.com/12 重定向到 http://www.wemvc.com/index.php?p=12
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php?p=$1 last;
}

案例二:
与zendframework配置很像
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?$1&;
}

以下为Discuz完整的Rewrite for Nginx规则
if (!-f $request_filename) {
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
}

文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行

正则表达式全部符号解释
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘\(’ 或 ‘\)’。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
学习更多正则知识请查看这里 正则表达式

星期二, 08月 12th, 2008 | Author: Joshua

最近网站general listing程序执行的速度比较慢,主要原因是在关联表数量太多,数据库的压力大造成的。
Ok 进入正题:

原先页面程序执行时间为2s+;
第一步;我分析了下程序,没看出有什么语句上的问题;
第二步:转而查数据库,发现产品与产品属性的关联表有一个字段没加索引,加好后速度明显提升,大概是1s+
可是还不行啊,程序就要消耗掉1s的时间;
在此我简单介绍下我的网站架构
底层:Zend Framework + 自写底层类库;
View层用的是Smarty;
思考下,问题主要是在与数据的查询上出的,也就是说在把数据给Smarty之前花掉了大量时间;那我们如果能把这部分数据缓存下来,岂不是完美;

这样理解:
原来是:接收请求->分析请求->查询数据库->处理数据->Smarty->页面
现在呢:接收请求->缓存数据->Smarty->页面

也就是 缓存数据==分析请求->查询数据库->处理数据

做好后程序执行时间由1s变成0.008s
2s/0.008s = ?
对就是200多倍;

虽然smarty由cache的功能,但是对与一个动态的电子上午网站根本就不适合,为什么?有兴趣的可以把smarty的cache设置为true 试试看,呵呵~

数据缓存类似于用c或其他的写数据库与程序中间件方法;但是这种个人感觉又优于中间件。

还有呢:数据缓存+SMARTY 个人感觉比较理想 因为Smarty编译好后成为php脚本本身时间不要消耗很长 如果哪位仁兄正用着ZP来加速 那岂不更爽?

当然也有缺点,缓存过期后第一个访问网站的人会稍微感觉有些慢 也就是原来优化后的1s 但是一个几百万pv的网站 一个人偶尔某个页面访问慢总比都慢好吧

数据缓存的方法有很多,我用的是Zend Cache,如果你的内存够大,也可用APC扩展将缓存数据放入内存。更快了~

个人不才,望高手看后可以给予更多的指正,也欢迎一起讨论~

Category: Zend Framework  | Tags: , ,  | Leave a Comment