面对对象和速度如何取舍? 1、你在循环中实例化User就已经很不公平了2、User把传入的数组拆开成3个属性,这一点在过程化程序中没有体现出来3、在循环中直接使用echo将造成很大误差 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、你在循环中实例化User就已经很不公平了2、User把传入的数组拆开成3个属性,这一点在过程化程序中没有体现出来3、在循环中直接使用echo将造成很大误差-------------------------------------------------修改test.php<? require_once("User.class.php"); require_once("ArrayList.class.php"); $list = new ArrayList; $user = new User; for ($i = 0; $i < 100; $i++) { $user->fill(array("id" => $i,"userName" => "qqqqq", "password" => "qqqqq")); $list->add($user); } for ($i = 0; $i < $list->size(); $i++) { $user = $list->get($i); }?>test2.php<? require_once("User.class.php"); require_once("ArrayList.class.php"); $list = array(); for ($i = 0; $i < 100; $i++) { $user['id'] = $i; $user['userName'] = "qqqqq"; $user['password'] = "qqqqq"; $list[$i] = $user; } for ($i = 0; $i < count($list); $i++) { $user = $list[$i]; }?>test.php :98732test2.php:71222相差:27510我没作过大的网站,这个差距可以不考虑吗? 有人说我不要用java的东西往php上套,这个说法有道理吗 回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:125 2005-12-28 13:16:00 得分: 0 不要为了面向对象而使用对象, ----------------------------------就上面的例子您认为那种方式比较合理 WEB系统,安全+速度 是最重要的 对不起!我说的第一条是错误的,确实是要要计算实例化类的时间不过在fill方法中的$this->setId($array['id']);....应该直接向属性赋值而不应该调用另外的方法否则面向过程的代码$user['id'] = $i;也应通过函数赋值这样才公允当然使用面向过程要比面向对象要少一些执行时间的但是面向对象可以带来比面向过程更多的好处,你也不能视而不见的 实验结果:分别连续访问10000次用时:test.php 117049豪秒test2.php 72354豪秒我对这个结果持怀疑态度,老问题了,衡量页面性能不是光靠执行时间衡量,要靠qps(每秒能处理的请求数)你有没有考虑并发,有没有测量服务器内存和cpu占用?磁盘负载?“有人说我不要用java的东西往php上套,这个说法有道理吗”有道理的,php代码一般是作为最终代码运行的,没有别的工具再为它优化了(别跟我提zend)java的执行过程复杂一些,其中应该有优化的步骤 我测试的结果:(因为机子慢,循环次数改为1000)PHP Version 5.0.5Apache 2.0windows 2000 Servertest2.php1 耗时:396872 耗时:404693 耗时:364844 耗时:377965 耗时:36594test.php1 耗时:467032 耗时:449223 耗时:461404 耗时:456725 耗时:45906使用OOP做程序是感觉有些慢但做网站用全静态就无所谓了,牺牲一些效率,换来更好的可扩展性,代码复用,一般是值得的做大型应用,OOP可以降低复杂度使用OOP是趋势,PHP5对它有增强 OO的优点很明显。速度上看你怎么要求了。决不要为了OO而OO。 很简单的php处理字符串的问题 关于php一个重大问题~~高手入 正则问题 这个正则怎么解析 怎么样写cookie? 关于php_ffi.dll 怎样在页面中取出注册session变量的值 FORM提交后变量问题 PHP+mysql的一个问题 用php-cli后台运行报错,但是在浏览器中运行却正常,怎么解决? session文件产生太多,怎么办? 如何判断给用户发送的邮件是否接收到?
2、User把传入的数组拆开成3个属性,这一点在过程化程序中没有体现出来
3、在循环中直接使用echo将造成很大误差-------------------------------------------------
修改
test.php
<?
require_once("User.class.php");
require_once("ArrayList.class.php"); $list = new ArrayList;
$user = new User;
for ($i = 0; $i < 100; $i++) {
$user->fill(array("id" => $i,"userName" => "qqqqq", "password" => "qqqqq"));
$list->add($user);
}
for ($i = 0; $i < $list->size(); $i++) {
$user = $list->get($i);
}
?>test2.php
<?
require_once("User.class.php");
require_once("ArrayList.class.php"); $list = array();
for ($i = 0; $i < 100; $i++) {
$user['id'] = $i;
$user['userName'] = "qqqqq";
$user['password'] = "qqqqq";
$list[$i] = $user;
}
for ($i = 0; $i < count($list); $i++) {
$user = $list[$i];
}
?>
test.php :98732
test2.php:71222
相差:27510我没作过大的网站,这个差距可以不考虑吗?
不要为了面向对象而使用对象,
----------------------------------就上面的例子您认为那种方式比较合理
$this->setId($array['id']);
....
应该直接向属性赋值而不应该调用另外的方法
否则面向过程的代码$user['id'] = $i;也应通过函数赋值
这样才公允当然使用面向过程要比面向对象要少一些执行时间的
但是面向对象可以带来比面向过程更多的好处,你也不能视而不见的
分别连续访问10000次用时:
test.php 117049豪秒
test2.php 72354豪秒我对这个结果持怀疑态度,老问题了,衡量页面性能不是光靠执行时间衡量,要靠qps(每秒能处理的请求数)
你有没有考虑并发,有没有测量服务器内存和cpu占用?磁盘负载?“有人说我不要用java的东西往php上套,这个说法有道理吗”
有道理的,php代码一般是作为最终代码运行的,没有别的工具再为它优化了(别跟我提zend)
java的执行过程复杂一些,其中应该有优化的步骤
Apache 2.0
windows 2000 Servertest2.php
1 耗时:39687
2 耗时:40469
3 耗时:36484
4 耗时:37796
5 耗时:36594test.php
1 耗时:46703
2 耗时:44922
3 耗时:46140
4 耗时:45672
5 耗时:45906使用OOP做程序是感觉有些慢
但做网站用全静态就无所谓了,
牺牲一些效率,换来更好的可扩展性,代码复用,一般是值得的做大型应用,OOP可以降低复杂度
使用OOP是趋势,PHP5对它有增强