2012-04-30 149 views
2

我真的很喜歡最近與Meteor做實驗,到目前爲止,我發現它是一個非常整潔的小應用程序。我決定將一箇舊的應用程序遷移到流星,並已取得一些進展。該應用程序是一個實時比分更新程序。雖然我已經能夠證明我發現的兩個問題,可能會阻止我使用它的概念。流星的可擴展性和性能

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中加載一個頁面時,右上角的'progress'動畫不停地旋轉,從我看到的5%的電池大概在10分鐘內。

問題2 - 連接如何保持瀏覽器的活躍狀態?有什麼可以做的,以減少對移動瀏覽器的影響?

謝謝。

回答

2

1: 當流星網站沒有計劃的時候,流量網站在一天內就能處理大量流量的情況下可以很好地擴展應用。 你錯誤的原因是你不能調用連續相同的很多語句,只要我知道js認爲它正在崩潰。我認爲有辦法改變這個或者繞過它。

至於測試他們做了我不確定,我個人會通過數據導入數據並插入它,而不是像許多電話那樣(我認爲這是問題)導入數據。

2: 這是一個錯誤,它正在旋轉,但它不斷地檢查阿賈克斯或類似的方法。 在未來的套接字將被使用,我期望會更有效率。 也許有一種方法可以減少未來的查詢次數和網絡密集度。

+0

就瀏覽器而言,旋轉實際上按照設計工作。它是由AJAX觸發的:AJAX意味着某些東西的加載,如果有東西加載輪子旋轉:) –

+0

爲下面的備份而歡呼:),是的,不確定我想在AJAX加載時進行旋轉。 – jonathanKingston

+0

感謝您的更新。我已經能夠按照您的建議稍微改變我的代碼來解決問題了。我已在下面發佈了更新後的代碼和第2條評論的回覆。謝謝。 – afeltham

-7

jonathanKingston說,

1:應用程序是在流星網站 管理的推出只是流量的巨量罰款都在 有一天,當他們還沒有計劃在它的情況非常可擴展。

這很搞笑,因爲Meteor的主頁不是Meteor應用程序,並且由於安全性/可伸縮性的原因,他們不得不將所有Meteor演示應用程序脫機。

展望下一代FUD被由漂亮的演示和黑客新聞的帖子被騙愚蠢的程序員傳播。

+1

如果您抽出時間來看看Meteor.com源代碼,你會看到它的流星運行.. –

+0

我認爲在推出時,流星是,你會發現現在Meteor.com不是在使用至少流星的開發分支版本,因爲它是呈現HTML。 流星不是不安全的,文檔應用程序仍然是一個應用程序,因爲它一直是:)。 – jonathanKingston

0

提供了一個更新的源代碼,以上面的問題:

正如答案的人討論,這個問題似乎是插入線的數量,它是破的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); 
       }); 
     }); 
    } 
    }); 
} 
+0

我強烈建議你在服務器端創建一個fixture文件,如果你的集合不存在,就運行一次啓動遷移,並考慮在你的數據上添加索引,而不是通過ajax來完成。它大大加快了速度。 – Anzel