2

私は最近Meteorの実験を本当に楽しんでいますが、これまでのところ、Meteorは本当にすてきな小さなアプリであることがわかりました。古いアプリケーションをmeteorに移行することを決定し、すでにいくつかの良い進歩を遂げています。アプリケーションは、ライブスコア更新アプリケーションです。コンセプトを示すことができましたが、それを使用できない可能性のある2つの問題を見つけました。

1)データは以前にmySQLデータベースに存在していたため、データを.jsファイルにエクスポートするスクリプトを作成しました。同様のことをしたいと思うかもしれない人のために、PHPコードの主要部分はここにあります。

$handle = fopen($output_file, "w");

foreach ( $tables as $key => $table ) {
        $query = "SELECT * FROM $table_prefix$table";
        $res = mysql_query($query);
        while ( $row = mysql_fetch_assoc($res) ) {

                $newTableName = "";

                $parts = explode("_", $table);
                foreach ( $parts as $k => $v ) {
                        $newTableName .= ucfirst($v);
                }

                $string = $newTableName.".insert({";
                $first = true;
                foreach ( $row as $columnName =>  $value ) {
                        if ( !$first ) { $string .= ", "; }
                        $string .= "$columnName : \"$value\"";
                        $first = false;
                }
                $string .= " });";
                print $string . "<br>";

        }
}

これはほとんどのテーブルで機能しましたが、特にすべてのイベント情報を含む1つのテーブルがあります。この個別の.jsファイルには3600行の挿入ステートメントが含まれており、これがアプリケーションにあると、アプリケーションが壊れているように見えます。たとえば、ファイルの名前を「event.js.save」に変更すると、アプリケーションは正常になります。具体的には、この.jsファイルを配置すると、アプリケーションをデプロイするときに取得します。

mac:app user$ meteor deploy <domain>.meteor.com
Deploying to <domain>.meteor.com.  Bundling ...

Errors prevented deploying:
Exception while bundling application:
RangeError: Maximum call stack size exceeded

したがって、質問1は、このアプリケーションのスケーラビリティをテストするためにどのくらいの作業が行われたかということです。

2)私が抱えている2番目の問題は、モバイルのパフォーマンスに関するものです。私は長い時間をかけてすべてのプラットフォームでスタイルシートの見栄えを良くしてきましたが、モバイルのバッテリーがどれだけ早く消耗するかを見て本当にがっかりしました。

Safariにページをロードすると、右上の「進行状況」アニメーションが常に回転しており、これまで見てきたことから、バッテリーの5%がおそらく10分で消費されます。

質問番号2-ブラウザの接続はどのように維持されますか?モバイルブラウザへの影響を減らすためにできることはありますか?

ありがとう。

4

3 に答える 3

2

1:流星サイトが、計画していなかった1日で大量のトラフィックを処理して打ち上げをうまく管理した場合、アプリケーションは非常にスケーラブルです。エラーの理由は、jsがクラッシュしていると私が知っている限り、同じである多くのステートメントを連続して呼び出すことができないためです。ただし、これを変更したり、回避したりする方法はあると思います。

彼らが行ったテストに関しては、私にはわかりませんが、個人的には、データを何度も呼び出すのではなく、データを繰り返して挿入することでデータをインポートします(これが問題だと思います)。

2:それは回転しているバグですが、ajaxまたは同様のメソッドを常にチェックしています。将来的には、より効率的なソケットが使用されると思います。おそらく、クエリの数を減らし、将来的にはネットワークを集中的に使用する方法があるでしょう。

于 2012-04-30T15:28:20.430 に答える
0

上記の問題に更新されたソースコードを提供する:

回答の1つで説明したように、問題は挿入行の数であり、MeteorではなくJavascriptが壊れていることであるように思われました。それ以来、私はコードを更新し、他の人が興味を持っているかもしれないと思いました。

次のPHPは、テーブルのJSON出力を提供します...

// we connect to example.com and port 3307
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
$db = mysql_select_db("databasename");
$tables = array (
        $_REQUEST["table"]
        );
$table_prefix = "tableprefix_";
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
foreach ( $tables as $key => $table ) {
        $query = "SELECT * FROM $table_prefix$table";
        $res = mysql_query($query);
        $first = true;
        print "[";
        while ( $row = mysql_fetch_assoc($res) ) {
                if ( !$first ) { print ", "; }
                $first = false;
                print ( json_encode($row) . "\n");
        }
        print "]";
}
mysql_close($link);

次に、JavaScriptで以下を使用してデータをロードできます。

Events = new Meteor.Collection("event");

if (Meteor.is_server) {
  Meteor.startup(function () {
    if (Events.find().count() === 0) {
        $.getJSON('/ajax/event.json', function(data) {
                $.each(data, function(key, val) {
                        Events.insert(val);
                });
        });
    }
  });
}
于 2012-05-03T12:12:25.440 に答える
-7

ジョナサンキングストンは言った、

1:流星サイトが、計画していなかった1日で大量のトラフィックを処理して打ち上げをうまく管理した場合、アプリケーションは非常にスケーラブルです。

MeteorのホームページはMeteorアプリではなく、セキュリティ/スケーラビリティの理由からすべてのMeteorデモアプリをオフラインにする必要があったため、これは陽気なことです。

かなりのデモやHackerNewsの投稿に悩まされている愚かなプログラマーによって、次世代のFUDが広まるのを楽しみにしています。

于 2012-05-01T17:58:02.307 に答える