2008年8月14日星期四
使用PHP程序开发高效的WEB网络系统
这里的大型项目,简单的指分布式项目,就是说,你的程序需要被部署在N台服务器上了。在这个层级上,PHP比起j2ee的确缺乏很多支持。我曾和 shadow在735上详细讨论过PHP要在大型系统上应用需要解决的一些问题,当然这些问题不光是PHP这个语言的问题,也包括了周边开发的问题:
1 PHP的页面代码共享,PHP的源代码被载入内存一次以后,就在其中保留 - 这个用APC和Zend的优化器可以搞定。
2 PHP页面之间的数据对象共享,a.php和b.php之间可以共享一个数据对象,比如数组,这个现在可以用序列化来作,但是会有文件io,这块可以用共享内存或者memcached来处理。
3 PHP的数据库连接池,因为在多前端的情况下,PHP控制不住对数据库的连接,所以需要在数据库前边去作一个连接池,类似于sqlrelay的东西。另外数据缓存也是很重要的,大压力开发有一个tip,就是能不动数据库就不要动数据库。
4 PHP的前端cache系统。一个透明的可控制的cache机制,确保网站的页面以最少次数查询数据库。这个有很多实现,但是没有找到特别好的。
5 一个PHP应用,成功的解决调这几个问题以后,应付稍微大一点的压力是没有什么问题的。
在这个级别上,重要的是,把PHP java C++ python之类融合起来,使其成为一个高效系统。我们可以用memcached来做分布式内存管理,可以用Lucene 来作全文检索,用ejb 容器来放一些业务逻辑组件,PHP则作为前端和系统的胶水,快速而灵活的把这些粘合起来。
1 PHP的页面代码共享,PHP的源代码被载入内存一次以后,就在其中保留 - 这个用APC和Zend的优化器可以搞定。
2 PHP页面之间的数据对象共享,a.php和b.php之间可以共享一个数据对象,比如数组,这个现在可以用序列化来作,但是会有文件io,这块可以用共享内存或者memcached来处理。
3 PHP的数据库连接池,因为在多前端的情况下,PHP控制不住对数据库的连接,所以需要在数据库前边去作一个连接池,类似于sqlrelay的东西。另外数据缓存也是很重要的,大压力开发有一个tip,就是能不动数据库就不要动数据库。
4 PHP的前端cache系统。一个透明的可控制的cache机制,确保网站的页面以最少次数查询数据库。这个有很多实现,但是没有找到特别好的。
5 一个PHP应用,成功的解决调这几个问题以后,应付稍微大一点的压力是没有什么问题的。
在这个级别上,重要的是,把PHP java C++ python之类融合起来,使其成为一个高效系统。我们可以用memcached来做分布式内存管理,可以用Lucene 来作全文检索,用ejb 容器来放一些业务逻辑组件,PHP则作为前端和系统的胶水,快速而灵活的把这些粘合起来。
2008年8月12日星期二
哼哼国足
上联:试问中国男足有多愁
下联:恰似一群太监上青楼
横批:无人会射?
国足欢迎你
《国足欢迎你》
我家球门常打开;要进几个随你
交锋过后就有了底;你会爱上这里
不管远近都是客人;请不用客气
进的少了别在意;下次补给你
我家住着谢亚龙;书写每段传奇
不懂足球也不要紧;仕途才是第一
陌生熟悉都是客人;请不用拘礼
谢主席他很热情;场场都陪你
国足欢迎你;为你敞开球门
再不济的实力;也能找信心
国足欢迎你;在主场上分享平局
哪怕你(世界)排名垫底
我家球门常打开;开怀容纳天地
一个两个不算稀奇;再多也输得起
天大地大都是朋友;请不用客气
场上梦游是惯例;场下才牛B
国足欢迎你;用红牌感动你
你们捞足积分;我们来出局
国足欢迎你;遇上了您就随便赢
有我们就会有奇迹
下联:恰似一群太监上青楼
横批:无人会射?
国足欢迎你
《国足欢迎你》
我家球门常打开;要进几个随你
交锋过后就有了底;你会爱上这里
不管远近都是客人;请不用客气
进的少了别在意;下次补给你
我家住着谢亚龙;书写每段传奇
不懂足球也不要紧;仕途才是第一
陌生熟悉都是客人;请不用拘礼
谢主席他很热情;场场都陪你
国足欢迎你;为你敞开球门
再不济的实力;也能找信心
国足欢迎你;在主场上分享平局
哪怕你(世界)排名垫底
我家球门常打开;开怀容纳天地
一个两个不算稀奇;再多也输得起
天大地大都是朋友;请不用客气
场上梦游是惯例;场下才牛B
国足欢迎你;用红牌感动你
你们捞足积分;我们来出局
国足欢迎你;遇上了您就随便赢
有我们就会有奇迹
小偷程序
什么是小偷程序?顾名思义,小偷就是偷东西的,而程序就是计算机用的。合起来也很好理解:偷别人资料的程序。多半指网站的数据。
偷数据的,几乎什么语言都可以。没有什么语言是肯定不能的。不过,某些语言显得比较容易,某些就显得比较繁琐。PERL就是一种用来偷数据的方便语言,得益于其简洁的语法。
偷了数据,其实里面多半是HTML语句,包含了各种数据。我们也知道:HTML没XML那么好分析。针对某个页面的分析,程序还可以作出来。只是字符串处理相关的各种函数应用。但若被偷的东西结构变了,就要改变我们的程序,以适应新的结构。这个是要注意的。
下面我们对各种语言的小偷程序进行说明:
一.获得网站数据的各种语言代码
1.Perl
#!/usr/bin/perl
# 通过IE浏览器中的[查看]->[源文件]可看HTML文件内容。
# perl中可以不通过浏览器直接取得HTML文件内容,用的
# 就是perl模块libWWW
use strict;
use LWP::UserAgent;
use threads::shared;
my $URL = \"http://osdev.beguest.com\";
my $ua = new LWP::UserAgent;
$ua->agent(\'Mozilla/3.0\');
my ($address,$params) = split(/\\?/,$URL);
my $req = new HTTP::Request (\'GET\',$address);
$req->content_type(\'applicationn/x-www-form-urlencoded\');
$req->content();
my $res = $ua->request($req);
my $content = $res->as_string();
# 此时$content里面是网页内容
print $content;
$URL里就是要偷数据的地址。例子中的是本人的小站。偷自己的东西,没犯法吧?
当然,这个会把网页内容打印到控制台。所以很多数据或者需要保存的时候,应该用重定向符号输出到文件。如:
perl yourfile.pl >a.html
这样,输出的结果就保存在文件a.html中了。至于分析的语句,PERL可以使用方便而简洁的正则,限制于不同程序的不同分析,这里就不写分析语句了。
2.Active Server Pages - VBScript
ASP版本的小偷程序,也不见得有什么太大的难度。不过应用了XMLHTTP组件的功能而已,事实上,我也很惊讶ASP写这个程序的简短之处:
<%
URL = \"http://osdev.beguest.com/osdev3.htm\"
Set objXMLHTTP = CreateObject(\"Microsoft.XMLHTTP\")
objXMLHTTP.Open \"GET\",URL,False
objXMLHTTP.Send
Response.Write Server.HTMLEncode(objXMLHTTP.responseText)
Set objXMLHTTP = Nothing
%>
简单不?呵呵....
3.Active Server Pages - JScript
从原理来说,这个和VBScript差不多。从语句来说,这个跟VBScript也差不多-毕竟,它们都用同一个组件:
4.Java
Java用来干这个,实在有点大才小用的感觉:
import java.io.*;
import java.net.*;
public class getURLContent
{
public static void main(String args[]) throws MalformedURLException,IOException
{
URL url = new URL(\"http://osdev.beguest.com/osdev3.htm\");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
while(reader.ready()){
System.out.println(reader.readLine());
}
}
}
偷数据的,几乎什么语言都可以。没有什么语言是肯定不能的。不过,某些语言显得比较容易,某些就显得比较繁琐。PERL就是一种用来偷数据的方便语言,得益于其简洁的语法。
偷了数据,其实里面多半是HTML语句,包含了各种数据。我们也知道:HTML没XML那么好分析。针对某个页面的分析,程序还可以作出来。只是字符串处理相关的各种函数应用。但若被偷的东西结构变了,就要改变我们的程序,以适应新的结构。这个是要注意的。
下面我们对各种语言的小偷程序进行说明:
一.获得网站数据的各种语言代码
1.Perl
#!/usr/bin/perl
# 通过IE浏览器中的[查看]->[源文件]可看HTML文件内容。
# perl中可以不通过浏览器直接取得HTML文件内容,用的
# 就是perl模块libWWW
use strict;
use LWP::UserAgent;
use threads::shared;
my $URL = \"http://osdev.beguest.com\";
my $ua = new LWP::UserAgent;
$ua->agent(\'Mozilla/3.0\');
my ($address,$params) = split(/\\?/,$URL);
my $req = new HTTP::Request (\'GET\',$address);
$req->content_type(\'applicationn/x-www-form-urlencoded\');
$req->content();
my $res = $ua->request($req);
my $content = $res->as_string();
# 此时$content里面是网页内容
print $content;
$URL里就是要偷数据的地址。例子中的是本人的小站。偷自己的东西,没犯法吧?
当然,这个会把网页内容打印到控制台。所以很多数据或者需要保存的时候,应该用重定向符号输出到文件。如:
perl yourfile.pl >a.html
这样,输出的结果就保存在文件a.html中了。至于分析的语句,PERL可以使用方便而简洁的正则,限制于不同程序的不同分析,这里就不写分析语句了。
2.Active Server Pages - VBScript
ASP版本的小偷程序,也不见得有什么太大的难度。不过应用了XMLHTTP组件的功能而已,事实上,我也很惊讶ASP写这个程序的简短之处:
<%
URL = \"http://osdev.beguest.com/osdev3.htm\"
Set objXMLHTTP = CreateObject(\"Microsoft.XMLHTTP\")
objXMLHTTP.Open \"GET\",URL,False
objXMLHTTP.Send
Response.Write Server.HTMLEncode(objXMLHTTP.responseText)
Set objXMLHTTP = Nothing
%>
简单不?呵呵....
3.Active Server Pages - JScript
从原理来说,这个和VBScript差不多。从语句来说,这个跟VBScript也差不多-毕竟,它们都用同一个组件:
4.Java
Java用来干这个,实在有点大才小用的感觉:
import java.io.*;
import java.net.*;
public class getURLContent
{
public static void main(String args[]) throws MalformedURLException,IOException
{
URL url = new URL(\"http://osdev.beguest.com/osdev3.htm\");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
while(reader.ready()){
System.out.println(reader.readLine());
}
}
}
2008年8月10日星期日
2008年8月7日星期四
jQuery-1.2.6新特性及主要改变
性能提升我就不说了, 这可以查看
1、整合了Dimensions Plugin插件
2、消除.attr()方法的15个明显错误并优化了该方法
3、.toggle()方法中现在可以地增加了不止两个方法如:
$(\"div\").toggle(function(){
$(this).removeClass(\"three\").addClass(\"one\");
}, function(){
$(this).removeClass(\"one\").addClass(\"two\");
}, function(){
$(this).removeClass(\"two\").addClass(\"three\");
});
4、可以对toggle()和one()方法进行解除绑定
function test(){ $(this).addClass(\"test\"); }
$(\"div\").one(\"click\", test);
$(\"div\").unbind(\"click\", test);
$(\"div\").toggle(test, test);
$(\"div\").unbind(\"click\", test);
5、index()现在可用于检索一个jQuery对像在集合中的索引
var test = $(\"div.test\");
$(\"div\").index( test ) == 3
6、makeArray()可以把任何对像转换为数组
jQuery.makeArray( document.getElementsByTagName(\"div\") )
// => [ div, div, div ]
jQuery.makeArray( true )
// => [ true ]
jQuery.makeArray()
// => []
7、beforeSend 的使用可以在ajax调用之前处理一些代码来决定是否进行ajax调用
$.ajax({
beforeSend: function(){
return $(\"#input\").val() == \"\";
},
url: \"test.php\"
});
8、公开速度对像,可以通过更改jQuery.fx.speeds对像来对覆盖默认值,也可以新添自已的速度常数。
jQuery.fx.speeds.slow = 1000;
$(\"#test\").slideDown(\"slow\");
1、整合了Dimensions Plugin插件
2、消除.attr()方法的15个明显错误并优化了该方法
3、.toggle()方法中现在可以地增加了不止两个方法如:
$(\"div\").toggle(function(){
$(this).removeClass(\"three\").addClass(\"one\");
}, function(){
$(this).removeClass(\"one\").addClass(\"two\");
}, function(){
$(this).removeClass(\"two\").addClass(\"three\");
});
4、可以对toggle()和one()方法进行解除绑定
function test(){ $(this).addClass(\"test\"); }
$(\"div\").one(\"click\", test);
$(\"div\").unbind(\"click\", test);
$(\"div\").toggle(test, test);
$(\"div\").unbind(\"click\", test);
5、index()现在可用于检索一个jQuery对像在集合中的索引
var test = $(\"div.test\");
$(\"div\").index( test ) == 3
6、makeArray()可以把任何对像转换为数组
jQuery.makeArray( document.getElementsByTagName(\"div\") )
// => [ div, div, div ]
jQuery.makeArray( true )
// => [ true ]
jQuery.makeArray()
// => []
7、beforeSend 的使用可以在ajax调用之前处理一些代码来决定是否进行ajax调用
$.ajax({
beforeSend: function(){
return $(\"#input\").val() == \"\";
},
url: \"test.php\"
});
8、公开速度对像,可以通过更改jQuery.fx.speeds对像来对覆盖默认值,也可以新添自已的速度常数。
jQuery.fx.speeds.slow = 1000;
$(\"#test\").slideDown(\"slow\");
订阅:
博文 (Atom)
