Object.freeze在开发过程中

请看这里的代码

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); } } 

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

是的,这正是在添加此function的提交中提到的原因:

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

对于生产环境,build议使用envify和uglify这样的工具作为构build过程的一部分,从而剥离[非]生产特定代码以获得性能优势。

我们使用if (process.env.NODE_ENV !== 'production')来包装Object.freeze() ,这样就可以使用各种工具为不同的环境构build代码:

他们这样做的原因是因为Object.freeze 在当时很慢 – 在这一点上, Object.freeze的性能受到了极大的缓解 ( 至less在V8中 )。