2

最近我真的很喜欢用 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>";

        }
}

虽然这对大多数表格都有效,但我有一张特别包含所有事件信息的表格。这个单独的 .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)我遇到的第二个问题是关于移动性能。我花了很长时间让样式表在所有平台上看起来都很好,并且看到移动设备上的电池电量耗尽的速度真的很失望。

当我在 Safari 中加载页面时,右上角的“进度”动画一直在旋转,据我所知,5% 的电池电量可能会在 10 分钟内耗尽。

问题 2 - 如何使浏览器的连接保持活动状态?有什么办法可以减少对移动浏览器的影响?

谢谢。

4

3 回答 3

2

1:应用程序具有很强的可扩展性,如果流星站点在没有计划的情况下在一天之内就可以很好地管理大量流量的发布。您的错误的原因是,据我所知,您不能连续调用那么多相同的语句,因为 js 认为它​​正在崩溃。我认为有办法改变这一点,或者绕过它。

至于他们所做的测试,我不确定,我个人会通过遍历数据并插入数据来导入数据,而不是像调用那么多电话一样(我认为这是问题所在)。

2:这是一个正在旋转的错误,但它会不断检查 ajax 或类似方法。将来会使用我希望效率更高的套接字。也许将来会有一种方法来降低查询的数量和网络密集型。

于 2012-04-30T15:28:20.430 回答
0

为上述问题提供更新的源代码:

正如其中一个答案所讨论的,问题似乎出在插入行的数量上,并且是 Javascript 破坏而不是 Meteor。我已经更新了代码,并认为其他人可能会感兴趣。

以下 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:应用程序具有很强的可扩展性,如果流星站点在没有计划的情况下在一天之内就可以很好地管理大量流量的发布。

这很有趣,因为 Meteor 的主页不是 Meteor 应用程序,由于安全/可扩展性原因,他们不得不将所有 Meteor 演示应用程序下线。

期待下一代 FUD 被漂亮的演示和黑客新闻帖子所欺骗的愚蠢程序员传播。

于 2012-05-01T17:58:02.307 回答