

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Invio di query al server come bytecode anziché come stringhe
<a name="best-practices-gremlin-java-bytecode"></a>

L'utilizzo di bytecode anziché di una stringa durante l'invio di query comporta dei vantaggi:
+ **Possibilità di rilevare sintassi di query non valida in anticipo:** l'uso della variante bytecode consente di rilevare sintassi di query non valida in fase di compilazione. Se utilizzi la variazione basata su stringa, non individuerai sintassi non valida fino a quando la query non viene inviata al server e viene restituito un errore.
+ **Evita un peggioramento delle prestazioni basato su stringhe:** [qualsiasi invio di query basato su stringhe, sia che tu stia utilizzando WebSockets o HTTP, genera un vertice separato, il che implica che l'oggetto Vertex sia composto dall'ID, dall'etichetta e da tutte le proprietà associate al vertice (vedi Proprietà degli elementi).](http://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements)

  Questo può generare calcoli non necessari nel server nei casi in cui le proprietà non sono richieste. Ad esempio, se il cliente è interessato a ottenere il vertice con l'ID "hakuna\$11" utilizzando la query `g.V("hakuna#1")`. Se la query viene inviata come un invio basato su stringa, il server deve recuperare l'ID, l'etichetta e tutte le proprietà per questo vertice. Se la query viene inviata come un invio bytecode, il server deve recuperare l'ID e l'etichetta del vertice.

In altre parole, anziché inviare una query come questa:

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

Invia le query utilizzando bytecode, come questa:

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