喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
 11  1/2  1  2  > 
     
标题: [原创] [原创]关于页面优化 和伪静态  
 
simonxzq (simonxzq)
高级会员
Rank: 4
高级会员



UID 14971
精华 1
积分 574
帖子 537
金钱 564 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2002-6-25
来自 江门
状态 离线
[原创]关于页面优化 和伪静态

没上PHPX很久,记得好像是在2001年还是02年,一位亦师亦友的爱好者把我带到PHPX,一直在各位前辈的庇护之下成长,在此表示对前辈们和PHPX平台的感激.
之前几次的到来,发现版主也已经换了N+1代,代表着PHP拥戴者是一代接一代
一直以来,PHPX里的大哥们帮了我实在不少,而我就没怎么为PHP做贡献,在一些PHP群里,也有不少朋友问起相关知识,现在略尽绵力.希望能对初学者一个启示.


内容提要:
1)版面优化
2)伪静态(重点涉及apache,smarty,正则)


详细内容:

一、版面优化:
版面优化其实主要涉及HTML,JS,CSS,XML之间的关系(XML相关在此不作描述).
1)一般来说,在资源共享的前提下,我们最基本的目的是让搜索引擎所收录(很多人被AJAX所迷惑,到处使用AJAX,但我的观点是,只有在后台或用户操作部分才使用).
因此,首先我们应该按搜索引擎的收录准则来设计(其实下面说的“伪静态”还不是为了搜索引擎,由于相关文档有好几个PAGE,请自行搜索),主要是html的使用问题,如<h1> <meta> <title>以及标签属性的使用问题.

2)然后解决加载速度和内容纯度问题:
主要是以下几个原则:
1>不要为了版面美观,把无谓的HTML加上去,建议把版面美观的任务交给CSS,并认真考虑CSS的可重用性,HTML只作为对信息内容的描述(好像是XML的重点吧)。我在网上抽查了好一部分的站点,好的网站,html占总内容的50%以下,但有的站点,文字内容占总内容不到20%,
2>把JS,CSS写成文件.只要是利用了浏览器的CAHCHE,减少内容下载
3>HTML标签应该尽量减少嵌套,我见过夸张的一个站点,TABLE嵌套居然是11层..狂汗....

3)解决数据合理处理时间
这个涉及内容比较多,主要是

二、伪静态
这里主要描述apache,smarty的应用,当然,其实使用什么模板甚至不使用模板都没什么关系的,只是笔者长年使用smarty,深浓感受到它的强大
该部分主要针对的是对系统有控制权和对apache、正则较为熟悉的用户。

在这里,核心是强调正则的应用,如果你不会正则表达式,那么你就只能停留一成不变的抄袭阶段,甚至无法使用.而且正则在应用上普遍(基本上什么语言都有)、频繁和强大,笔者还是建议花点时间,学精一点,受用终生
对于搜索引擎,据我所知,关键是处理GET中的"?"、"&"."php",还有就是URL长度的问题就OK了,形式就看个人爱好了。
先说APACHE,关键是使用mod_rewrite,打开mod_rewrite模块(在httpd.conf中,把LoadModule rewrite_module modules/mod_rewrite.so前面的“#”去除)


如果使用了vhost(<VirtualHost>),可以在vhost里面加入类似下面的代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^xxx.com$
RewriteRule ^/([^\.\/]+)\.html$ /index.php?action=$1 [L]

解释:
以上配置不一定放在vhost里,按你个人要求放得合适就行。
第一行,表示该vhost将要使用rewrite(URL重写)
第二行,RewriteCond是用于如果后面条件符合(第一个参数满足第二个参数,其中第二个参数为正则表达式),则执行下面的RewriteRule指令,其中%{xxxx}表示是apache的变量,%{HTTP_HOST}表示URL的主机(域名),其它变量请查看apache2手册
第三行,实现url重写(重头戏),第一个参数为在浏览器中输入的url,满足该正则的uri才执行重写,第二个参数是重写规则,即把满足第一个参数的url按照该规则转换成你须要的url在这里笔者必须指出,重写后的url如果包含"http://",跳转后的地址会显示在浏览器的地址栏中。第三个参数是一些控制,如以上[L]表示该重写是最后一条,后面的重写规则不再被执行。

smarty部分:
主要是处理输出的页面内容,你使用apache的rewrite后,你页面中的链接当然使用了它的规则了,如:原来是abc.php?action=doit就要改用类似abc/action-doit.html这样的方式表示,当然,你可以在做页面时自己手动去改,但我觉得这是比较笨的方法.为什么不去使用ob_xxxxx()去控制呢?(ob_xxxx()系的函数使用请参考php手册).在这里的介绍使用smarty去代替,因为这样会更加灵活
在smarty中,使用register_outputfilter()注册一个处理方法即可,具体方法类似为:
//先定义好一个处理函数
function change_url($tpl_output, &$smarty)
{
        $tpl_output=preg_replace("/\/index.php?\?action=([^&]+)/i","/\\1.html",$tpl_output);
        return $tpl_output;
        }
//该函数第一个参数是smarty的页面内容,第二个是smarty指针
//然后使用
$tpl->register_outputfilter("change_url");

register_outputfilter()方法是输出过滤函数,即交给 change_url($tpl_output, &$smarty)第一个参数是smarty处理后的页面内容
同类型的还有前过滤方法register_prefilter(),即把smarty模板交给第一个参数,详细使用方法请参考smarty手册


如果上述内容有错漏,请原谅并指正


看了下表,一点了..已经写了一个小时,累.要想午觉了...
2006-8-28 01:24 PM#1
查看资料  发短消息  顶部
 
蟋蟀
版主
Rank: 7Rank: 7Rank: 7
村里巡逻队长


UID 67242
精华 0
积分 2035
帖子 1762
金钱 2035 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-12-17
来自 福建
状态 离线
[推荐阅读] 新手求教!
顶一下.



吉林php群
27089230
2006-8-28 01:38 PM#2
查看资料  Blog  发短消息  QQ  顶部
 
zhlin (zhlin)
中级会员
Rank: 3Rank: 3
中级会员



UID 17204
精华 0
积分 269
帖子 271
金钱 269 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2002-10-23
状态 离线
[推荐阅读] 请问一个查询分页的问题
smarty那部分还不是很理解?
2006-8-28 01:49 PM#3
查看资料  发短消息  顶部
 
webboy
金牌会员
Rank: 6Rank: 6
老会员


UID 64695
精华 0
积分 1077
帖子 828
金钱 1077 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-6-11
来自 北京
状态 离线
[推荐阅读] 这个分页该怎么做?很急!
不错~顶一个:)



