Я использую следующий код Scala:
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
}
}
}
На моем компьютере требуется ~ 3 минуты на файл из http://sortable.com/blog/coding-challenge/ . Написанные мной эквивалентные программы на Haskell и Ruby занимают менее 4 секунд. Что я делаю не так?
Я пробовал тот же код без карты (jsonStringMap), и он был достаточно быстрым, так что синтаксический анализатор JSON просто очень медленный?
Кажется вероятным, что синтаксический анализатор JSON по умолчанию действительно действительно медленно, однако я попробовал https://github.com/stevej/scala-json , и хотя это сократило время до 35 секунд, это все равно намного медленнее, чем Ruby.
Теперь я использую https://github.com/codahale/jerkson , что еще быстрее ! Моя программа теперь работает всего за 6 секунд с моими данными, всего на 3 секунды медленнее, чем Ruby, который, вероятно, просто запускается JVM.