2017-07-10 6 views
0

これは夏時間に関連する可能性がありますが、完全にはわからないと思います。レンダラーとメインプロセスの時差

基本的に私はレンダラーとメインプロセスの両方で共有するファイルを持っています。私は

2017-07-10T12:34:17.613Z

を得る必要とし、メインプロセスで実行すると、私は必要とレンダラープロセスで実行するとき、私は実行するとしかし、私は

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

を取得

'use strict'; 

const time = new Date(); 

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

ノードコンソールのnode -e "console.log(new Date())"は、意味のあるメインプロセスと同じ出力を得ます。だから私はassu私クロムは、ノードとは異なる日付を管理しています。

私は時間差と、それは二つの質問を指して説明するための私のできないことを推測:

  • 時間差を - なぜ時間の違いがありますか?これはDSTの影響ですか?可能であれば、レンダラーとメインプロセスを同期させることができますか?
  • 2番目の違い - なぜ2番目の違いがありますか?メインとレンダラーのプロセスで同じファイルが必要な場合、同じキャッシュを共有できますか?正確に同じ日付を取得してログに記録する必要がありますか?

2点についてのご支援をいただければ幸いです。

答えて

1

新しいDate()によって返されるオブジェクトは、両方のコンテキストで同じですが、2つの異なる方法で自動的に文字列に変換されます。

メインプロセスでは、console.log()はおそらくtoISOString()を使用します。レンダラープロセスで

toString()への暗黙的な呼び出しが発生します。

のtoString()メソッドは、常にアメリカ英語で 日付の文字列表現を返します。 JavaScriptは、日付がテキスト値で表される場合、または文字列連結で日付が と参照される場合にtoString()メソッド を自動的に呼び出します。

+0

私はOPは、実際の時間差ではなく形式を懸念していると思います。 – Bernard

+0

実際の時差はありません。Z接頭辞は最初のケースでは世界時を示し、時間は2番目のケースではロケールタイムゾーンに従って表示されます。 – Mikaeru

+0

Spot on。使用されるデフォルト方法のそのような違いを見て興味深い。私の理解はChromiumとNodeはどちらもV8で動くので、私はそのような振る舞いが一貫していると期待していたでしょう。 – ste2425

1

2つ目の違いについては、調査を行ったところ、プロセスレベルでキャッシュが処理されているようです。

Deep dive into Electron’s main and renderer processesだから、たとえば、のは、私は両方の私のメインとレンダラプロセスで必要と いくつかの状態を保持しているモジュールを持っているとしましょう:実は、私はこのページにいくつかの有用な情報を見つけました。

レンダラーを増やした場合、レンダラーの数は1、 になりますが、それでもメインプロセスでは0になります。 2つのプロセスは、メモリまたは状態を共有しません( )。文字通りそのモジュールの2つのインスタンスが実行されています( )。

両方のプロセスで同じ時刻を表示するには、共有グローバル変数を使用して、新しいDate()に.toISOString()またはtoString()を適用して戻された文字列を格納します。各プロセスからconsole.log()を明示的に呼び出します。メインプロセスで

:レンダラープロセスで

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

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