perf: use arrow functions in hot code paths
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 10 Apr 2023 21:37:47 +0000 (23:37 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 10 Apr 2023 21:37:47 +0000 (23:37 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/ChargingStationWorker.ts
src/charging-station/ocpp/OCPPRequestService.ts

index c720b21980ae6ad2cf9165054a949c122c27061b..4361ab9badd0a6f0e6d80b82f16e62a8fed0a804 100644 (file)
@@ -9,6 +9,27 @@ import type { ChargingStationWorkerData } from '../types';
 import { Utils } from '../utils';
 import { WorkerConstants, type WorkerMessage, WorkerMessageEvents } from '../worker';
 
+/**
+ * Create and start a charging station instance
+ *
+ * @param data - workerData
+ */
+const startChargingStation = (data: ChargingStationWorkerData): void => {
+  const station = new ChargingStation(data.index, data.templateFile);
+  station.start();
+};
+
+/**
+ * Listen messages send by the main thread
+ */
+const addMessageListener = (): void => {
+  parentPort?.on('message', (message: WorkerMessage<ChargingStationWorkerData>) => {
+    if (message.id === WorkerMessageEvents.startWorkerElement) {
+      startChargingStation(message.data);
+    }
+  });
+};
+
 // Conditionally export ThreadWorker instance for pool usage
 export let threadWorker: ThreadWorker;
 if (ChargingStationUtils.workerPoolInUse()) {
@@ -23,24 +44,3 @@ if (ChargingStationUtils.workerPoolInUse()) {
     startChargingStation(workerData as ChargingStationWorkerData);
   }
 }
-
-/**
- * Listen messages send by the main thread
- */
-function addMessageListener(): void {
-  parentPort?.on('message', (message: WorkerMessage<ChargingStationWorkerData>) => {
-    if (message.id === WorkerMessageEvents.startWorkerElement) {
-      startChargingStation(message.data);
-    }
-  });
-}
-
-/**
- * Create and start a charging station instance
- *
- * @param data - workerData
- */
-function startChargingStation(data: ChargingStationWorkerData): void {
-  const station = new ChargingStation(data.index, data.templateFile);
-  station.start();
-}
index 4115eff1144f1c50a91e79f7197632f47fd6e553..e00e954c9bfebe5be9e6dd7c6200182559248d90 100644 (file)
@@ -230,6 +230,62 @@ export abstract class OCPPRequestService {
       // Send a message through wsConnection
       return Utils.promiseWithTimeout(
         new Promise((resolve, reject) => {
+          /**
+           * Function that will receive the request's response
+           *
+           * @param payload -
+           * @param requestPayload -
+           */
+          const responseCallback = (payload: JsonType, requestPayload: JsonType): void => {
+            if (chargingStation.getEnableStatistics() === true) {
+              chargingStation.performanceStatistics?.addRequestStatistic(
+                commandName,
+                MessageType.CALL_RESULT_MESSAGE
+              );
+            }
+            // Handle the request's response
+            self.ocppResponseService
+              .responseHandler(
+                chargingStation,
+                commandName as RequestCommand,
+                payload,
+                requestPayload
+              )
+              .then(() => {
+                resolve(payload);
+              })
+              .catch((error) => {
+                reject(error);
+              })
+              .finally(() => {
+                chargingStation.requests.delete(messageId);
+              });
+          };
+
+          /**
+           * Function that will receive the request's error response
+           *
+           * @param error -
+           * @param requestStatistic -
+           */
+          const errorCallback = (error: OCPPError, requestStatistic = true): void => {
+            if (requestStatistic === true && chargingStation.getEnableStatistics() === true) {
+              chargingStation.performanceStatistics?.addRequestStatistic(
+                commandName,
+                MessageType.CALL_ERROR_MESSAGE
+              );
+            }
+            logger.error(
+              `${chargingStation.logPrefix()} Error occurred at ${OCPPServiceUtils.getMessageTypeString(
+                messageType
+              )} command ${commandName} with PDU %j:`,
+              messagePayload,
+              error
+            );
+            chargingStation.requests.delete(messageId);
+            reject(error);
+          };
+
           if (chargingStation.getEnableStatistics() === true) {
             chargingStation.performanceStatistics?.addRequestStatistic(commandName, messageType);
           }
@@ -296,62 +352,6 @@ export abstract class OCPPRequestService {
           if (messageType !== MessageType.CALL_MESSAGE) {
             return resolve(messagePayload);
           }
-
-          /**
-           * Function that will receive the request's response
-           *
-           * @param payload -
-           * @param requestPayload -
-           */
-          function responseCallback(payload: JsonType, requestPayload: JsonType): void {
-            if (chargingStation.getEnableStatistics() === true) {
-              chargingStation.performanceStatistics?.addRequestStatistic(
-                commandName,
-                MessageType.CALL_RESULT_MESSAGE
-              );
-            }
-            // Handle the request's response
-            self.ocppResponseService
-              .responseHandler(
-                chargingStation,
-                commandName as RequestCommand,
-                payload,
-                requestPayload
-              )
-              .then(() => {
-                resolve(payload);
-              })
-              .catch((error) => {
-                reject(error);
-              })
-              .finally(() => {
-                chargingStation.requests.delete(messageId);
-              });
-          }
-
-          /**
-           * Function that will receive the request's error response
-           *
-           * @param error -
-           * @param requestStatistic -
-           */
-          function errorCallback(error: OCPPError, requestStatistic = true): void {
-            if (requestStatistic === true && chargingStation.getEnableStatistics() === true) {
-              chargingStation.performanceStatistics?.addRequestStatistic(
-                commandName,
-                MessageType.CALL_ERROR_MESSAGE
-              );
-            }
-            logger.error(
-              `${chargingStation.logPrefix()} Error occurred at ${OCPPServiceUtils.getMessageTypeString(
-                messageType
-              )} command ${commandName} with PDU %j:`,
-              messagePayload,
-              error
-            );
-            chargingStation.requests.delete(messageId);
-            reject(error);
-          }
         }),
         Constants.OCPP_WEBSOCKET_TIMEOUT,
         new OCPPError(