渲染器和主进程之间的时差

时间:2017-07-10 12:49:33

标签: node.js electron chromium dst

我认为这可能与夏令时有关,但并不完全确定。

基本上我有一个文件,我在渲染器和主进程之间共享。

'use strict';

const time = new Date();

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

当我需要并在主要流程中执行时,我得到

2017-07-10T12:34:17.613Z

然而,当我需要并在渲染器过程中执行时,我得到了

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

当我在节点控制台中执行node -e "console.log(new Date())"时,我获得与主流程相同的输出,这是有意义的,因此我假设chrome以不同的方式管理日期。

我想时差和我无法解释它指出两个问题:

  • 小时差异 - 为什么会有小时差异?这是DST的一些影响吗?如果是这样,渲染器和主进程可以同步吗?
  • 第二个区别 - 为什么还存在第二个差异?当主要和渲染器进程需要相同的文件时,它们共享相同的缓存吗?那么应该得到完全相同的日期并记录下来吗?

对这两点的任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

新Date()返回的对象在两个上下文中都是相同的,但它会以两种不同的方式自动转换为字符串。

在主进程中,console.log()可能会使用toISOString ()

在渲染器过程中,会发生对toString ()的隐式调用:

  

toString()方法总是返回一个字符串表示形式   用美式英语约会。 JavaScript调用toString()方法   自动将日期表示为文本值或何时   日期在字符串连接中引用。

答案 1 :(得分:1)

关于第二个区别,我做了一些调查,似乎缓存是在进程级别处理的。实际上,我在这个页面上找到了一些有用的信息:

Deep dive into Electron’s main and renderer processes

  

例如,假设我有一个模块可以保存一些我的状态   在我的主要和渲染过程中都需要。

     

如果我在渲染器中递增,渲染器中的计数将为1,   但在主要过程中它仍然是0。这两个过程没有   分享记忆或状态。实际上有两个例子   模块运行。

为了在两个进程中显示相同的时间,可能更好的方法是使用共享的全局变量来存储通过将.toISOString()或toString()应用于新的Date()而返回的字符串,然后显式调用来自每个进程的console.log()。

在主要过程中:

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

在渲染器过程中:

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