

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Enviar consultas ao servidor como bytecode em vez de strings
<a name="best-practices-gremlin-java-bytecode"></a>

Há vantagens de usar bytecode em vez de string ao enviar consultas:
+ **Obter a sintaxe de consulta inválida com antecedência: ** o uso da variante de bytecode permite detectar sintaxe de consulta inválida na fase de compilação. Se você usar a variação com base em string, só detectará a sintaxe inválida quando a consulta for enviada ao servidor e um erro for gerado.
+ **Evite penalidades de desempenho com base em strings:** [qualquer envio de consulta com base em string, seja usando WebSockets HTTP, resulta em um vértice separado, o que implica que o objeto Vertex consiste no ID, no rótulo e em todas as propriedades associadas ao vértice (consulte Propriedades dos elementos).](http://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements)

  Isso pode ocasionar computação desnecessária no servidor em casos em que as propriedades não são necessárias. Por exemplo, se o cliente estiver interessado em obter o vértice com o ID "hakuna\$11" usando a consulta, `g.V("hakuna#1")`. Se a consulta for enviada como um envio baseado em string, o servidor poderá gastar tempo recuperando o ID, o rótulo e todas as propriedades para esse vértice. Se a consulta for enviada como um envio de bytecode, o servidor apenas gastará tempo recuperando o ID e o rótulo do vértice.

Em outras palavras, em vez de enviar uma consulta da seguinte maneira:

```
  final Cluster cluster = Cluster.build("localhost")
                                 .port(8182)
                                 .maxInProcessPerConnection(32)
                                 .maxSimultaneousUsagePerConnection(32)
                                 .serializer(Serializers.GRAPHBINARY_V1D0)
                                 .create();

  try {
      final Client client = cluster.connect();
      List<Result> results = client.submit("g.V().has('name','pumba').out('friendOf').id()").all().get();
      System.out.println(verticesWithNamePumba);
  } finally {
      cluster.close();
  }
```

Em vez disso, envie a consulta usando bytecode, como:

```
  final Cluster cluster = Cluster.build("localhost")
                                 .port(8182)
                                 .maxInProcessPerConnection(32)
                                 .maxSimultaneousUsagePerConnection(32)
                                 .serializer(Serializers.GRAPHBINARY_V1D0)
                                 .create();

  try {
      final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster));
      List<Object> verticesWithNamePumba = g.V().has("name", "pumba").out("friendOf").id().toList();
      System.out.println(verticesWithNamePumba);
  } finally {
      cluster.close();
  }
```