爱老婆 爱狮子 爱生活
2006-8-28 03:03 PM#4
查看资料  发短消息  顶部
 
simonxzq (simonxzq)
高级会员
Rank: 4
高级会员



UID 14971
精华 1
积分 574
帖子 537
金钱 564 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2002-6-25
来自 江门
状态 离线
[推荐阅读] 请问如何使用PHP给POST的字段自动增加空格
因为涉及内容的详细内容都是比较复杂,内容也较多,如正则,和APACHE中rewrite相关指令和知识都是很复杂和繁多,要完全消化是要很长时间的.

补充:
在例中,我是抽取我设置中的其中一段,只是表示了使用方法和意思,可能表示不了实际逻辑,读者必须按自己的须要修改


最后,关于伪静态还有几点要补充的:
1>一般来说,在URL中,变量不要过多,3个以内为宜
2>不同的页面最好统一GET变量名(当然不同也是没问题的,看你的正则设置得如何了)
3>像搜索类的页面最好不要使用伪静态,因为可能会非常复杂

[ 本帖最后由 simonxzq 于 2006-8-28 03:20 PM 编辑 ]
2006-8-28 03:17 PM#5
查看资料  发短消息  顶部
 
不懂就问 (不懂就问)
注册会员
Rank: 2
一般会员



UID 26596
精华 0
积分 139
帖子 126
金钱 139 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-2
状态 离线
[推荐阅读] 如何学习php?


QUOTE:
原帖由 simonxzq 于 2006-8-28 03:17 PM 发表
因为涉及内容的详细内容都是比较复杂,内容也较多,如正则,和APACHE中rewrite相关指令和知识都是很复杂和繁多,要完全消化是要很长时间的.

补充:
在例中,我是抽取我设置中的其中一段,只是表示了使用方法和意思,可 ...
大哥您太厉害了,有空帮我看看这个问题啊,rewrite 的

http://www.phpx.com/happy/thread-122864-1-2.html

谢谢
2006-8-28 11:09 PM#6
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] Linux新手学习群,欢迎新手共同探讨,老手指导。
说得实实在在的,在实际应用中得出的宝贵经验之谈,建议大家仔细消化消化。



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-29 10:44 AM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
tl84 (tl84)
乞丐

初级会员



UID 49872
精华 0
积分 -1
帖子 20
金钱 -1 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2004-11-15
状态 离线
[推荐阅读] 急求打包方法
好东东!!!!
2006-8-29 02:23 PM#8
查看资料  发短消息  QQ  顶部
 
yxqadr
新手上路
Rank: 1
初级会员



UID 67787
精华 0
积分 25
帖子 25
金钱 25 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-1-5
来自 昆明
状态 离线
[推荐阅读] 请教一个关于下拉菜单的问题,知道的帮忙看看,谢谢!
谢谢大哥好东西..要仔细消化下..呵呵...刚刚接触PHP,想认真的学好它,大三了在不好好学习就来不及了.



低调,专注,认真
2006-8-31 02:13 PM#9
查看资料  发短消息  QQ  顶部
 
simonxzq (simonxzq)
高级会员
Rank: 4
高级会员



UID 14971
精华 1
积分 574
帖子 537
金钱 564 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2002-6-25
来自 江门
状态 离线
[推荐阅读] 模板类函数的用法??
麻烦版主给我处理一下

编辑时copy漏了,多谢一位朋友的提醒:麻烦版主给我处理一下:
在版面优化中的第三点:
3)解决数据合理处理时间
这个涉及内容比较多,主要是CAHCE的问题,在这方面主要是分为两大主题,一个是页面内容的CAHCE,另一个数据库query时的cache
页面内容的CACHE相关内容很多,但基本原理大致一样(我看的例子也不多,在此不敢多说),主要设置好就行.我个人是使用smarty的cache比较多,比较得心应手.
数据库中query的查询要mysql较高的版本才支持,好像是4.2以上吧.详细请查看mysql手册,这个实现不算太难.
在这两种之中,我个人觉得面页内容cache比较实际(比较绝对,不经过数据库,就只执行了简单的几行语句,速度当然快了),经过对我个人写的一套平台在zend中的测试,mysql的连接是占用了整个时间的很大部分.当然,query的cache有他自己的特点,而且是他们是两个不同层面的cache,结合使用的效果不错.
我个人是在smarty中使用了限时的cache,也就是把
$smarty->caching=2
然后使用
$smarty->cache_lifetime =cache时间


4)最后是压缩传送的数据,减少在网络中的传送时间(相关资料在phpe.net上有),但如果你的内容很少的话,还是不建议使用,因为不是所有浏览器都支持的.而且也增加了客户端的负担
2006-8-31 02:26 PM#10
查看资料  发短消息  顶部
 11  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.033778 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP