'Is there a way I can make my script more efficient?

I have created the below script to add a timestamp when a cell equals a specific value. This script repeats for each row but it is not efficient. How can I make this simpler and quicker? Below is an extract of the script, it repeats for each row

function MyFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName('Overview')
  var cell = sheet.getRange('H3').getValue()
  var sent = sheet.getRange('p3').getValue()

  if (cell == "Full" && sent == "") {
    sheet.getRange('p3').setValue(new Date())
  }
  
  else if (cell == "Open" && sent == "") {      
    sheet.getRange('p3').setValue("")
  }
}


Solution 1:[1]

Try using setvalues() method of class range

function MyFunction() {
  const ss = SpreadsheetApp.getActive()
  const sh = ss.getSheetByName('Overview');
  const rg = sh.getDataRange();
  const vs = rg.getValues();
  let vo = vs.map(r => {
    if( r[7] == "Full") r[15]=new Date()
    if( r[7] == "Open") r[15]='';
    return [r[15]];
  });
  sh.getRange(2,16,vo.length,1).setValues(vo);
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Cooper