Насколько в действительности возрастает нагрузка, если писать код, разбивая все на отдельные действия?
Когда вы что-то пишете, нагрузку следует считать не только на железо, но и на разработчике.
В подавляющем большинстве случаев, разработка и поддержка - это те задачи, которые мастшабируются гораздо сложнее, чем железо.
В подавляющем большинстве случаев, железо даже не обязательно масштабировать - его просто хватает.
Поэтому в подавляющем большинстве случаев, читабельность кода - важнее, чем производительность.
А там где производительность будет важна - всегда можно будет сделать перфоманс анализ, выявить ботлнек и сделать рефакторинг - причем при читабельном коде это будет сделать гораздо проще.
Вы мыслите в правильном русле.... но все еще далеко от совершенства.
каждое действие должно делаться в одном методе (функции для PHP)
Ваш код должен повторять логику алогритма или блок схемы, и там где присутствуют переменные, все выносить в переменные класса по возможности..<?php
// хендлер реализаций
class WaybillHandler
{
	protected $debug	= true;

	protected $db		= null;
	protected $socket	= array();
	protected $structure= array();
	protected $doc		= null;
	protected $crmData	= array();
	
	public function __construct($waybill)
	{
		$this->db = DBPool::me()->getLink();
		$this->doc = $waybill;
		
		self::Handler();
	}
	
	private function Handler()
	{
		$db = $this->db;
		
		// Если реализация не привязана к счету, то ничего не делаем
		if ($this->doc['ДокументОснование']['#type'] != 'jcfg:DocumentRef.СчетНаОплатуПокупателю') {
			return;
		}
		
		$this->structure = Utils1c::prepareStructure($this->doc,'waybill');
		
		// Усли реализация поставлена на удаление, то автоматически будет отменена проводка
		// либо мы вручную убрали проводку, а значит мы должны удалить запись из CRM
		if ($this->doc['Posted'] == false) {
			$this->structure['debug'][] = "Реализация не проведена, делаем попытку удаление данных"." (".__LINE__.")";
			self::deleteWaybillFromCRM();
		} else {
			if (self::isRelatedToOurInvoice()) {
				self::findDataFromCRMforWaybill();
				if (count($this->crmData)) {
					self::deleteWaybillDataOnDeleteInERP();
					self::insertMissingWaybillDataToERP();
					self::compareWaybillDataBetweenCRMandERP();
				} else {
					self::insertWaybillDataOnNewRowInERP();
				}
				self::updateStructureFinally();
			} else {
				$this->structure['debug'][] = "Мы не нашли связь между этой реализацией и счетами в CRM"." (".__LINE__.")";
			}
		}
		if (!$this->debug) {
			$this->structure['debug'] = array();
		}
		$this->socket[] = Driver1c::SOCKET_MARKER.json_encode($this->structure, JSON_UNESCAPED_UNICODE);
		
		new WebSocketClient($this->socket);
		
		return;
	}
}