28

私はアプリケーション開発の研究開発段階にあり、次の重要な要件があります。

  • HTML5Webアプリケーション-ハイブリッドバージョンもあります
  • インターネットに接続していない場合、フォームデータはローカルに保存されます

クォータの制限のためにWebストレージを使用できません-SQLiteIndexedDBを比較しています。

  • SQLiteが最適のようですが、非推奨です
  • Indexed DBは優れた代替手段ですが、Safariはサポートされていません。ハイブリッドアプリケーションは、将来的にiPadとAndroidデバイスで実行される予定です。

APIの選択に混乱しています。SQLiteまたはSafariで期待されるIndexedDBのサポートに代わるものはありますか?

4

8 に答える 8

18

IndexedDBを放棄することは、おそらく将来のフォーマットであるため、悪い考えだと思います。そのため、SafariはWebSQLのサポートを停止する可能性があります。

2つの間のギャップを埋めるためのさまざまなJavaScriptソリューションがあるようです-ユーザーのブラウザで利用可能なものを保存します: JavaScriptライブラリからBridgeIndexedDBおよびWebSQL へこれはおそらくあなたの最良のソリューションだと思います。

于 2012-09-03T12:02:45.447 に答える
16

まず第一に、W3Cによって非推奨にされたのはSQLiteではなくWebSQLです

IndexedDB-

  • 多くの種類のモバイルOSとは互換性がなく、特定の種類のバージョンのモバイルOSとのみ互換性があります。
  • 開発者は、IndexedDBでSQLを使用できません。彼らはSQLiteとWebSQLでできます
  • ほとんどの開発者は、可能な限りIndexedDBの使用を積極的に避けています

WebSQL-

  • W3Cによって非推奨になりました。つまり、保守も開発もされていません。
  • モバイルアプリケーションがGoogleAndroidやAppleiOSなどの一般的なモバイルOSで動作できるようにするには、Polyfillと呼ばれる別のプラグインが必要です。

SQLite-

  • グーグルから賞を受賞
  • SQLiteには公式ウェブサイトがあります。IndexedDBとWebSQLはしません
  • Googleでは、SQLiteは430万件の結果を返します。WebSQLは700Kより少し少ない結果を返し、IndexedDBは282Kの結果を返します。

SQLiteの簡単なチュートリアルが必要な場合は、

AndroidとPhonegapを使用したSQLiteデータベースのストレージ

于 2014-09-13T20:44:33.063 に答える
6

はい、IndexedDB APIは優れており、近い将来、すべてのブラウザがサポートする予定です。

私は間違いなく私自身のソリューションhttps://bitbucket.org/ytkyaw/ydn-dbをお勧めします。これはIndexedDBの非常に薄いラッパーであり、サファリのSqliteにフォールバックします。

于 2012-09-03T14:43:17.930 に答える
3

IndexedDBは、将来サポートされるデータベースである可能性が高く、WebSQLの代わりにそれを使用するのが最善です。Raymondが指摘したように、デスクトップブラウザとモバイルブラウザの両方での現在/将来のサポートについては、http://www.caniuse.comを参照することをお勧めします。

ソリューションの現在のニーズに応じて、ローカルストレージを使用し、クエリインターフェイスを提供する利用可能な多くのJavaScriptライブラリの1つで問題ない場合があります。私にとってうまく機能しているライブラリの1つは、Lawnchairです。

于 2012-09-03T14:27:10.057 に答える
2

IndexedDBとWebSQLのどちらかを選択したくない場合は、JavascriptライブラリPouchDBを使用できます。

Android Webviewでオフラインデータを保存するために使用していますが、非常にうまく機能します。インターネット接続が利用できない場合、データはローカルデータベース(IndexedDBまたはWebSQLを使用)に保存され、利用可能な接続がある場合はリモートデータベース(CouchDBデータベース)と同期されます。

PouchDBはIndexedDBに依存しますが、IndexedDBがサポートされていない場合はWebSQLにフォールバックします。Cordova/PhoneGap用のSQLiteプラグインを使用する可能性もあります。

于 2015-04-28T14:46:37.710 に答える
2

websql、localStorage、indexedDBのテーマについて調査すると、Googleがこの質問に誘導するため、この質問を更新するために少し編集したいと思います。編集が却下されたので、回答として投稿します。

他の人が彼らの回答で述べたように、IndexedDBは、そのドキュメントと仕様について、サポートとWeb上のコンテンツについて少し前に欠けていました。

