2017-07-10 6 views
0

Ich glaube, dies könnte mit der Sommerzeit zusammenhängen, aber nicht ganz sicher.Zeitunterschied zwischen Renderer und Hauptprozess

Im Wesentlichen habe ich eine Datei, die ich zwischen dem Renderer und Hauptprozess gemeinsam habe.

'use strict'; 

const time = new Date(); 

module.exports =() => console.log(time); 

Wenn ich in Hauptprozess erfordern und führen i bekommen

2017-07-10T12:34:17.613Z

jedoch, wenn ich in den Renderer-Prozess erfordern und führen i bekommen

Mon Jul 10 2017 13:44:08 GMT+0100 (GMT Daylight Time)

Wenn ich ausführen node -e "console.log(new Date())" in Node-Konsole bekomme ich die gleiche Ausgabe wie der Hauptprozess, der Sinn macht, also ich assu Ich Chrom verwaltet Daten anders als Knoten.

Ich denke, die Zeitdifferenz und meine Unfähigkeit, verweist er auf zwei Fragen zu erklären:

  • Stunden-Unterschied - Warum gibt es eine Stunde Unterschied? Ist das ein Einfluss von DST? Wenn ja, können Renderer und Hauptprozess synchronisiert werden?
  • Zweiter Unterschied - Warum gibt es auch zweite Unterschiede? Wenn der Hauptprozess und der Renderer dieselbe Datei benötigen, teilen sie sich dasselbe Cache-Recht? Also sollte genau das selbe Datum kommen und es protokollieren?

Jede Hilfe zu den beiden Punkten würde sehr geschätzt werden.

Antwort

1

Das von new Date() zurückgegebene Objekt ist in beiden Kontexten identisch, wird jedoch auf zwei verschiedene Arten automatisch in eine Zeichenfolge konvertiert.

Im Hauptprozess verwendet console.log() wahrscheinlich toISOString().

Im Renderer-Prozess, ein impliziter Aufruf toString() auftritt:

Die toString() -Methode gibt immer eine String-Darstellung des Datum im amerikanischen Englisch. JavaScript ruft die toString() -Methode automatisch auf, wenn ein Datum als Textwert dargestellt werden soll oder wenn ein Datum in einer String-Verkettung auf verweist.

+0

Ich denke, die OP über die tatsächliche Zeitdifferenz betroffen sind und nicht das Format. – Bernard

+0

Es gibt keinen tatsächlichen Stundenunterschied, das Z-Präfix zeigt die universelle Zeit im ersten Fall an, während die Zeit im zweiten Fall gemäß der Gebietszeitzone angezeigt wird. – Mikaeru

+0

Spot auf. Es ist interessant, einen solchen Unterschied in den verwendeten Standardmethoden zu sehen. Mein Verständnis war Chromium und Node sind beide V8-powered, ich hätte erwartet, dass ein solches Verhalten konsistent ist. – ste2425

1

In Bezug auf den zweiten Unterschied, habe ich einige Untersuchungen und es scheint, dass der Cache auf Prozessebene behandelt wird. Eigentlich fand ich einige nützliche Informationen auf dieser Seite:

Deep dive into Electron’s main and renderer processes

So zum Beispiel, sagen wir, ich ein Modul, das eine gewisse Zustand hält, die ich in meinen beiden Haupt- und Renderer-Prozess erfordern .

Wenn ich meinen Renderer inkrementiere, ist die Anzahl im Renderer 1, , aber im Hauptprozess ist es immer noch 0. Die beiden Prozesse teilen nicht Speicher oder Zustand. Es gibt buchstäblich zwei Instanzen dieses Moduls.

Um die gleiche Zeit in beiden Prozessen angezeigt werden, ein möglicherweise besserer Weg, um eine gemeinsame globale Variable zu verwenden wäre die Zeichenfolge durch Anwendung .toISOString() oder toString() zu new Date() zurückgegeben zu speichern, dann rufen Sie console.log() explizit von jedem Prozess auf.

Im Hauptprozess:

global.time = new Date().toString(); 
console.log (global.time); 

In Renderer-Prozess:

console.log (remote.getGlobal ('time')); 
Verwandte Themen