JSON’da Performansa Etki Etmek


22

JSON'da oturum açmakla ilgili daha fazla makale görüyorum. Ayrıca NodeJS blogunda bir tane bulabilirsiniz. Neden herkes onu bu kadar seviyor? Katılan sadece daha fazla işlemi görebiliyorum:

  • Birkaç yeni nesne yaratılıyor.
  • Dize uzunluğunu veya birden çok dize ayırmalarını içeren dize edici nesneler.
  • Yaratılan bütün saçmalıkları GCing.

JSON günlüğü ve normal dize günlüğü kullanılırken performansta herhangi bir test var mı? İnsanlar JSON'u (giriş yapmak için) kurumsal projelerde kullanıyor mu?

Yanıtlar:


36

JSON günlüğü, biçim zaman içinde değişmiş olsa bile, günlük dosyasını programlı olarak ayrıştırma olanağı sağlar .

İyi bir örnek Apache günlükleridir. Varsayılan olarak Apache commonaccess.log için format kullanır :

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

Bu günlük dosyalarından birini alan ve ondan bazı istatistikleri hesaplayan çevrimdışı bir ayrıştırıcı kurduğunuzu söyleyin.

Bazı anlarda uygulamanıza alt etki alanları tanıtır ve virtual_hostgünlüklerinize eklersiniz (yalnızca alt etki alanlarından biriyle sorun çıkması durumunda hata ayıklayabilirsiniz):

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

Ayrıştırıcınız aşağıdakilerden faydalanmıyor virtual_hosts, ancak ayrıştırıcınızı aşağıdakilere uyarlamanız gerekiyor:

  • yeni günlük biçimini kabul et (günlük biçiminin %vbaşındakie dikkat et )
  • hala eski log formatını destekler (eski log dosyaları için)

Ancak, JSON'da oturum açarsanız , çözümleyiciniz eklenen alanı fark etmeyecektir ve yeni günlükleri olduğu kadar eski günlükleri de mutlu bir şekilde ayrıştırabilir. Ve diğer bazı ayrıştırıcılar varsa eklenmiş alanları kullanabilirler .

Ve elbette sizinregexps için JSON'u ayrıştırmak string log'ları ayrıştırmaktan daha kolaydır .


10
Mükemmel bir örnek.
Florian Margaine

27

Makineniz bu tür sorunların gerçekten önemli olacağı sınırlarına o kadar yakın çalışırsa, büyük olasılıkla daha ciddi sorunlarınız vardır. Bunun bir fark yarattığı istisnai durumlar olsa da, JSON, basit metin veya kayıtları veritabanına kaydettiğinizde farkın olduğu makinelerde birçok uygulama (belki de çoğu) çalışır. Nesneler, dizeler ve diğer dönüşümlerin çoğu durumda yine de yapılması gerekir (ham ikili dosya kaydı yapmazsanız?), Belki görmezsiniz çünkü arka planda işleyen varsayılan sınıfları kullanırsınız (bir veritabanına yazıyormuş gibi).

Bunun için performans değerlendirmelerine ihtiyacınız varsa, kodunuzu çalıştırmak istediğiniz makinede kendiniz ve her gün kullandığınız programlama ortamı ile yapmanız gerekir. Büyük bir ek yük ya da herhangi bir şey varsa, pek çok şeye bağlıdır. Örneğin, Ruby on Rails'de bir web sitesi yazarsanız, çoğu durumda verileriniz bir karmaşadır, bu da JSON'a dönüştürülmesi sizi hiçbir şeye yaklaştırmaz, çünkü dahili gösterim yazmak istediğinizden çok uzak değildir (ve tipiktir. Rails kodu her zaman bu tür nesnelerin ve veri yapılarının etrafına atılır).

Avantajları yine aletlerine bağlı. Kütüphanenizde yerleşik bir JSON varsa, onu kolayca okuyabilir ve bir şekilde görüntüleyebilirsiniz. Yine bir örnek olarak: Web siteniz için bir yönetici arayüzünüz olduğunu ve JSON'da depolanan bazı günlük bilgilerini göstermek istediğinizi varsayarsak, bazı durumlarda tek bir kod satırında bunu Ruby'de HTML olarak okuyabilir ve görüntüleyebilirsiniz.


1
İddiaya girerim mikrosaniye atma umrunda değil ...
Rhymoid

@ Rhymoid hayır, zamanımı gerçek problemleri çözmek için kullanmayı tercih ederim.
thorsten müller

3
@ Rhymoid Mikrosaniyeleri atmanın kesinlikle kötü olduğu durumlar var. Ayrıca, programcıların% 99,9'unun kodun yazılmadığı yere kod yazacağını düşünüyorum. Örneğin, çoğu web çerçevesi ihtiyaç duyduğumdan daha fazlasını yapar ve bu ek yükü vardır. Ancak, beraberinde tam bir test ve güvenlik paketi geliyor, ayrıca beni kodlamak için yüzlerce saat kazandırıyor. Ekstra maliyet için şirketim onu ​​sıfırdan inşa etmek için harcamıyor, ihtiyaç duymaları halinde donanımı iki katına çıkarabiliyorlardı (muhtemelen, yine de kendimi inşa edebileceğim herhangi bir şeyden daha hızlı olmasına rağmen ...) Sonuçta, mikrosaniyeler önemli değil.
corsiKa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.