May 2008 Archives

最近遇到一个棘手的问题:静态化网页使用php为扩展名是否会影响效率?也就是说,如果一个PHP文件中并不包含任何php语句,是否在系统资源占用和执行效率上与html文件相同呢?

问题是这样产生的:

在建站初期,我不知道是出于什么原因考虑,决定将所有的内容页都使用PHP扩展名,当时也许是考虑到今后增加session、或内嵌广告可统一管理,不需要重新进行全站building吧,总之就遗留下这一历史问题。

然而随着网站的不断更新,我发觉使用php没有太大的必要,即便全站使用html也足够我的需求。而此时我月来月关心起CPU以及内存资源的占用了,因为我的虚拟主机提供商有CPU资源限制、而我自己的服务器又没有足够的内存,这时候带宽并不是瓶颈,瓶颈来自于硬件。

考虑创建出来的所有PHP都是纯静态的,里面不包含任何PHP语句,我猜测是不是不会调用PHP解释器?或者即便调用了、对系统的资源占用也没有太大的影响?

测试数据:

在本地架设了一个干净的系统,安装上Apache、PHP、并创建了两个文件,内容一样,分别为test.html和test.php;此时用AB压测得到一下数据:

一、TEST.HTML
Concurrency Level:      300
Time taken for tests:   62.171875 seconds
Complete requests:      30000
Failed requests:        0
Write errors:           0
Total transferred:      10590000 bytes
HTML transferred:       2970000 bytes
Requests per second:    482.53 [#/sec] (mean)
Time per request:       621.719 [ms] (mean)
Time per request:       2.072 [ms] (mean, across all concurrent requests)
Transfer rate:          166.33 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1  28.6      0     656
Processing:    78  615 238.9    640    1625
Waiting:       15  508 255.7    546    1328
Total:         78  617 239.2    640    1625

二、TEST.PHP
Concurrency Level:      300
Time taken for tests:   82.937500 seconds
Complete requests:      30000
Failed requests:        0
Write errors:           0
Total transferred:      8520000 bytes
HTML transferred:       2970000 bytes
Requests per second:    361.72 [#/sec] (mean)
Time per request:       829.375 [ms] (mean)
Time per request:       2.765 [ms] (mean, across all concurrent requests)
Transfer rate:          100.32 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2  33.1      0     656
Processing:   109  824 297.5    703    3078
Waiting:       15  662 278.3    562    3046
Total:        109  827 297.8    703    3078

而观察到的CPU情况也不太乐观(附图如下);而apache的线程池在短时间内不会释放,因而内存影响不明显。

html vs php.jpg

结论:

我挺郁闷的,真不知道当初搭建网站的时候是怎么想的。虽然说上述区别并不影响真正的应用,毕竟在真正的网络部署中,前端还会部署一台缓冲服务器,然而对于我现在的服务器部署结构和硬件资源而言,似乎还是受到了一定程度的影响。

经过权衡,我决定继续使用php为程序扩展名,等以后有机会,放个squid在前面吧,希望在那之前,不会遇到瓶颈。

UPDATE:

烦躁的事情不是产生于我自身,而是虚拟主机提供商的服务器在压力较大时、会经常出现500错误,也就是说我个人的程序再优化也于事无补、只要使用PHP程序,就会受到邻居们的影响,尽快将全站转移回自己的服务器才是稳妥之策。

六月网站开发备忘录

| | Comments (0) | TrackBacks (0)
当我创建了一个又一个网站之后,我发现其中有一个网站是极具发展潜力的,然而正是这个极具潜力的网站,却也恰恰是我最没有用心维护和经营的,因而我决定六月份的主要工作就是将那个网站彻底的、全面的完善一遍,并在七月份让那它成为一个真正优秀的网站。

其实早在三个月以前我就已经发现了这个具有极高价值的网站的存在,然而因为其原有部署和结构并不令我满意,所以很难下手进行改进。而今我想明白了,任何网站都不能够停滞不前,既然以前的架构不科学,就重新增设新的架构、并努力完善原有架构。总不能因为其基础不健全就忽略它的存在吧?

这次新架构的规划决定不使用任何现有的系统,纯粹自己编写全站的每一行代码,确保网站可持续完善、可自主更新。工作量不小,先在这里记下一笔,带真正开工时,会在这里开设一个专栏用于全程记录。
一、国内绝大多数网站的验证码是没有作用的:

国内很多网站的验证码生成算法只是创建一个位图区、然后随机出来4~6位字符贴进去、再随机增加一些噪点,这样生成的验证图形完全没有意义,只要将图形转换成位图、去噪、指纹对比,就可以很快的计算出其内容。

二、对SESSION机制不理解导致验证码无效:

有几个网站(实际上是很多的),看上去似乎有验证码机制,实际上只要手工将第一个验证码输入,然后其SESSION变量会始终存在,也就是说在很长的时间内(SESSION不过期),都可以不输入验证码进行各种操作。

上面这句话可能阅读起来有点儿费劲,简单的举个例子:国内某免费电子邮箱服务商,只要在注册第一个帐号的时候记录下SESSION在本地相对应的COOKIE文件,就可以利用这个COOKIE文件不断的提交、大量注册帐号。

三、验证码生成是效率瓶颈:

即便解决了上述两点问题,也就是说可生成随机扭曲的验证图形,也只是防君子的多余设计。作恶者既可利用指纹特征突破验证防护、也可针对验证码生成单元进行攻击、导致服务器资源消耗。

所以,基于上述三点考虑,我个人就很不看好验证码了,因为它既不能真正杜绝垃圾信息、又增加了服务器资源开销、还降低了用户体验。

网络上相关的文章标题:
《Del.icio.us Captcha Cracked》
《reCAPTCHA防垃圾的同时还给OCR贡献一份力量》
曾先后和希林、小寒、热海等人讨论交流过"网站原创性内容建设"的话题,因为重复性的话说的太多了,所以决定整理出来一份文档,若日后再有需要,可直接调用这份文档给朋友们看。

首先说一下搜索结果的排名,根据Google的资料可以知道,网站的佩奇值(PR值)越高,网站的搜索结果排名越靠前,因而如果有一个非常高的佩奇值,即便网站内容全部转载,也可以获得非常好的排名和流量。

但是对于一个新生网站,不可能拥有高佩奇值,这个时候网站内容的原创性就显得尤为重要了。

从我的个人经验看,一个名人写100篇原创文章、或者一个非名人写1000篇文章,就可以获得稳定的流量和稳定的广告收入。我曾经原创了上千篇中文文章、我的朋友有人原创过几百篇文章,如此我们都可以获得理想的流量和稳定的收入。

而名人只需要几百篇、几十篇文章即可获得上述效果。还有一些名人,原创上千篇文章,他们的知名度和原创内容量两个因素导致了他们获得更多的流量和收入,甚至可以成为全职Blogger,道理不说自明。

这里埋下一个伏笔,我个人认为,原创文章固然重要,但是原创文章中的"价值"更为重要,所谓的价值我认为就是一些特殊领域的或者关键性的名词,这一点日后有机会再详细讨论。

但是无论几十篇还是上千篇文章,都是在做"专栏",并非做"网站",我知道的最成功的原创专栏每个月可以收入上百万人民币、一般成功的专栏每个月收入近万元人民币、而更多的专栏则只能收入几十或几百元、海量的专栏每月收入微乎其微。

专栏一定是具有原创含量的,与专栏类似的就是BBS,圈子,因而这个时候你可以将上述方式推而广之,做成一个专栏圈子或BBS;带动志同道合的朋友一起来写文章,每人每周写一篇,即便只有50个活跃用户,也可以将网站的原创内容建设起来。

当没有足够多的朋友能够协助进行原创文章建设时,可以设计一种付费模式,例如帮你写一篇文章,可以收入1元劳务费,满足100元支付。按照这样的方法,你拉动50个人来有偿服务,当他们每人写了10篇文章时,你的网站已经有了500篇原创文章,如果你能够顺利的发展并收入广告费,就可以用广告费支付给他们。

这个模式在国外比较流行,例如myLot,每写一篇文章收入0.02~0.10美元,满5美元支付,一旦形成了正循环,就可以确保网站内原创内容非常多、赚取广告费的再支付给进行了原创的人,如此形成一个正循环。国内早期有一些网站也是这样发展起来的,可以算是空手套白狼的典范。

如果你不想自己原创,不想让朋友原创,不想将现金流运作参与进来,那么剩下的方法只有三个了:

1、创意一个非常有价值的工具,用户在使用工具的时候自动形成原创内容;
2、用讨巧的方法创建原创内容;
3、用讨巧并且具有一定技术含量的方法创建原创内容。

分别论述如下:

1、创意一个非常有价值的工具,用户在使用工具的时候自动形成原创内容;

搜索引擎就是一个工具,他的搜索结果页面就是原创内容页面;我那个查询生肖的网站就是一个工具,根据生日计算出来的生肖和性格就是原创内容;算命的网站就是工具、百度的知道就是工具、求职网站是工具(51job、中华英才网)、分类信息网站(58同城、赶集网)、校友录(ChinaREN、校内)、新生的Digg、抓虾、爱情墙都属于这个思路......

你会发现,用户会用到这些工具的实用功能,而在用户使用了这些工具的同时、也创造了原创的内容。举例说明,你可以利用求职网站找到工作,求职网站利用找工作的人投递的简历创建了原创的个人信息、个人简历页面,这个例子已经说明白了吧?

2、用讨巧的方法创建原创内容;

这里说一个灰帽(似乎是黑帽)技术,有人将繁体中文内容直接通过工具翻译成简体中文内容、还有将英文内容通过工具自动翻译成中文内容,或者将图片内容转换成文字内容......

这样都可以生成原创的内容。为什么说这是讨巧呢?因为这其中多数是牵扯到版权的,同时翻译效果也不是非常好的,生成的很可能都是垃圾信息、同时还会牵扯到版权侵犯等法律话题。

翻译那个我暂时忽略不说了,说两件我一直想做却犹豫的事情:1、我想将《老照片》里的图片当作资料放在我的博客上,但是这侵犯了版权;2、我想直接做人工的《老照片》全文英文翻译,同样侵犯版权。虽然我不去讨巧,但依然侵犯版权。

讨巧怎么做呢?很容易,用数码相机拍摄下来《老照片》的内容,然后用OCT技术直接就能将其中的文字内容转换成文字、然后再用自动中译英工具,就出来了"原创的英文内容";如果忽略最后一步中译英,"原创的中文内容"也已经出来了。

3、用讨巧并且具有一定技术含量的方法创建原创内容。

这个是一个非常大的话题了,简单的说几句,你如果理解不了,就理解不了吧,因为这个技术的逻辑我也还没有完全建立起来呢,只是最近的一个构想。方法就是做信息重组,我用一个简单的例子给你说一下:

如果我想做一个原创内容的"时尚网站",我可以设计一个"时尚服饰搭配学"的栏目,这个栏目里面的文章都由程序自动原创出来。怎么原创呢?

首先,创建几套模板,例如冬季服饰由帽子、上衣、手包、裤子、鞋子、修饰手镯、修饰披肩构成、夏季服饰由上衣、手包、裙子、丝袜、鞋子、修饰太阳镜、修饰手镯、修饰项链、修饰腰带构成,那么我就可以随机的到淘宝去搜索出来一套随机搭配方案,将搜索出来的商品的"商品信息"当作文章段落,再经过一次全文重组,就出来了一个配图配文的原创文章。

按照这个方法,我可以利用不同的多套模板、不同的商品信息随机出各种时尚服饰搭配,并且每一篇文章里面的内容、关键字、风格都不一样,因为每一个商品的名字和商品的介绍都不一样。

小结来说,这个技术就是将淘宝上卖东西的人对其商品的介绍当作原材料,经过一次加工,变成一篇原创文章。

好了,最后的总结是:

1、纯粹自己原创;
2、找朋友原创;
3、建立一个兴趣圈子或BBS;
4、有偿原创;
5、采集文章(这不是原创);
6、采集文章并经过翻译;
7、给用户一个工具,用户在使用过程中自动的创建内容;
8、寻找有价值的信息源,改变信息源的形态,重组信息片段,变成一篇新的原创文章。
最初接触互联网编程,就是从Perl开始的,那时候就使用过MT搭建个人的Blog,后来因为工作需要,编程语言渐渐的变成了PHP,自己的Blog也就使用Word Press搭建了。我从没有比较过WP和MT之间的优劣,这本身也不需要进行任何的比较,只要环境允许、需求允许,使用哪一个都是可以的。

在经过了长时间的英文Blogger生涯之后,我又有写中文的冲动了,因为学习过程中的收获太多,而英文表述能力有限,无法将学习中的收获全部Blogging出来,所以经过两天的权衡,决定开设这个中文板块,用于记录自己的学习、生活和平日里朋友们的沟通。

刚刚在上传并安装MT的时候,遇到了不少的问题,主要是服务器连接超时、数据传输缓慢、前台页面无法打开......主要原因来自于两方面:1、这个服务器放置在国外、国内访问本身就慢;2、服务器上的用户太多,抢占资源情况严重;

来自于第一个方面的原因是无法人为排出的,而第二个原因则可以通过静态化、优化等方法,尽量使自己的程序对系统资源的占用率降低,从而得到一定程度上的缓解。

前段时间使用Yahoo的虚拟主机,现在使用的HostMonster主机,都存在第二个问题,经常性的出现500错误或链接中断,对于我的英文Blog而言,暂时没有解决办法,而这个中文MT,从搭建开始就全文纯静态处理,避开解释器的调用,应该可以有所缓解吧。

写程序的人可能都比较喜欢自己写出来的东西,不爱使用别人的东西,至少以前的我是这个样子,什么程序、什么功能,都要从Hello world写起。后来我想开了,既然有优秀的程序,就"拿来主义",快捷方便,善用资源才能提高效率。

I just finished installing Movable Type 4!

| | Comments (1)
Welcome to my new blog powered by Movable Type. This is the first post on my blog and was created for me automatically when I finished the installation process. But that is ok, because I will soon be creating posts of my own!



友情链接 自然乱卷的博客 IO Language 白卉子的个人博客 孟子叶的个人博客 于新博的个人博客 周文艺 S9600初级程序员论坛 又听小楼风雨声 尚宁的英文Blog Mr.Shang 歪西网-石景山地区门户 卡客族