动态和静态生成的grpc代码有什么区别?

San*_*der 8 node.js grpc

在GRPC客户端的示例中,有两种类型的实现,一种.proto是在运行时加载和处理文件,另一种是使用它们编译的protoc.

我的问题是:有什么区别?文档只是说'他们表现得一样',但肯定会有差异吗?

mur*_*d99 7

从根本上讲,主要的不同是您提到的:动态代码生成,.proto在运行时加载和解析文件,而静态代码生成,将.proto文件预处理为JavaScript。

动态代码生成更易于使用,可能更易于调试,并生成接受常规JavaScript对象的代码。

静态代码生成(使用协议)要求用户创建protobuf对象,这意味着输入验证将在更早之前完成。这也是与其他语言更加一致的工作流程。

  • 好的,这样看起来好像动态代码生成将永远是正确的方式,对吗?我的意思是,如果只将`.proto`文件放到grpc库中并用它完成,那为什么会遇到这么多麻烦呢?我还注意到,在使用静态代码时,必须使用生成的getter和setter,这使得使用起来更加麻烦,所以我明白了为什么动态代码会更容易。 (4认同)
  • @Sander 正如@murgatroid99 提到的,静态代码生成的优点之一是输入验证。想象一下,您的请求有一个名为“last_name”的字段,而您的客户端将其错误地输入为“lastName”。如果使用静态生成,则在请求发送到服务器之前就会检测到此错误,因为代码知道“lastName”是一个不存在的字段。相反,如果使用动态代码生成,此类错误可能会导致无提示故障。也就是说,“last_name”将保留为其默认值。 (3认同)
  • 两种方法的性能有何差异? (3认同)