1

Scala を使用して URL からコンテンツを取得するより高速な方法があるかどうかを把握しようとしています。Apache を使用すると、ScalaIOUtilsよりも高速にコンテンツを取得できます。Source.fromURL両方のコードは次のとおりです。

Java の使用:

    try {
        tmp=IOUtils.toString(new URL("http://gizmodo.com"));
        tmp=tmp.substring(tmp.indexOf("360\" title=")+12);
        tmp=tmp.substring(0,tmp.indexOf("\""));
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

スカラの使用:

  val gizmodoPageLines = Source.fromURL("http://gizmodo.com").getLines.mkString("\n")
  val pos=gizmodoPageLines.indexOf("360\" title=")
  var tmp=gizmodoPageLines.substring(pos+12)
  tmp.substring(0,tmp.indexOf("\""))

Java では、約 155899 ns かかります。

Scala の場合: 343880 ns

なぜ Scala コードはとても遅いのですか?

4

2 に答える 2

7

最初はバッファから読み取っているのに対し、2番目は行ごとに読み取っているからです。

Source.getLinesは、IOUtilsやその他のライブラリの特効薬として意図されたものではなく、行ごとに読み取ることを目的としています。ScalaではIOUtilsを完全に使用できます。

于 2013-01-10T02:46:51.640 に答える
1

接続の遅さ (ギズモードを取得するのに 2 ~ 6 分) を見ると、Scala と Java の間の読み取り速度が問題ではなく、信頼性の低いインターネット接続であることがわかる場合があります。速度の違いを本当にテストしたい場合は、ローカルサーバーからファイルを提供してみて、インターネット接続速度を方程式から除外してください.

最後に、高度な HTTP クライアントについては、Spray HTTP Clientを調べます。Spray は非常に優れたノンブロッキング (アクターを使用) HTTP ツールセットです。

于 2013-01-10T05:52:52.527 に答える