静的データの読み込みの最適化

PHPのプログラムへの大量の静的データの読み込みを最適化する方法についての小さなhabratopik。



事前に計算されたデータをプログラムにロードして、2つのポイント間のパスを見つける際に問題が発生しました(どちらでも)。 問題が非常に強く発生したため、計算されたデータの読み込みが後続のすべての計算の90%を占め始めました。

私のデータは、およそ200〜200個のセルで構成される2次元配列です。



私はunserialize、json_decodeをテストしています



文字キー付き

json_decode-0.080秒

シリアライズ解除-0.072秒



デジタルキーのみ

json_decode-0.041秒(170kb)

シリアル化解除-0.037秒(500kb)



ルート自体が0.0004〜0.0012秒検索されます:)

つまり、他のことを考え出す必要があります。



または、データを選択してダウンロードできます。 しかし、私にとってこのオプションは適合しませんでした(特定の条件下ではすべてのデータを使用する必要があるため)。



そして、evalを使用して生成されたPHP配列を使用する場合は?



評価-0.086秒

ダメです :(



しかし、データが変更されたときに生成されるevalではなく、生成されたPHPファイルをロードできないのはなぜですか?

理論的には、データをより速くロードする必要があります。

その結果、次のコードが生まれました。

define( "PREDEFINED_PATH" , "path.inc" );



include_once(PREDEFINED_PATH);



function create(){

$data=array();



// 2D $data

// ...



file_put_contents(PREDEFINED_PATH, "<?function return_path(){return " .var_export($data,TRUE). ";}?>" );



}



function use(){

//



//$path=serialize($p);

//$path=json_decode($p);

$path=return_path();

}







// path.inc

<? function return_path(){ return array(1=>array(1=>array(1=>2,2=>12,3=>...)));}?>




// return_path








テストでは-0.023秒(640kb)が示されました。

これは、非シリアル化よりも1.6倍高速です。 確かに、それはより多くのスペースを占有します。

ただし、これは修正可能な問題です。たとえば、キー、スペース、および次の行(var_exportを作成する)への移行を保存せずに、手動で保存できます。

唯一のマイナスは、静的データ構造です。



eAccelerator



2番目のマイナス-私たちは別の実験を行っていません-読み込み。

includeは、640 kbのテキストをコードに変換する必要があり、0.37秒かかります。 うわー、それは素晴らしいことではありません。



ここでeAcceleratorが私たちの助けになります:) 2番目以降のインクルードファイルを0.0001に減らしますが、結果の速度には影響しません。



psユーザーTiGR 、建設的な批判に感謝します。



All Articles