Accesso a JSON Effect on Performance


22

Vedo sempre più articoli sulla registrazione in JSON. Puoi anche trovarne uno sul blog di NodeJS. Perché a tutti piace così tanto? Riesco a vedere solo più operazioni coinvolte:

  • Un paio di nuovi oggetti creati.
  • Stringificazione di oggetti, che implica il calcolo della lunghezza della stringa o più allocazioni di stringa.
  • GCing tutta la merda che è stata creata.

Esistono test sulle prestazioni quando si utilizza la registrazione JSON e la registrazione di stringhe regolari? Le persone usano JSON (per la registrazione) nei progetti aziendali?

Risposte:


36

La registrazione JSON ti dà la possibilità di analizzare il file di registro a livello di codice anche se il formato è cambiato nel tempo .

Un buon esempio sono i log di Apache. Per impostazione predefinita, Apache utilizza il commonformato per access.log:

"%h %l %u %t \"%r\" %>s %b"

Supponi di aver creato un parser offline che prende uno di quei file di registro e ne calcola alcune statistiche.

A un certo momento introduci i sottodomini nella tua applicazione e li includi virtual_hostnei tuoi registri (solo così puoi eseguire il debug se compaiono problemi con uno dei sottodomini):

"%v %h %l %u %t \"%r\" %>s %b"

Il tuo parser non fa uso di virtual_hosts, ma devi comunque adattare il tuo parser a:

  • accetta il nuovo formato di registro (notare %vall'inizio del formato di registro)
  • supporta ancora il vecchio formato di registro (per i file di registro meno recenti)

Ma se accedi a JSON , il tuo parser non noterà nemmeno il campo aggiunto e può felicemente analizzare i nuovi registri e quelli vecchi. E alcuni altri parser possono utilizzare i campi aggiunti se esistono .

E ovviamente per te , analizzare JSON è più semplice che scrivere regexpsper analizzare i log delle stringhe.


10
Esempio perfetto
Florian Margaine,

27

Se la tua macchina funziona così vicino ai suoi limiti che tali problemi sarebbero davvero importanti, molto probabilmente avrai problemi più seri. Sebbene possano esserci situazioni eccezionali in cui ciò fa una certa differenza, molte applicazioni (forse la maggior parte) funzionano su macchine per le quali la differenza se si registra JSON, testo semplice o record in un database non ha alcuna importanza. Oggetti, stringhe e altre conversioni devono essere comunque eseguite nella maggior parte dei casi (a meno che non si registri binario non elaborato?), Forse non lo si vede, poiché si utilizzano classi predefinite che lo gestiscono in background (come se si scrivesse in un database).

Se hai bisogno di valutazioni delle prestazioni per questo, dovresti farle tu stesso sulla macchina che vuoi eseguire il tuo codice e con l'ambiente di programmazione che usi tutti i giorni. Se c'è un grande sovraccarico o qualcosa dipende da molte cose. Se ad esempio scrivi un sito Web in Ruby on Rails, nella maggior parte dei casi i tuoi dati sono un hash, convertirli in JSON non ti costa quasi nulla, poiché la rappresentazione interna non è così lontana da ciò che vuoi scrivere (ed è tipica per il codice Rails che gira continuamente tali oggetti e strutture di dati).

I vantaggi dipendono di nuovo dai tuoi strumenti. Se hai JSON incorporato nelle tue librerie, puoi facilmente leggerlo e visualizzarlo in qualche forma. Ancora come esempio: supponendo che tu avessi un'interfaccia di amministrazione per il tuo sito web e desideri mostrare alcune informazioni di registrazione archiviate in JSON, potresti farlo in alcuni casi leggendo e visualizzando come HTML in Ruby in una singola riga di codice.


1
Scommetto che non ti importa molto di buttare via i microsecondi ...
Rhymoid

@Rhymoid no, preferisco usare il mio tempo per risolvere problemi reali.
Thorsten Müller,

3
@Rhymoid Ci sono situazioni in cui buttare via i microsecondi è sicuramente negativo. Penso anche che il 99,9% dei programmatori scriverà codice dove non lo è. Ad esempio, la maggior parte dei framework Web fa più del necessario e ciò ha un sovraccarico. Ma con esso arriva una serie completa di test e sicurezza, inoltre mi fa risparmiare centinaia di ore codificandolo da solo. Per il costo aggiuntivo che la mia azienda non spende a costruirlo da zero, potrebbero finanziare il doppio dell'hardware se necessario (anche se probabilmente è anche più veloce di qualsiasi cosa io possa costruirmi da solo ...) Alla fine, i microsecondi non contano.
corsiKa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.