使用AJAX响应来最大限度地减少SPA中的进一步请求



我正在制作一个电子商务应用程序(MEAN),在发出AJAX http请求时一直遇到同样的问题。我使用的是MEAN,单页架构是这个问题的基础。

我读到过只有在绝对必要的情况下才应该使用http请求,但我想知道这能走多远。我应该收集必要的http请求返回的所有信息,并使用它来减少进一步的请求,还是这种想法只会导致复杂的代码和很少的性能优势?

例如,我有一个addToCart方法,它发出post请求。在post中,它首先检查product数据库以确保物品有足够的库存,然后在添加之前检查user数据库以确保其不在购物车中。

张贴请求:

.post(auth, function(req, res, next){
var newCartItem = {
product: req.body._id,
quantity: req.body.quantity
};
function addCartItem(){
//Checks user.cart.product to ensure that item isn't already in cart
User.update({username: req.payload.username, 'cart.product': {$ne: newCartItem.product}},
{$push: {cart: newCartItem}},
function(err, user){
if(err){return next(err);}
if(!user.nModified){
res.json({message: 'Item is already in your cart.'});
}else{
res.json({message: 'Item added to cart', addedProduct: newCartItem});
}
}
);
}
//Checks product database to ensure sufficient inventory(quantity)
Product.update({_id:req.body._id, quantity: {$gte: req.body.quantity}}, {$inc:{quantity: -req.body.quantity}},
function(err, product){
if(err) {
return next(err);
}else if(product.nModified === 0) {
res.json({message: 'Product no longer has sufficient quantity in stock.'});
}else{
addCartItem();
}
});

如果我真的想最小化http请求,我可以让Product.update回调将产品信息返回给客户端(在res.json中),然后在发出服务器请求之前,该信息可以用于客户端对特定产品的库存进行后续检查。此外,如果库存充足,并且产品已添加到购物车中,我可以让User.update回调返回user.cart,这样客户端就可以知道,并在发送任何后续请求之前验证正在添加的项目是否不在用户的购物车中。

起初,这种问题似乎是一个孤立的案例,直到我开始看到它到处都是。我知道这在一定程度上是基于观点的,但我在很多情况下都遇到了这个基本问题,以至于我冒着被激怒的风险。

重申一下,我的问题是:我应该收集必要的http请求返回的任何可能的信息,并使用它来减少进一步的请求,还是这种想法只会导致复杂的代码和很少的性能优势?

干杯!Tyler

您使用的是MEAN堆栈,这意味着您需要通过Web服务(主要是REST)将数据从后端导出到前端,并且您可以通过在访问某些路由时生成json对象来轻松实现这一点,从而创建RESTful API
API将通过$http或$resource模块在AngularJS中生成的SPA中消耗。(未内置角度资源)
Eitherway,您需要配置状态(而不是路由),以便您的状态机在应用程序中调用与请求状态相关的数据,并且默认情况下,它会按时间执行

如果你真的想用AJAX"停止访问后端",你需要使用$provider,因为它只运行一次,应用程序将从数据提供商那里获取数据,而该数据提供商实际上持有它从Web服务中获得的数据。(你需要这样做)

您还想减少SPA中的POST方法,因为没有办法减少负载(除非您正在寻找一个基础设施解决方案AKA nginx作为一个实际解决方案..)。
祝您好运。。

最新更新