[英]Meteor server-side update/insert vs client side update/insert
我對在客戶端與服務器上更新/插入集合的優缺點有疑問。 例如,說我有一個方法,該方法采用一個當前玩家,不再將其設置為當前玩家,然后創建一個新的當前玩家。
Meteor.methods({
currentPlayer : function () {
var id = Player.findOne({current:true})._id;
Player.update(id, {$set:{current:false}});
Player.insert({current:true});
...
與在客戶端執行完全相同的操作相比,在服務器上執行此操作有什么好處:
'click #add' : function () {
var id = Player.findOne({current:true})._id;
Player.update(id, {$set:{current:false}});
Player.insert({current:true});
...
也許這兩種技術沒有本質上的重要區別或優勢。 但是,如果有,我想知道它們。 感謝您的輸入!
主要區別是延遲補償。
在Player.update/insert/remove
, Player.update/insert/remove
仍然使用Meteor.call
。 區別在於,它會在瀏覽器成功運行之前模擬其成功運行的結果。
因此,假設您的服務器位於世界另一端的某個地方,它的延遲為2-3秒。 如果使用Player.insert/update
更新播放器,它將立即反映出來,就好像它已插入並更新一樣。 這可以使UI響應。
使用Meteor.methods
等待服務器發送更新的記錄,這意味着當您更新某些內容時,將需要2-3秒的時間才能反映在用戶界面上。
使用方法可以確保以UI響應為代價將數據插入到服務器上。 (您也可以Player.insert
使用Player.insert
和Player.update
回調。
使用Meteor.methods
您還可以通過在客戶端使用要運行的模擬Meteor.method
的代碼來模擬此延遲補償效果,以模擬延遲補償。
有關如何執行此操作的詳細信息,請參見文檔: http : //docs.meteor.com/#meteor_methods
我認為Akshat有一些優點。 如果在客戶端和服務器上都定義了方法,則基本上在延遲補償方面沒有太多差異。 我認為,使用方法有兩個原因:
該操作只能在服務器上完成,否則會導致一些副作用,僅在服務器上才有意義(例如,發送電子郵件)。
您正在執行更新,並且執行更新的權限很復雜。 例如,也許只有游戲的領導者才能更新玩家的某些屬性。 這樣的情況很難用允許/拒絕規則表達,但是很容易使用方法編寫。
就我個人而言,我更喜歡在大型項目中使用方法,因為當所有更改都被迫通過一小組函數集中時,我發現更容易推斷狀態突變。
另一方面,如果您正在處理一個沒有很多復雜更新規則的較小項目,則直接收集變量的編寫可能會更快一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.