Drupal 只更新欄位但不更新Node的方法及其執行速度比較

共有四種作法,為了方便比較,第二種作法也會更新Node本身

1. 直接操作 Node 物件

2.利用entity_metadata_wrapper

3. 方法2+方法1

4. 利用entity_create+entity_metadata_wrapper

 

執行速度:1 ≒ 4 >> 3 ≒ 2

1:0.0106489ms

2:0.0478260ms

3:0.0379638ms

4:0.0052890ms

1大概用了4的一倍時間,3則大概用了1的3~4倍時間,2則比3多一點

跑迴圈測試後發現,1還是比較快,不過4只慢一點,但相對來說比較好開發,所以首選應該還是4

不過相對而言,2需要寫的程式碼最少,4要寫程式的最多

※ 比較基礎:只更新一個整數欄位,且該內容類型中有6個欄位

方法1:

$node = new stdClass();
$node->nid = $nid;          // node id
$node->type = $content_type;  // content type
$node->field_name[LANGUAGE_NONE][0]['value'] = $value;
field_attach_update('node', $node);

方法2:

$ew = entity_metadata_wrapper('node', $nid);
$ew->field_name->set($value);
$ew->save();

方法3:

$ew = entity_metadata_wrapper('node', $nid);
$ew->field_amont->set($value);
$node=$ew->value();
field_attach_update('node', $node);

方法4:

$e = entity_create('node', array(
    'nid' => $nid,
    'type' => $content_type,
  ));
$ew = entity_metadata_wrapper('node', $e);
$ew->field_name->set($value);
$node = $ew->value();
field_attach_update('node', $node);