|
发表于 2007-9-30 12:37:37
|
显示全部楼层
混了PHP也有三年时间了,现在看了看楼主提到的那些高级特性,我突然发现原来PHP一样也不支持(除了面向对象)
数据库连接池 --- PHP没有,只有一个持久链接(而这个还被Web Server 的线程影响可能导致不太稳定)
大型站点 --------- 分布式构架 PHP 没有,自己找方案解决
对象缓存、页面缓存 --------- 自己解决,无内置方案
内置XML支持 --------- 这点应该算是PHP的一点优点了(PHP5)
同样,我也搞了一旦时间的Java了,发现Java其实也不过如此,其中的内容(声明:我只看过Hibernate 和 Spring)除了名字比较拽之外没有什么奇特之处(PHP没有实现的原因只是因为PHP无法长期驻留内存导致采用那么多模式效率受影响)
不过就我的经验来说,即使Java采用了那么多好处,效率仍旧不行,日常运行速度远比不上PHP
一下是我以前做的一个测试:
系统平台:Windos Xp Sp2
CPU: 赛扬 M 1.60G
RAM: 512M
Server: Apache2.24 & PHP5.23& eaccelerator 0.95 (PHP)
Tomcat 5.50-17 (Java)
测试: ab -c 50 -n 1000
代码一:
PHP制作一个计数器:
<?php
class Counter
{
const SAVE_PATH = './a';
private $_counter = 0;
public function __construct()
{
$this->_counter = (int)file_get_contents(self::SAVE_PATH);
$this->_counter ++;
}
public function getCount()
{
return $this->_counter;
}
public function __destruct()
{
file_put_contents(dirname(__FILE__) . '/' . self::SAVE_PATH, $this->_counter);
}
}
$cnt = new Counter();
echo '你是第 ' . $cnt->getCount() . ' 个无聊份子';
?>
测试结果:
Requests per second: 239.70 [#/sec] (mean)
Java的计数器(Servlet)
/*
* CServlet.java
*
* Created on 2007年8月28日, 下午11:36
*/
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
* @author 西门吹水
* @version
*/
public class CServlet extends HttpServlet {
private int i = 0;
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
i++;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet CServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("你是第 " + i + "个无聊份子");
out.println("</body>");
out.println("</html>");
out.close();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "这只是一个无聊的测试";
}
// </editor-fold>
}
测试结果:
Requests per second: 33.20 [#/sec] (mean)
Java的计数器(JSP + Bean)
JSP源码:
<%@page c%>
<%@page pageEncoding="UTF-8"%>
<jsp:useBean id="cnt" scope="application" class="counter.Counter" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" c>
<title>Counter 测试</title>
</head>
<body>
<div style="text-align:center;">你是第 <%=cnt.getCount()%> 个无聊份子</div>
</body>
</html>
Bean源码:
/*
* Counter.java
*
* Created on 2007年8月11日, 下午5:53
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package counter;
/**
*
* @author 西门吹水
*/
public class Counter {
public int getCount()
{
count++;
return count;
}
public void setCount(int count)
{
this.count = count;
}
/** Creates a new instance of Counter */
public Counter() {
}
private int count = 0;
}
测试结果
Requests per second: 18.08 [#/sec] (mean) |
|