Objeto de proceso en ElectronJS

ElectronJS es un marco de código abierto que se utiliza para crear aplicaciones de escritorio nativas multiplataforma utilizando tecnologías web como HTML, CSS y JavaScript que pueden ejecutarse en los sistemas operativos Windows, macOS y Linux. Combina el motor Chromium y NodeJS en un solo tiempo de ejecución.

Como se mencionó anteriormente, Electron combina el motor Chromium y NodeJS en un solo tiempo de ejecución. Electron amplía las funciones de NodeJS y brinda acceso a varias API que, de otro modo, no serían accesibles en un entorno de navegador de espacio aislado. Una de esas características cruciales es el objeto de proceso de NodeJS . El objeto de proceso de NodeJS es un objeto global que proporciona un amplio conjunto de información y define el comportamiento de la aplicación NodeJS. Dado que es un objeto global, se puede acceder a él desde cualquier módulo de la aplicación NodeJS. Nos proporciona un amplio conjunto de propiedades de instancia, métodos y eventos que se pueden utilizar.

Para obtener una explicación detallada sobre el objeto Process, consulte el artículo: Global, Process and buffer in Node.js. Electron también es compatible con el objeto de proceso global . Es una extensión del objeto de proceso de NodeJS y agrega su propio conjunto de propiedades, métodos y eventos de instancia que son exclusivos de Electron. En este tutorial, veremos algunas características del objeto de proceso de Electron.

Suponemos que está familiarizado con los requisitos previos que se describen en el enlace mencionado anteriormente. Para que Electron funcione, node y npm deben estar preinstalados en el sistema.

  • Estructura del proyecto: 
     

Project Structure

Ejemplo: siga los pasos dados en Arrastrar y soltar archivos en ElectronJS para configurar la aplicación electrónica básica. Copie el código estándar para el archivo main.js y el archivo index.html como se indica en el artículo. Además, realice los cambios necesarios mencionados para el archivo package.json para iniciar la aplicación Electron. Continuaremos construyendo nuestra aplicación usando la misma base de código. Los pasos básicos necesarios para configurar la aplicación Electron siguen siendo los mismos. 

paquete.json: 

{
  "name": "electron-properties",
  "version": "1.0.0",
  "description": "Process Object in Electron",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "keywords": [
    "electron"
  ],
  "author": "Radhesh Khanna",
  "license": "ISC",
  "dependencies": {
    "electron": "^8.3.0"
  }
}

Producción: 

Objeto de proceso en Electron: Un objeto de proceso es un objeto global al que se puede acceder tanto en el Proceso principal como en los Procesos de representación . Como se discutió anteriormente, el objeto de proceso en Electron proporciona su propio conjunto de características además de las características ya existentes del objeto de proceso de NodeJS. En un entorno Sandbox, el objeto de proceso contiene solo un subconjunto de las API.

Nota: El objeto de proceso en Electron también puede interactuar con las API del sistema y, por lo tanto, tiene acceso a propiedades detalladas del sistema, como información de la CPU, información de la memoria, etc., que se pueden aprovechar en una aplicación de escritorio.

  • index.html : agregue el siguiente fragmento en ese archivo. 

html

<h3>System Properties in Electron</h3>
  <button id="print">
    Print all System Properties in Console
  </button>

index.js : el botón Imprimir todas las propiedades del sistema en la consola aún no tiene ninguna funcionalidad asociada. Para cambiar esto, agregue el siguiente código en el archivo index.js .

javascript

const electron = require('electron')
  
// Instance Properties 
process.noDeprecation = false;
process.throwDeprecation = false;
process.traceDeprecation = true;
process.traceProcessWarnings = true;
  
// Instance Event 
process.once('loaded', () => {
    console.log('Pre-Initialization Complete');
  });
  
function properties(label, value) {
    this.label = label;
    this.value = value;
}
  
var props = {};
  
