2011年、iOS/Android向けHTML5オフラインストレージソリューションを開発中
質問
問題です。
電話やタブレットタイプのデバイス (例: iOS/Android) で、オフラインで 250,000 行以上のデータを保存し、クエリするためのデバイスに依存しない (例: HTML5) ソリューションが必要です。携帯電話のデータ接続がない遠隔地で働く人々がいて、オフラインの状態でもこのデータに対してクエリーを実行したり、編集したりする必要がある、というのが私の考えです。GPSを利用して、今いる場所に資産があれば、その資産を表示し、編集できるようにする予定です。オフィスに戻ると、データをオフィスのサーバーに同期させることができます。
私が Web 標準の観点からこれに取り組んでいる理由は、基本的には、Objective C と Java で 2 回書くよりも、HTML5 で一度書けば複数のプラットフォームで動作するので、費用と時間を節約できるためです。また、プラットフォームに依存しないものを作れば、誰もが新しいものに移行したときに、その船と一緒に沈んでしまうこともありません。Windows Mobile 5 用に書かれた同様のアプリがありましたが、そのプラットフォームは死んでしまったので、今では役に立ちません。
デバイス上のオフラインのデータベースが必要です。
- 高速 (2秒未満の応答)
- 結合を実行し、他のテーブルとの関係を持ち、データベースに問い合わせることができる可能性がある。
- 特定の範囲または基準内でデータを選択します。たとえば、GPS 読み取り値に基づいて x & y コーディネートで。
オプションです。
HTML5 のローカルストレージです。
少量のデータなら問題なし <5,000 key/values, JSONに変換すれば配列/オブジェクトも格納可能です。
短所。
- ハイエンド マシンでさえ 10,000 行を超える場合、ブラウザは這うように遅くなります。 スローになります。
- ストレージ全体を繰り返し、手動で検索する必要があるため、必要なデータを引き出すための複雑なクエリーを実行できない。
- 保存可能なストレージの量に制限がある。
Web SQL データベース。
- 要件を満たしている。
- 250,000行のクエリを高速に実行できる(1~2秒)
- 複雑なクエリ、結合などの作成が可能
- Safari、Android、Opera でサポートされているため、iOS および Android デバイスで動作します。
短所。
- 2010 年 11 月現在、非推奨
- クロスディレクトリ攻撃に関するセキュリティ上の欠陥があります。共有ホスティングを利用しないため、特に問題にはなりません。
IndexedDBです。
インデックスを除いて、ローカルストレージに似たキー/バリューオブジェクトストアです。
短所。
- 200,000 行に対するクエリの実行が遅い (15-18 秒)
- 複雑なクエリの実行ができない
- 他のテーブルとの結合ができない
- iPad/Android などの主要な携帯電話やタブレット端末ではサポートされません。
- 規格が完全ではない
このため、非推奨の Web SQL メソッドを実装するという唯一の選択肢が残されていますが、これはあと 1 年ほどしか機能しないかもしれません。IndexedDB とローカル ストレージは、現時点では使用不可能です。
Mozilla と Microsoft がどのようにして Web SQL Database 標準を非推奨にしたのか、そしてなぜ W3C がそれを許したのか、私にはよくわかりません。おそらく、この 2 社はデスクトップ ブラウザー市場の 77% を占めていると思われます。先進的なモバイル デバイスでは、Mozilla と Microsoft の影響力はほぼゼロです。 Safari、Opera、Android が 90% 以上のシェアを占めています。 . オフライン ストレージが使用される可能性が最も高いモバイル市場で、Mozilla と Microsoft がどの標準を使用すべきかを決定することは、まったく意味を成しません。
で のコメントで、Mozilla は のコメントでは、IndexedDB を採用した理由は主に '開発者の美学' であり、JavaScript で SQL を実行するというアイデアが好きではないのだそうです。私はそれを信じていません。
-
現在提案されている標準は、劣悪で、遅く、人々がデータベースに必要とする高度な機能さえサポートしていない、極めて基本的な NoSQL 実装です。データベースを構築し、データを取り出すための定型的なコードがたくさんありますが、彼らは、人々がその上にすばらしい抽象化ライブラリを書いて、より高度な機能を提供するだろうと主張しています。2011年10月現在、それらはどこにも見当たりません。
-
彼らは、実際に動作し、主要なモバイル/タブレット ブラウザで実装されている、既存の Web SQL 標準を非推奨としました。一方、彼らの「新しく」「より良い」標準は、主要なモバイル ブラウザーで利用できません。
-
IndexedDB の仕様が標準化され、より多くの機能を持ち、主要なモバイル/タブレットブラウザに実装され、より簡単にするための素晴らしいライブラリがあるであろう次の 3-5 年間に、開発者として何を使うことになるのでしょうか?
W3C は、Web SQL Database 標準を並行して実行し続け、問題点を修正するだけでよいのです。これはすでに主要なモバイル プラットフォームをサポートしており、かなりうまく動作します。デスクトップ ブラウザのシェアが最も高い Mozilla と Microsoft がこの標準を廃止させることができたという事実は、かなり疑わしいもので、彼らが追いついて iOS/Safari や Android に対して競合するソリューションを提供できるようになるまで、モバイル Web プラットフォームの進歩を妨げようとする試みとして見ることができます。
結論として、iOS/Android の電話/タブレット デバイスで動作する、私の問題に対する解決策をお持ちの方はいらっしゃいませんか。おそらく、バックグラウンドで複数のデータベース実装をクエリ機能で使用でき、どのデータベースを優先するかを選択できる、すばらしいラッパー API があるはずです。私は以下のようなものを見たことがあります。 芝刈り機 のようなものを見たことがありますが、確かデフォルトではローカルストレージしか使えず、他のものにフォールバックしてしまいます。むしろ、Web SQL (デフォルト) を使用して、より遅いオプションを使用することをお勧めします。
解決のためのどんな助けでも大いに感謝します、ありがとう!
どのように解決するのですか?
を確認することをお勧めします。 JayData ライブラリのチェックをお勧めします。このライブラリは、モバイル機器のためのストレージに依存しないデータアクセスレイヤーを作成することを正確な目的としています。JayData は、モバイル デバイスのためのストレージに依存しないデータ アクセス レイヤーを作成することを目的とした抽象化レイヤーを提供します。 JavaScript 言語クエリ (JSLQ) と JavaScript CRUD サポートによる抽象化レイヤーを提供し、オフラインとオンラインの異なるデータストアのタイプで全く同じように作業することができます。JayData は、複雑なエンティティや、ローカルまたはリモートのエンティティ関係の処理をサポートします。
執筆時点では、JayData は以下のストアまたはプロトコルをサポートしています: webSQL(sqLite)/IndexedDB/OData/YQL/FBQL.
異なるシステムが異なるストレージエンジンを提供するというあなたの特定の問題は、JayDataのプロバイダーフォールバック機能で簡単に対処できます:それは、コンシューマーコードに対して同じAPIを提供しながら、見つけることができるどんなストレージ層でも使用します。
WebSQL が 2012 年までに廃止されることについてですが、執筆時点では、Samsung SmartTV や amazon Kindle を含む 95% のデバイスをまだカバーしているのは WebSQL です。 JayData で WebSQL ユニット テストを実行する Kindle をチェックアウトする。 .
関連
-
[解決済み] HTML5 ローカルストレージとセッションストレージの比較
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] オフラインのWebアプリケーションのための画像データの保存(クライアントサイドストレージデータベース)
-
AndroidとiOSのローカルストレージはどのくらい永続的なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行