开发过程中的Object.freeze

时间:2015-02-14 02:44:39

标签: javascript node.js

请参阅代码here

if (process.env.NODE_ENV !== 'production') {
    if ('function' === typeof Object.freeze) {
        Object.keys(self._routes).forEach(function freezeRoute(name) {
            var route = self._routes[name];
            Object.freeze(route.config);
            Object.freeze(route.keys);
            Object.freeze(route);
        });
        Object.freeze(self._routes);
    }
}

为什么要在非生产模式下冻结。是否要验证它在开发过程中没有被修改,但在生产过程中避免任何类型的运行时成本?

1 个答案:

答案 0 :(得分:2)

是的,这正是mentioned in the commit where this functionality was added

的原因
  

我们使用Object.freeze冻结路由器并为非生产环境路由对象,以确保这些对象的不变性。

     

对于生产环境,建议使用envify等工具和uglify作为构建过程的一部分,以去除[非]生产特定代码以获得性能优势。

     

我们使用if (process.env.NODE_ENV !== 'production')来回绕Object.freeze(),以便您可以使用各种工具为不同的环境构建代码:

他们这样做的原因是因为Object.freeze was slow at the time - 此时Object.freeze has been greatly mitigatedat least in V8)的效果受到了影响。