2016-01-05 78 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来完成这个任务。