2016-01-05 76 views
0

我只是學會了如何訪問快遞局部變量在客戶端JS:客戶端VS服務器端數據操作

https://stackoverflow.com/questions/34618426/express-handlebars-local-variables-in-client-side-js

但這種蠕蟲打開了一個全新的能...現在我不知道在服務器端執行哪些數據操作(在路由內)以及在哪個客戶端執行。

例如: 這裏我剪切每個數據庫項目的描述屬性,以便前100個字符可以用作精選列表拼貼中的預覽。

//routes/index.js 
router.get('/', isAuthenticated, function (req, res, next) { 
    //Fetching data to populate newest listings collage 
    User.find({role: 'organization'}).sort({datecreated: -1}).limit(6).exec(function (err, docs) { 
    docs.forEach(function(item){ 
     item.description = item.description.slice(0,100); 
    }); 
    console.log(docs[0].description); 
    res.render('index.hbs', { 
     user: req.user, 
     orgsfeatured: docs, 
     message: req.flash('message') 
    }) 
    }); 
}); 

只是將整個對象數組發送到客戶端JavaScript進行分片才能更典型/高性能/可維護嗎?

我知道這是運行客戶端CPU負載與服務器負載之間的平衡,但必須有一些最佳實踐。如果我不清楚,請告訴我。 謝謝!

+0

只是另一個想法不知道它是否是真正的答案,但爲什麼不保留數據庫中的預覽? – itai

回答

0

以我的經驗,你不能採取「一刀切」的方法。

在您發佈的示例中,您將結果限制爲6,並截斷爲100個字符。做6片,對於任何一方來說都不會是CPU的巨大命中。如果item.description每個可能有數千個字符,那麼執行切片服務器端,以防止不需要的數據流。或者,如果成千上萬的用戶可能同時調用此代碼,並且item.descriptions接近100個字符,那麼讓成千上萬的網頁瀏覽器可以完成這項工作。

不知道你的項目的任何內容,是否有可能根本不切分說明?您可能需要使用彈出窗口中的全部描述,或者可能會在某些搜索/過濾器機制中使用它。如果你的設計規定字符串需要截斷,那麼讓CSS來完成這個任務。