正在加载……
优化PHP代码的40条建议
Posted in LAMP on February 2, 2008 / 评论(0) »
1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10.函数代替正则表达式完成相同功能。

11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14.用@屏蔽错误消息的做法非常低效。

15.打开apache的mod_deflate模块。

16.数据库连接当使用完毕时应关掉。

17.$row[‘id’]的效率是$row[id]的7倍。

18.错误消息代价昂贵。

19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21.递增一个全局变量要比递增一个局部变量慢2倍。

22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26.派生类中的方法运行起来要快于在基类中定义的同样的方法。

27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) < 5) { echo "Foo is too short"; }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo "Foo is too short"; }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34. 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它 们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变 量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不 是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35.并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36.并非要用类实现所有的数据结构,数组也很有用。

37.不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38.当你需要时,你总能把代码分解成方法。

39.尽量采用大量的PHP内置函数。

40.如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

41.评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

42.mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

43.另一篇优化PHP的精彩文章,由John Lim撰写。
什么是五险一金?
Posted in 天下杂谈 on February 2, 2008 / 评论(0) »
                       问:什么是五险一金?  
答:“五险一金”讲的是五种保险,包括养老保险、医疗保险、失业保险、工伤保险和生育保险;“一金”指的是住房公积金。  
其中养老保险、医疗保险和失业保险,这三种险是由企业和个人共同缴纳的保费,工伤保险和生育保险完全是由企业承担的。个人不需要缴纳。这里要注意的是“五险”是法定的,而“一金”不是法定的。  

问:“五险一金”的缴费比例是什么?
答:目前北京养老保险缴费比例:单位20%(其中17%划入统筹基金,3%划入个人帐户),个人8%(全部划入个人帐户);医疗保险缴费比例:单位10%,个人2%+3元。
失业保险缴费比例:单位1.5%,个人0.5%;工伤保险根据单位被划分的行业范围来确定它的工伤费率;生育保险缴费比例:单位0.8%,个人不交钱。
公积金缴费比例: 根据企业的实际情况,选择住房公积金缴费比例。但原则上最高缴费额不得超过北京市职工平均工资300%的10%。
统筹基金即:在养老保险制度从国家—单位制逐渐向国家—社会制转变的过程中需要国家统筹,以解决经济发展不平衡及人口老龄化等问题。
(1)以企业缴费为主建立社会统筹基金;(2)由职工和企业缴费为主建立个人帐户;(3)政府负担养老保险基金的管理费用。这种社会统筹和个人帐 户相结合的半基金制有利于应付中国人口老龄化危机,逐渐分散旧制度到新制度的转轨成本,逐步实现由企业养老保险制度到个人养老保险制度的转变。
四险一金的缴纳额度每个地区的规定都不同,基数是以工资总额为基数。有的企业在发放时有基本工资,有相关一些补贴,但有的企业在缴纳时,只是基本工资,这是违反法律规定的。具体比例要向当地的劳动部门去咨询。
关于养老保险、失业保险和医疗保险的支取,是在法定允许的情况下才可以领取,是由设保登记部门来发放,比如“养老保险,要达到法定的年龄才可以, 失业保险金的领取也是要具备条件,比如你到户口所在地的街道办事处办理失业证明,同时又办了求职证,就是指你失业以后还必须有求职的意愿,这样的条件才可 以领取。
如果失业之后你不想工作,那么就不能给你发保险金。另外,养老金和失业金是不能同时享受的。  

问:试用期内是否享有保险?
答:在试用期内也应该有享受保险,因为试用期是合同期的一个组成部分,它不是隔离在合同期之外的。所以在试用期内也应该上保险。另外,企业给员工 上保险是一个法定的义务,不取决于当事人的意思或自愿与否,即使员工表示不需要交保险也不行,而且商业保险不能替代社会保险。养老保险的享受待遇。
累计缴纳养老保险15年以上,并达到法定退休年龄,可以享受养老保险待遇:
1、按月领取按规定计发的基本养老金,直至死亡。
基本养老金的计算公式如下:
基本养老金=基础养老金+个人账户养老金+过渡性养老金=退休前一年全市职工月平均工资×20%(缴费年限不满15年的按15%)+个人账户本息和÷120+指数化月平均缴费工资×1997年底前缴费年限×1.4%。
2、死亡待遇。(1)丧葬费(2)一次性抚恤费(3)符合供养条件的直系亲属生活困难补助费,按月发放,直至供养直系亲属死亡。
注意:养老保险应尽量连续缴纳,根据有关文件规定,凡企业或被保险人间断缴纳基本养老保险费的(失业人员领取失业保险金期间或按有关规定不缴费的 人员除外),被保险人符合国家规定的养老条件,计算基本养老金时,其基础性养老金的计算基数,按累计间断的缴费时间逐年前推至相应年度上一年的本市职工平 均工资计算(累计间断的缴费时间,按每满12个月为一个间断缴费年度计算,不满12个月不计算)

举例来说吧:
如果你2020年退休,正常你的基础养老金是2019年的社会平均工资×20%,但是如果你在退休之前养老保险中断了30个月,就是中断了2.5年,按2年算,你的基础养老金就是2017年社会平均工资×20%

问:参加医疗保险享受哪些待遇?
答:1、门、急诊医疗费用。在职职工年度内(1月1日-12月31日)符合基本医疗保险规定范围的医疗费累计超过2000元以上部分;
2、结算比例。合同期内派遣人员2000元以上部分报销50%,个人自付50%;在一个年度内累计支付派遣人员门、急诊报销最高数额为2万元。
3、参保人员要妥善保管好在定点医院就诊的门诊医疗单据(含大额以下部分的收据、处方底方等),作为医疗费用报销凭证;
4、三种特殊病的门诊就医:参保人员患恶性肿瘤放射治疗和化学治疗、肾透析、肾移植后服抗排异药需在门诊就医时,由参保人就医的二、三级定点医院 开据”疾病诊断证明”,并填写《北京市医疗保险特殊病种申报审批表》,报区医保中心审批备案。这三种特殊病的门诊就医及取药仅限在批准就诊的定点医院,不 能到定点零售药店购买。发生的医疗费符合门诊特殊病规定范围的,参照住院进行结算。
5、住院医疗
●住院押金:符合住院条件的参保人员,在收入住院时,医院收取参保人员部分押金,押金数额由医院根据病情按比例确定。如被派遣人员单位和参保人员未能按时足额缴纳医疗保险费的,住院押金由派遣人员个人全额垫付。
●结算周期:参保人员住院治疗每90天为一个结算周期:不超过90天的,每次住院为一个结算周期。
●恶性肿瘤患者门诊放射治疗和化学治疗、肾透析、肾移植后服抗排异药、患有精神病需常年住院的患者其发生的医疗费用每360天为一个结算周期。
●参保人员在定点的社区卫生服务中心(站)的家庭病床治疗发生的医疗费用,每90天为一个结算周期。
●参保人员出院或阶段治疗结束时,需由派遣人员个人先与医院结清应由派遣人员个人自费和自付的费用,应由基本医疗保险统筹基金和大额医疗互助资金支付的医疗费用,由医院向医保中心申报审核、结算。
●参保人员住院治疗,符合基本医疗保险规定范围的医疗费的结算,设定基本医疗统筹基金支付起付线和最高支付额。
●起付线第一次住院为1300元,以后住院为650元,最高支付限额为5万元;超过最高支付上限的(不含起付标准以下以及派遣人员个人负担部分)大额医疗费用互助。
资金支付70%,派遣人员个人负担30%。在一个年度内最高支付10万元。住院费用的结算标准,在一个结算周期内按医院等级和费用数额采取分段计算、累加支付的办法。(各项比例有调整时,按新的标准执行)
注意:非因公交通事故,医保是免责的!

问:参加失业保险将能享受待遇?
答:失业保险连续缴纳一年以上,档案退回街道后。可以在街道享受失业保险待遇。
1.失业保险金:是指失业保险经办机构按规定支付给符合条件的失业人员的基本生活费用,它是最主要的失业保险待遇。失业保险待遇根据北京市相关文件执行。
2.领取失业保险金期间的医疗补助金:是指支付给失业人员领取失业保险金期间发生的医疗费用的补助。根据北京市有关政策法规执行。
3.领取失业保险金期间死亡的失业人员的丧葬补助金和其供养的配偶、直系亲属的抚恤金按有关规定执行。

问:参加工伤保险享受哪些待遇?
答:在合同期内不幸发生意外,需向企业索取情况说明,并加盖企业公章,尽快(最好在三个工作日内)申请工伤认定并需提供下列材料。
1、初次治疗诊断书或住院病历。
2、职业病诊断证明(原件、复印件各一份)。  
3、交通事故需提供交通大队的事故裁决书或交通部门的交通事故证明。
4、身份证复印件。
5、有效期内的劳动合同原件。

问:参加生育保险享受哪些待遇?
答:可以报销与生育有关费用。报销范围包括,生育津贴、生育医疗费用、计划生育手术医疗费用、国家和本市规定的其他与生育有关的费用。
生育津贴按照女职工本人生育当月的缴费基数除以30再乘以产假天数计算。生育津贴为女职工产假期间的工资,生育津贴低于本人工资标准的,差额部分由企业补足。
生育医疗费用包括女职工因怀孕、生育发生的医疗检查费、接生费、手术费、住院费和药品费。计划生育手术医疗费用包括职工因计划生育发生的医疗费用。
现在要求,医保缴够20年,养老交够15年才有资格领养老金和享受退休后的医保报销。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]