如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。
当然了,这个测试方法需要在十万级以上次执行,效果才明显。
其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快。
静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而是实例化可以销毁。
测试:
Echo
0.000929 - 0.001255 s (平均 0.001092 seconds)
Print
0.000980 - 0.001396 seconds (平均 0.001188 seconds)
相差8%左右,总体上echo是比较快的。
注意,echo大字符串的时候,如果没有做调整就严重影响性能。使用打开apached的mod_deflate进行压缩或者打开ob_start先将内容放进缓冲区。
傻子都明白的道理。
数组和对象在php特别占内存的,这个由于php的底层的zend引擎引起的,
一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。
特别是在PHP作为后台服务器的系统中,经常会出现内存耗费太大的问题。
对于__开头的函数就命名为魔术函数,此类函数都在特定的条件下初访的。总得来说,有下面几个魔术函数
__construct(),__destruct(),__get(),__set(),__unset(),__call(),__callStatic(),__sleep(),__wakeup(),__toString(),__set_state(),__clone(),__autoload()
其实,如果__autoload不能高效的将类名与实际的磁盘文件(注意,这里指实际的磁盘文件,而不仅仅是文件名)对应起来,系统将不得不做大量的文件是 否存在(需要在每个include path中包含的路径中去寻找)的判断,而判断文件是否存在需要做磁盘I/O操作,众所周知磁盘I/O操作的效率很低,因此这才是使得autoload机制效率降低的原因。
因此,我们在系统设计时,需要定义一套清晰的将类名与实际磁盘文件映射的机制。这个规则越简单越明确,autoload机制的效率就越高。
结论:autoload机制并不是天然的效率低下,只有滥用autoload,设计不好的自动装载函数才会导致其效率的降低.
php mysql 丢失更新问题,搜索整个互联网,很少有讲到,也许和php程序员出身一般都是非科班出身有关系吧。
另外php程序一般都是简单数据,很少有并发一致性问题,所以大家都没有谁专门提出这个问题。
这个问题无法依靠数据库的并发机制进行控制,因为不是一回事。
丢失更新:(Lost Update)
事务T1读取了数据,并执行了一些操作,然后更新数据。事务T2也做相同的事,则T1和T2更新数据时可能会覆盖对方的更新,从而引起错误。
这里的事务不是指的数据库事务。
可以理解成两个不同的客户端。
举例:
在时间T1
PC机1 客户读到一条 message | pc机2 客户读到同一个message
修改 | 修改
时间t2
保存 时间t3
| 保存
=========================
请问这个时候数据库里面应该以谁保存的为准?
=============================
这个问题,只出现在多用户环境,并且多用户修改一个数据库记录。
解决这个问题有两种方式:
方法1, 简单数据,直接用 where 语句,加自己读到的old 数据作为条件,防止其他用户更新了
自己覆盖其更新。
方法2是,复杂数据,用一个integer ,或者longint字段version,控制版本。
每次更新的时候,执行:
update table1 set version=version+1 where version=修改前的version
控制了这个问题,会可能导致后更新的用户操作失败。
处理方式有两种:
直接刷新出最新记录。
提示用户更新失败,手动刷新最新记录。
本文链接:http://www.cnblogs.com/stevenlaz/p/3272790.html,转载请注明。
echo ini_get('display_errors'); //1
//动态修改php.ini配置信息,脚本执行后失效
ini_set('display_errors',0);
echo ini_get('display_errors');//0
//打印所有配置信息
print_r(ini_get_all());
echo ini_get('display_errors'); //1
//动态修改php.ini配置信息,脚本执行后失效
ini_set('display_errors',0);
ini_restore('display_errors');
echo ini_get('display_errors');//1
//来源: http://www.
本文链接:http://www.cnblogs.com/linuxnotes/p/3274069.html,转载请注明。