var print = document.getElementById('print');
// Instance Properties, continued ...
print.addEventListener('click', (event) => {
    props.defaultApp = new properties('Default App', process.defaultApp);
    props.mainFrame = new properties('Main Frame', process.isMainFrame);
    props.resourcePath = new properties('Resource Path', process.resourcesPath);
    props.sandbox = new properties('Sandbox Environment', process.sandboxed);
    props.processType = new properties('Type of Process', process.type);
    props.chrome = new properties('Chrome Version', process.versions.chrome);
    props.electron = new properties('Electron Version', process.versions.electron);
    props.windowsStore = new properties('Window Store', process.windowsStore);
    props.CreationTime = new properties('Window Store', process.getCreationTime());
  
    console.table(props);
    // Instance Methods 
    console.log('-------------------');
    console.log('Application Creation Time');
    console.log(process.getCreationTime());
    console.log('-------------------');
    console.log('CPU Usage Information')
    console.log(process.getCPUUsage());
    console.log('-------------------');
    console.log('IOCounters Information')
    console.log(process.getIOCounters());
    console.log('-------------------');
    console.log('Heap Statistics Information')
    console.log(process.getHeapStatistics());
    console.log('-------------------');
    console.log('Blink Memory Information')
    console.log(process.getBlinkMemoryInfo());
    console.log('-------------------');
    console.log('System Memory Information')
    console.log(process.getSystemMemoryInfo());
    console.log('-------------------');
    console.log('System Versions Information')
    console.log(process.getSystemVersion());
    console.log('-------------------');
    console.log('Process Memory Information')
    process.getProcessMemoryInfo().then(processMemoryInfo => {
        console.log(processMemoryInfo);
    }).catch(err => {
        console.log(err);
    })
});

Eventos de instancia:

  • cargado: Evento Este evento de instancia se emite cuando Electron ha cargado su secuencia de comandos y bibliotecas de inicialización internas y está comenzando a cargar la página web o la secuencia de comandos principal, es decir, el archivo main.js. Un caso de uso importante de este evento es que puede ser utilizado por la secuencia de comandos precargada para agregar los símbolos globales de Node que se eliminan, de vuelta al alcance global cuando la integración de Node está desactivada para la aplicación electrónica, como cuando se definen las Preferencias web de BrowserWindow. propiedad. 

