मैं निम्नलिखित स्काला कोड चल रहा हूँ:यह स्कैला कोड क्यों धीमा है?
import scala.util.parsing.json._
import scala.io._
object Main {
def jsonStringMap(str: String) =
JSON.parseFull(str) match {
case Some(m: Map[_,_]) => m collect {
// If this doesn't match, we'll just ignore the value
case (k: String, v: String) => (k,v)
} toMap
case _ => Map[String,String]()
}
def main(args: Array[String]) {
val fh = Source.fromFile("listings.txt")
try {
fh.getLines map(jsonStringMap) foreach { v => println(v) }
} finally {
fh.close
}
}
}
मेरी मशीन पर यह http://sortable.com/blog/coding-challenge/ से फाइल पर ~ 3 मिनट लगते हैं। समतुल्य हास्केल और रूबी कार्यक्रम जो मैंने लिखा था 4 सेकंड के भीतर लेते हैं। मैं क्या गलत कर रहा हूं?
मैंने मानचित्र के बिना एक ही कोड की कोशिश की (jsonStringMap) और यह बहुत तेज़ था, तो क्या JSON पार्सर वास्तव में धीमा है?
ऐसा लगता है कि डिफ़ॉल्ट JSON पार्सर वास्तव में धीमा है, हालांकि मैंने https://github.com/stevej/scala-json की कोशिश की और जब यह 35 सेकंड तक हो जाता है, यह रूबी की तुलना में अभी भी धीमा है।
अब मैं https://github.com/codahale/jerkson का उपयोग कर रहा हूं जो भी तेज है! मेरा प्रोग्राम अब मेरे डेटा पर केवल 6 सेकंड में चलता है, रूबी की तुलना में केवल 3 सेकंड धीमा है, जो शायद जेवीएम शुरू हो रहा है।
शायद codereview.stackexchange.com – Nettogrof
के लिए बेहतर फिट है, ऐसा लगता है कि आप स्वतंत्र रूप से प्रत्येक पंक्ति को पार्स कर रहे हैं। क्या आपने पूरे JSON दस्तावेज़ के लिए एक बार पार्सर का आह्वान करने का प्रयास किया है? –
@ChrisShain मैं पूरी फ़ाइल को JSON दस्तावेज़ में बदल सकता हूं, लेकिन (ए) मुझे नहीं लगता कि यह तेज़ कैसे होगा, यह फ़ाइल से लाइनों को स्ट्रीम नहीं कर सकता है, लेकिन इसे सब करना होगा एक बार में (बी) रूबी में ऐसा ही क्यों कर रहा है जैसा कि बहुत तेज़ हो रहा है? – singpolyma