v8级varperson={multiply:function(a,b){returna*b;},name:'gcy'}for(leti=0;i<1000;i++){person.multiply(i,i);}定义对象时,最好在一开始就初始化对象的属性,而不是动态添加。在java或c++静态语言中,类信息是确定的,所以在编译阶段就确定了每个对象中有哪些成员和成员偏移量,基地址和偏移地址可以快速访问到对象的内部信息。js中的对象属性可以动态添加或删除。为了根据索引快速访问成员,V8内部生成了一个数据结构,叫做hiddenclass(基于运行对象的分类)。动态添加属性会导致隐藏类派生,v8优化(针对热点代码,v8会使用优化编译器,目前默认为CrankShaft,例如上例中,for循环中会进行参数预测,标记作为塑料)在代码之后。另外,建议在写代码的时候不要让程序进行类型推导。解决方案包括flow和typeScript。我用过flow,侵入性低,好用。建议使用它。这样做的目的是可以在大型项目协作的过程中使用。代码可维护性好,二来可以提高v8的执行效率,避免优化回滚(重新执行函数->ast->机器码流程)。c++级别voidMethod(constFunctionCallbackInfo&args){Isolate*isolate=args.GetIsolate();//隔离V8运行时args.GetReturnValue().Set(String::NewFromUtf8(isolate,"hwgcy"));}voidinit(Local