ただし、IndexedDBのサポートはモバイル向けに大幅に改善されています。大幅に改善されたため、サポートされていない、またはまったくサポートされていないブラウザはOpera Miniだけですが、市場での使用率は0.34%にすぎません。

2015年の時点で、WebSQLは非推奨になり、IEとFirefoxはそれをサポートしなくなり(これらだけで市場使用量の15%以上になります)、SQLiteはIndexedDBに急速にスペースを失っているため、開発者にはIndexedDBに移行することをお勧めします。今では本当に良いドキュメントソースあります。いくつかの公式もIBMのように、一部のIT企業も使用を動機付けています。

使ってみますが、今のところ問題はありません。Safariはそれにサポートを追加し、すべての主要なブラウザも同様にサポートします。頑張れ!

編集:個人的な補遺:私はIndexedDBを試しました。私はチームのシニアです。IndexedDBの構文は、小さなストレージの問題にはあまりにも厄介で複雑です。localstorageを使用して単純なJSONデータを保存し、必要なときに解析することをやめました。私のチームの誰もがそれを手に入れるのにはるかに良いです(もちろん私も!)

于 2015-08-05T18:09:49.853 に答える
1

これはゲームに遅れるかもしれませんが、あなたは見ることができます: SequelSphere

これは、クロスブラウザで動作し、ローカルストレージを使用してデータを永続化する100%HTML5/JavaScriptリレーショナルデータベースです。SQLを使用してクエリを実行することもできます。これは独自のデータベースエンジンであり、組み込み(WebSQL)リレーショナルデータベースに依存しません。そのため、すべてのブラウザで機能します。

現在はlocalStorageのみをサポートしていますが、今後はすべての標準をサポートすることを目的としています。ブラウザは他のタイプの永続性をサポートしているため、SequelSphereはそれを利用します。良い点は、標準SQLを使用してSequelSphereに対してのみコーディングし、永続性を処理できるようにすることです。

それにもかかわらず、それは市場への新製品であることに注意してください、それはプラスとマイナスの両方が付属しています。

于 2012-10-05T17:39:18.083 に答える
1

他の人が指摘しているように、この質問が出されたため、webSQLは非推奨になりましたが、IndexedDBの実装は現在すべての主要なブラウザベンダーに存在しています。

したがって、ここで同じ決定に直面する可能性のある人は、IndexedDBを使用してください。

ここにある他の人も、2つのタイプのデータベースから選択する必要がないことを正しく示唆しています。クライアントマシンで利用可能なデータベースを利用するライブラリを選択(または作成)するだけです。

そのようなライブラリを探しているなら、BakedGoodsをチェックしてください。これは、すべてのネイティブおよび一部の非ネイティブクライアントストレージ機能でストレージ操作を実行するために使用できる統一されたインターフェイスを確立します。また、それぞれがユーザーに提供する柔軟性とオプションを維持します。

これを使用すると、サポートされているデータベースタイプのいずれかでストレージ操作を実行することが問題になります...

...両方のデータベースタイプに適切な操作オプションと同等の構成を指定します。

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically.

var webSQLOptionsObj = {
    databaseName: "Example_DB",
    databaseDisplayName: "Example DB",
    databaseVersion: "",
    estimatedDatabaseSize: 1024 * 1024,
    tableData: {
        name: "Main",
        keyColumnName: "lastName",
        columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};

var indexedDBOptionsObj = {
    databaseName: "Example_DB",
    databaseVersion: 1,
    objectStoreData: {
        name: "Main",
        keyPath: lastName,
        autoIncrement: false
    },
    objectStoreIndexDataArray: [
        {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
    ],
};

var optionsObj = {
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj
};

...そして操作を行う:

bakedGoods.set({
    data: [
        {value: {lastName: "Obama", firstName: "Barack"}}, 
        {value: {lastName: "Biden", firstName: "Joe"}}
    ],
    storageTypes: ["indexedDB", "webSQL"],
    options: optionsObj,
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

そのシンプルなインターフェイスと比類のないストレージ施設のサポートは、一部のストレージ施設固有の構成のサポートが不足しているという犠牲を払って提供されます。たとえば、複数列の主キーを持つWebSQLテーブルでのストレージ操作の実行はサポートされていません。

したがって、これらのタイプの機能を多用する場合は、他の場所を探すことをお勧めします。

ああ、そして完全な透明性のために、BakedGoodsはこの男によってここで維持されています:)。

于 2016-07-09T01:14:04.953 に答える