Propiedades de instancia:

  • process.defaultApp: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor booleano . Esta propiedad se establece durante el inicio de la aplicación y se pasa al proceso principal . Si es la aplicación predeterminada, el valor devuelto es verdadero , de lo contrario, indefinido .
  • process.isMainFrame: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor booleano . Devuelve verdadero cuando el contexto del renderizador actual es el marco del renderizador principal . Consulte el resultado a continuación para una mejor comprensión. Si queremos el ID del marco actual, debemos usar la propiedad de instancia webFrame.routingId .
  • process.mas: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor booleano . Para la compilación de Mac App Store, esta propiedad se establece como true . Para otras compilaciones de sistemas operativos, se devuelve como undefined .
  • process.noAsar: esta propiedad de instancia toma un valor booleano . Esta propiedad controla la compatibilidad con ASAR dentro de su aplicación. Establecer esto en verdadero deshabilitará el soporte para archivos asar en los módulos integrados de NodeJS. Asar es un formato de archivo extenso simple, funciona como .tar que concatena todos los archivos sin comprimir, mientras que tiene soporte de acceso aleatorio. Con esta propiedad habilitada, Electron puede leer archivos arbitrarios sin descomprimir el archivo completo. Para obtener una explicación detallada y aprovechar el soporte de ASAR , consulte https://www.npmjs.com/package/asar .
  • process.noDeprecation: esta propiedad de instancia toma un valor booleano . Esta propiedad controla si las advertencias de obsolescencia se imprimen o no en stderr / console . Establecer esto en verdadero silenciará las advertencias de desaprobación. Esta propiedad se usa en lugar del indicador de línea de comando –no-deprecation . Para obtener una explicación detallada sobre los argumentos y conmutadores de la línea de comandos, consulte Argumentos de la línea de comandos en ElectronJS
 
  • process.resourcesPath: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor de string . Representa la ruta al directorio de recursos en Electron.
  • process.sandboxed: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor booleano . Esta propiedad devuelve true cuando Renderer Process es un sandbox; de lo contrario, devuelve undefined .
  • process.throwDeprecation: esta propiedad de instancia toma un valor booleano . Esta propiedad de instancia controla si las advertencias de obsolescencia se lanzarán o no como excepciones . Establecer esto en verdadero arrojará errores por obsolescencia e interrumpirá la ejecución de la aplicación. Esta propiedad se usa en lugar del indicador de línea de comando –throw-deprecation . Para obtener una explicación detallada sobre los argumentos y conmutadores de la línea de comandos, consulte Argumentos de la línea de comandos en ElectronJS
  • process.traceDeprecation: esta propiedad de instancia toma un valor booleano . Esta propiedad Instance controla si las advertencias de desaprobación se imprimen o no en stderr /console con su seguimiento de pila. Establecer esto en verdadero imprimirá los rastros de la pila. Esta propiedad se usa en lugar del indicador de línea de comando –trace-deprecation . Para obtener una explicación detallada sobre los argumentos y conmutadores de la línea de comandos, consulte Argumentos de la línea de comandos en ElectronJS
  • process.traceProcessWarnings: esta propiedad de instancia toma un valor booleano . Esta propiedad Instancia controla si las advertencias de proceso se imprimen o no en stderr /console con su seguimiento de pila. Establecer esto en verdadero imprimirá los rastros de la pila. Esta propiedad se usa en lugar del indicador de línea de comando –trace-warnings . Para obtener una explicación detallada sobre los argumentos de la línea de comandos y los modificadores, consulte los argumentos de la línea de comandos en ElectronJS  .
  • process.type: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor de string que representa el tipo de proceso actual. Puede devolver los siguientes valores:
    • navegador: para el proceso principal.
    • renderer: para el proceso Renderer.
    • trabajador: para el trabajador web.
  • process.versions.chrome: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor de string que representa la versión actual de Chrome que se está utilizando.
  • process.versions.electron: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor de string que representa la versión actual de Electron que se está utilizando.
  • process.windowsStore: esta propiedad de instancia es una propiedad de solo lectura . Devuelve un valor booleano . Si la aplicación se ejecuta como una compilación de aplicación de la Tienda Windows ( appx ), esta propiedad se establece como true . Para otras compilaciones de sistemas operativos, se devuelve como undefined .

