json_encode明顯要比serialize快很多?RUSURE?$str='但,問題就來了,經(jīng)過1W調(diào)數(shù)據(jù)測試,若$data=array();中包含中文漢字通過json_encode存入memcached后,明顯要比直接存入array的速度要慢很多很多。';functionmicrotime_float(){list($usec,$sec)=explode("",microtime());return((float)$usec+(float)$sec);}$time_start=microtime_float();for($i=2000000;$i>0;$i--)serialize($str);printf("serialize:in%fseconds\n",microtime_float()-$time_start);$time_start=microtime_float();for($i=2000000;$i>0;$i--)json_encode($str);printf("json_encode:in%fseconds\n",microtime_float()-$time_start);Run:serialize:in0.928114secondsjson_encode:in4.315019seconds發(fā)現(xiàn)了上面的結(jié)論,下面可以直接被忽略了,僅供參考。@iCode的說法可能是一部分的原因;更重要的是,無論是serialize還是json_encode,肯定都是O(n)的,只是serialize的常數(shù)可能比json_encode大;然而,由于serialize是在memcache內(nèi)部調(diào)用的,是直接了當(dāng)?shù)剞D(zhuǎn)換,存到sendbuf里,所以可以省掉相當(dāng)?shù)霓D(zhuǎn)換開銷://memcache_binary_protocol.c+416status=mmc_pack_value(pool,&(request->sendbuf),value,&flagsTSRMLS_CC);=>default:php_var_serialize(&(buffer->value),&value_copy_ptr,&value_hashTSRMLS_CC);...;mmc_compress(pool,buffer,buffer->value.c+prev_len,buffer->value.len-prev_len,flags,1TSRMLS_CC);而json_encode則不然:必須先分配一塊空間,存進(jìn)去,生成一個(gè)對(duì)應(yīng)的zval對(duì)象,扔回php,再由php交給memcache,然后://memcache_binary_protocol.c+416status=mmc_pack_value(pool,&(request->sendbuf),value,&flagsTSRMLS_CC);=>caseIS_STRING:*flags|=MMC_TYPE_STRING;mmc_compress(pool,buffer,Z_STRVAL_P(value),Z_STRLEN_P(value),flags,0TSRMLS_CC);可以想象,在這樣一個(gè)過程中,使用json_encode的開銷顯著增加了。所以它比直接serialize更差是可以理解的。至于到底該用哪個(gè),說真的,php本來性能就差得很,不用特別在意這個(gè)地方,它往往不太可能會(huì)是性能的瓶頸。如果真的覺得到了性能優(yōu)化要摳這里的時(shí)候(估計(jì)你更可能會(huì)選擇用其他語言重寫,例如python)(或者恭喜你,可以去找投資人了),方法很多,再不濟(jì)至少你可以直接修改memcache的源碼,把php_var_serialize改成json_encode。