16

DataBindライブラリでJacksonを使用してjsonを解析し、Javaオブジェクトにマップしています。パフォーマンスがあまり必要とされない他のプロジェクトでも Gson を使用しています。

2 月 17 日、LoganSquareライブラリが最初にリリースされ、Gson の 4 ~ 10 倍高速な解析が約束されました。

  • Gson/Jackson よりも LoganSquare にはない利点は何ですか?
  • 賛否両論?
  • 本番アプリケーションのベンチマークはありますか?
  • 本番アプリとして十分に安定していますか?

主に意見に基づく質問になる可能性があることは理解しています。そのため、可能な限り技術的かつ具体的に回答し、実際のデータに基づいて回答してください。

4

4 に答える 4

19

明確にするために、ART を使用してアプリをデバイスにリリースする場合は、解析によって速度が大幅に向上します。

これまでのlogansquareでの経験を説明します。

長所:

  • 使いやすい: Gson では、json 配列をオブジェクト リストに解析するために Type を使用する必要があります。loganSquare では、次のように簡単です。LoganSquare.parseList()
  • 高速: どのデバイスでも (自分でテストしてください)、わずかに高速です。
  • FasterER : ART デバイスでは、その速度差は非常に大きく、ベンチマークを参照してください
  • RetroFitフレンドリー:はい、レトロフィットでうまく機能します.

短所:

  • NO REALM DB : 今のところ Realm db で実行できませんでした (まだ頑張っていません)

  • Custom Type Adapter :これまでのところ、型アダプターまたは同様のものを見つけることができませんでしたが、よくわかりません。

ここで彼らのベンチマークを見てください

そして、これが私の悪いベンチマーク結果です(これは適切なベンチマークではありませんが、それは何かです):DalvikVM、4.2ジェリービーンを備えたエミュレーターネクサス5

ベンチマーク

タイムシートの解析

解析時間グラフ

解析済みモデル

import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.google.gson.annotations.SerializedName;

/**
 * Created by Ercan on 6/26/2015.
 */
@JsonObject(serializeNullCollectionElements = true ,serializeNullObjects = true)
public class Village {

    @SerializedName("IdVillage")
    @JsonField(name ="IdVillage")
    String tbsVillageId;

    @SerializedName("TBS_VillageId")
    @JsonField(name ="TBS_VillageId")
    String townRefId;

    @SerializedName("VillageName")
    @JsonField(name ="VillageName")
    String villageName;

    @SerializedName("Status")
    @JsonField(name ="Status")
    String status;

    @SerializedName("DateInserted")
    @JsonField(name ="DateInserted")
    String dateInserted;

    @SerializedName("DateLastModified")
    @JsonField(name ="DateLastModified")
    String datelastModified;

    public String getTbsVillageId() {
        return tbsVillageId;
    }

    public void setTbsVillageId(String tbsVillageId) {
        this.tbsVillageId = tbsVillageId;
    }

    public String getTownRefId() {
        return townRefId;
    }

    public void setTownRefId(String townRefId) {
        this.townRefId = townRefId;
    }

    public String getVillageName() {
        return villageName;
    }

    public void setVillageName(String villageName) {
        this.villageName = villageName;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDateInserted() {
        return dateInserted;
    }

    public void setDateInserted(String dateInserted) {
        this.dateInserted = dateInserted;
    }

    public String getDatelastModified() {
        return datelastModified;
    }

    public void setDatelastModified(String datelastModified) {
        this.datelastModified = datelastModified;
    }
}
于 2015-08-10T06:47:26.833 に答える
4

Android 6.0.1 を搭載した Nexus 5 デバイスでLoganSquare Benchmarkプロジェクトを実行した結果は次のとおりです。

LoganSquare ベンチマークのスクリーンショット

また、lib を使って少し時間を過ごした後、ここに私の長所と短所があります。

長所

  1. 解析とシリアライゼーションの両方で非常に高速です
  2. ライブラリのサイズが小さい
  3. リストの解析とシリアル化のための便利なメソッド
  4. 便利なコンバーター
  5. 実行時のみではなくコンパイル時エラー

短所

  1. ドキュメントはあまりなく、StackOverflowに関する質問と回答もあまりありません:)
  2. 多くのタイプがサポートされていません
  3. Map コレクションでサポートされている文字列キーのみ

LoganSquare がどのように機能するかを確認するためのサンプル プロジェクトとブログ投稿を作成したので、詳細についてはそちらをご覧ください。

于 2016-06-01T19:05:18.570 に答える