Métodos de instancia:

  • process.crash(): este método de instancia hace que el subproceso principal del proceso actual se bloquee . Este método de instancia es extremadamente útil cuando se prueba la aplicación para el entorno de producción para determinar cómo se comporta la aplicación en diferentes sistemas operativos en caso de que falle. Este método no tiene un tipo de devolución.
  • process.hang() Este método Instance hace que el subproceso principal del proceso actual se cuelgue . Este método de instancia es extremadamente útil cuando se prueba la aplicación para el entorno de producción para determinar cómo se comporta la aplicación en diferentes sistemas operativos en caso de que falle. Este método no tiene un tipo de devolución.
  • process.getCreationTime(): este método de instancia devuelve un valor entero que representa la cantidad de milisegundos desde la época. Esto indica el tiempo de creación de la aplicación. Devuelve nulo si no puede obtener la hora de creación del proceso.
  • process.getCPUUsage(): este método de instancia devuelve un objeto CPUUsage . Este objeto consta de los siguientes parámetros. 
    • percentCPUUsage: Integer Este parámetro representa el porcentaje de CPU utilizado desde la última llamada a este método de instancia. La primera llamada siempre devuelve 0 y configura la tarea de medición.
    • idleWakeupsPerSecond: Integer Este parámetro no es compatible con Windows y siempre devolverá 0 . Este parámetro devuelve el número promedio de activaciones de CPU inactivas por segundo desde la última llamada a este método de instancia. La primera llamada siempre devuelve 0 y configura la tarea de medición.
  • process.getIOCounters(): este método de instancia solo es compatible con Windows y Linux . Devuelve un objeto IOCounters . Este objeto consta de los siguientes parámetros.
    • readOperationCount: Integer El número de operaciones de E/S de lectura.
    • writeOperationCount: Integer El número de operaciones de E/S de escritura.
    • otherOperationCount: Integer El número de otras operaciones de E/S.
    • readTransferCount: Integer El número de transferencias de lectura de E/S.
    • writeTransferCount: Integer El número de transferencias de escritura de E/S.
    • otherTransferCount: Integer El número de otras transferencias de E/S.
  • process.getHeapStatistics(): este método de instancia devuelve un objeto con estadísticas de almacenamiento dinámico V8 , las mismas que genera el archivo .snapshot cuando se carga en Chrome Dev Tools. Este método de instancia es importante para analizar las estadísticas de código y las fugas de memoria dentro de la aplicación. Todas las estadísticas se reportan en Kilobytes . Para obtener una explicación detallada de la instantánea del montón V8, consulte el artículo: Crear una instantánea del montón V8 en ElectronJS . El objeto consta de los siguientes parámetros.
    • totalHeapSize: entero
    • totalHeapSizeExecutable: Entero
    • totalPhysicalSize: Entero
    • totalAvailableSize: Entero
    • heapSizeLimit: entero
    • usedHeapSize: Entero
    • MallocedMemory: Entero
    • picoMallocedMemory: entero
    • haceZapBasura: booleano
  • process.takeHeapSnapshot(filePath): este método de instancia toma una instantánea de V8 Heap de la aplicación y la guarda en el parámetro FilePath String proporcionado. Se comporta exactamente de la misma manera que el método de instancia webContents.takeHeapSnapshot(filepath) de la propiedad webContents del objeto BrowserWindow . Para obtener una explicación detallada y comprender cómo funciona la instantánea de montón V8 en ElectronJS, consulte el artículo: Crear una instantánea de montón V8 en ElectronJS .
  • process.getBlinkMemoryInfo(): este método de instancia devuelve un objeto con información de memoria parpadeante. Puede ser útil para depurar el renderizado, problemas de memoria relacionados con DOM. Todas las estadísticas se reportan en Kilobytes . El objeto consta de los siguientes parámetros.
    • asignado: Tamaño entero de todos los objetos asignados.
    • marcado: Tamaño entero de todos los objetos marcados.
    • total: Integer El espacio total asignado.
  • process.getSystemVersion(): este método de instancia devuelve un valor de string que representa la versión actual del sistema operativo host. 
    Nota: este método de instancia devuelve la versión real del sistema operativo en lugar de la versión del kernel en macOS .
  • process.getSystemMemoryInfo(): este método de instancia devuelve un objeto que brinda estadísticas generales de uso de memoria sobre todo el sistema donde se aloja la aplicación. Todas las estadísticas se reportan en Kilobytes . Este objeto consta de los siguientes parámetros.
    • total: Entero La cantidad total de memoria física disponible para el sistema.
    • free: Integer La cantidad total de memoria que no utilizan las aplicaciones o la caché de disco.
    • swapTotal: Integer Este parámetro solo se admite en Windows y Linux . La cantidad total de memoria de intercambio disponible para el sistema.
    • swapFree: Integer Este parámetro solo se admite en Windows y Linux . La cantidad libre de memoria de intercambio disponible para el sistema.
  • process.setFdLimit(maxDescriptors): este método de instancia solo es compatible con macOS y Linux. Establece el límite flexible del descriptor de archivo o el límite estricto del sistema operativo en el valor entero de maxDescriptors especificado, el que sea menor para el proceso actual. Este método no tiene un tipo de devolución.

Producción: 

Publicación traducida automáticamente

Artículo escrito por radheshkhanna y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *