3

私の会社は現在、新しいアーキテクチャと、モバイルデバイスにサービスを提供するモデルに移行しています。私たちのアプリケーションは従来はWebベース(HTML5 / CSS3 / JS / PHP / MYSQL )でした。そのため、車輪の再発明( Cordova )を行わずにモバイルプラットフォームに移植したり、スタンドアロンでデスクトップに移植したりしたいと考えています(AppJS)を使用すると、ブラウザに依存するバグについて心配する必要がなくなります。また、これをより実現可能にするために 、 PHPからNodeJSに移行しています。

問題は、ユーザーがアプリケーションをオフラインで使用する機能を必要としていることです。サーバーに「同期」する前に保存できるデータの長さや量に実際の制限はありません。

AppJSでは、sqliteデータベース内に必要なだけのデータを保存できるため、これは問題になりません。ただし、WebSQLデータとcordova/phonegapの5MBのクォータに関する問題を発見しました。これは、私たちのビジネスニーズに関する明らかな技術的課題を提示します。

sqliteデータを使用できるようにするプラグインがいくつかあることを認識しています。 元のsqliteプラグイン(https://github.com/davibe/Phonegap-SQLitePlugin)にはAndroidのドキュメントがなく、他の(https://github.com/chbrody/Cordova-SQLitePlugin)ではデータ制限を指定する必要があります。明らかに不可能です。したがって、選択肢はほとんどありません。1つは、データベースをJSラッパーによって制御される複数の5MBセグメントに分割することです。

iOSとAndroidで問題なく、より大きなデータ構造を複数の5MB websqlデータベースに実行可能に分割できますか?

iOSとAndroidのwebsqlデータベースの総数に制限はありますか?

私たちが検討することをお勧めする他のオプションはありますか?フロントエンドに既存のHTML5とCSSを使用できる必要があります。

編集

私たちの元のアーキテクチャは、タブレットデバイスでは実際には機能しませんでした。これは、より安定したソリューションを構築するだけでなく、cordovaで改善することを目指しています。もともと、私たちのオフライン製品は、クライアントマシンで実行されているさまざまなアプリケーションのために、あらゆる種類のプラットフォームの問題があったServer2Goスタックで実行されていました

4

3 に答える 3

1

Androidプラットフォームの場合、ネイティブアプリを作成し、Webビューを使用してフロントエンドを表示し(HTMLを維持することが本当に重要な場合)、JavaScriptブリッジを使用して、WebViewのコンテンツがネイティブアプリ。

ただし、アプリケーションについて説明したことから、実際にネイティブアプリケーションを作成する方がよいと思います。コメントでおっしゃるように、プラットフォームを切り替える理由の1つは、制御が不足しているためです。スタックにあらゆる種類のハイブリッドアプリフレームワークを導入して、このワームの缶をすぐに再度開くのはなぜですか。

簡単に言えば、ネイティブアプローチを使用するだけで、完全に制御できるようになります(おそらく、より優れた製品になります)。

于 2012-12-05T16:29:56.943 に答える
0

一般的に言って、実装にとらわれないように、lawnchairを使用することをお勧めします。http://brian.io/lawnchair/adapters/

iOSとAndroidで問題なく、より大きなデータ構造を複数の5MB websqlデータベースに実行可能に分割できますか?

芝生について知る前に、私はWebSQLを使用してこれを実装しましたが、少し後悔しています。WebSQLデータベースは5MBを超える可能性があります。真の最大値はわかりませんが、Phonegapアプリを100 * 1024 * 1024に設定し、HoneycombAndroidで問題は発生していません。

iOSの場合、PhoneGap/iOSでSQLiteデータベースを使用できます-5MB以上が可能です。

于 2012-12-06T03:32:27.560 に答える
0

オフラインで動作し、必要なストレージ容量を備えた、真にクロスプラットフォームでクロスブラウザーのリレーショナルソリューションを入手するには、 SequelSphereを使用することをお勧めします。

これは100%JavaScriptソリューションであるため、構成ごとに異なるコードベースを必要とせずに、構成ごとに使用できるはずです。さらに、IndexedDB(使用可能な場合はLocalStorage)を使用して、データをリレーショナルテーブルに格納します。ほとんどのブラウザには、IndexedDBのストレージ容量にサイズ制限がないと思います。Firefoxには、次のように最初の50MBの制限があると思います 。IndexedDBの最大サイズ

また、「変更トラッカー」と呼ばれる新機能があり、テーブルへの変更(挿入/更新/削除)を追跡し、必要に応じてそれらを報告することにより、データ同期プロセスを大幅に支援します。

追加のボーナスとして、WebSQLとは異なり、SequelSphereは非常にJSONに対応しています。テーブルの作成はこれ以上ないほど簡単です。

db.catalog.createTable({
    tableName: "EMPL",
    columns: [ "EMPL_ID", "NAME", "AGE", "DEPT_ID" ],
    primaryKey: [ "EMPL_ID" ],
    data: [
        [0,"Bob",32,0],
        [1,"John",37,2],
        [2,"Fred",28,1]
    ]
});

データのクエリは簡単です。

var res = db.query("SELECT name, age, dept_id FROM empl WHERE Dept_ID = 2");

データの挿入/更新/削除は簡単です。

db.insertRow("empl", [3, "Sue", 26, 2]);
db.updateRow("empl", [3, "Suzy", 26, 2]);
db.deleteRow("empl", [3, "Suzy", 26, 2]);

注意すべき点の1つ:これはオフラインアプリケーションで使用されるため、カタログ全体または各テーブルの「永続性スコープ」を「SCOPE_LOCAL」に設定してください。

db.catalog.setPersistenceScope(db.SCOPE_LOCAL);
//  -or-
db.catalog.getTable("empl").setPersistenceScope(db.SCOPE_LOCAL);

ご不明な点がございましたら、SequelSphereのサポートにメールでお問い合わせください。

完全な透明性のために、私はSequelSphereの一部であり、あなたの質問に非常によく答えているようです...;)

于 2012-12-07T20:02:50.260 に答える