请参阅代码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);
}
}
为什么要在非生产模式下冻结。是否要验证它在开发过程中没有被修改,但在生产过程中避免任何类型的运行时成本?
答案 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 mitigated(at least in V8)的效果受到了影响。