最近遇到一个棘手的问题:静态化网页使用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的线程池在短时间内不会释放,因而内存影响不明显。

结论:
我挺郁闷的,真不知道当初搭建网站的时候是怎么想的。虽然说上述区别并不影响真正的应用,毕竟在真正的网络部署中,前端还会部署一台缓冲服务器,然而对于我现在的服务器部署结构和硬件资源而言,似乎还是受到了一定程度的影响。
经过权衡,我决定继续使用php为程序扩展名,等以后有机会,放个squid在前面吧,希望在那之前,不会遇到瓶颈。
UPDATE:
烦躁的事情不是产生于我自身,而是虚拟主机提供商的服务器在压力较大时、会经常出现500错误,也就是说我个人的程序再优化也于事无补、只要使用PHP程序,就会受到邻居们的影响,尽快将全站转移回自己的服务器才是稳妥之策。
问题是这样产生的:
在建站初期,我不知道是出于什么原因考虑,决定将所有的内容页都使用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的线程池在短时间内不会释放,因而内存影响不明显。

结论:
我挺郁闷的,真不知道当初搭建网站的时候是怎么想的。虽然说上述区别并不影响真正的应用,毕竟在真正的网络部署中,前端还会部署一台缓冲服务器,然而对于我现在的服务器部署结构和硬件资源而言,似乎还是受到了一定程度的影响。
经过权衡,我决定继续使用php为程序扩展名,等以后有机会,放个squid在前面吧,希望在那之前,不会遇到瓶颈。
UPDATE:
烦躁的事情不是产生于我自身,而是虚拟主机提供商的服务器在压力较大时、会经常出现500错误,也就是说我个人的程序再优化也于事无补、只要使用PHP程序,就会受到邻居们的影响,尽快将全站转移回自己的服务器才是稳妥之策。
Leave a comment