• 解決済 fongafon

    (@fongafon)


    タームの保存処理を書いていて、ふと思いました。

    方法1と方法2では、早いのはどちらでしょうか?理由も知りたいです。

    <?php
    // タームの登録と、カスタムフィールドの登録
    
    /*
    方法1
    1つのループで処理
    */
    function my_insert_terms( $taxonomy, $term_names ){
    		
    	$drink_ids = [];				
    	foreach( $term_names as $term_name ){
    		
    		// 既存ならそのまま取得
    		$drink_data = term_exists( $term_name, 'drink' ); 
    		
    		// なければ登録して取得
    		if( ! $drink_data ){ 
    			// タームを登録
    			$drink_data = wp_insert_term( $term_name, 'drink' );
    			// カスタムフィールドを登録
    			update_term_meta( $drink_id, 'alcohol', '50%' );	
    		}
    		
    		// タームのIDを取得
    		$drink_ids[] = intval( $drink_data['term_id'] ); 
    	}
    	return $drink_ids;
    }
    
    /*
    方法2
    2つのループで処理
    */
    function my_insert_terms( $taxonomy, $term_names ){
    		
    	$drink_ids = [];				
    	foreach( $term_names as $term_name ){
    		
    		// 既存ならそのまま取得
    		$drink_data = term_exists( $term_name, 'drink' ); 
    		
    		// なければ登録して取得
    		if( ! $drink_data ){ 
    			// タームを登録
    			$drink_data = wp_insert_term( $term_name, 'drink' );
    		}
    		
    		// タームのIDを取得
    		$drink_ids[] = intval( $drink_data['term_id'] ); 
    	}
    	
    	// カスタムフィールドを登録
    	foreach( $drink_ids as $drink_id ){
    		update_term_meta( $drink_id, 'alcohol', '50%' );	
    	}
    	
    	return $drink_ids;
    }
    
    

    方法1の方がループが1回で済む点で早そうですが、しかしターム登録処理のループの中で、そのタームIDを使って別のテーブルであるタームのカスタムフィールドを処理し、またタームを登録して、そのタームIDを使って別のテーブルであるタームのカスタムフィールドを処理し、、という風に、ループの中で二カ所のテーブルを処理しなければならなくなる点で遅いのではないかとも感じました。

    方法2はループが2回ですが、方法1のようにあちこちのテーブルを交互に処理するということなく、タームの登録が終わったら、タームのカスタムフィールドを登録する、という処理になっていて、この点で早そうに思います。

    このあたりはどのように判断できるでしょうか。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    あちこちのオブジェクト(テーブル)に飛んで処理しても、この場合には速度が犠牲になることはありません。

    オブジェクトに対して処理する際に大量のデータをメモリに読み込んでキャッシュしているようなケースでは、連続して処理したほうがキャッシュがそのまま再利用できる可能性があり、連続して同じ処理をした方が早いかもしれません。

    今回はタームやカスタムフィールドアップデートしているだけなので、連続して処理してもそのようなアドバンテージはありません。

    トピック投稿者 fongafon

    (@fongafon)

    なるほど、特にかわりなければ見やすい方法1にした方がよさそうですね。どうもありがとうございました!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「保存処理で早いのはどちらですか?」には新たに返信することはできません。