使用AJAX响应最小化SPA

时间:2016-06-05 22:29:34

标签: javascript ajax mongodb express mean-stack

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

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

例如,我有一个发出post请求的addToCart方法。在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请求返回的任何可能的信息并使用它来减少进一步的请求,或者这种想法会导致复杂的代码和很少的性能优势?

干杯! 泰勒

1 个答案:

答案 0 :(得分:1)

您在MEAN堆栈上,这意味着您需要通过webservices(主要是REST)将数据从后端导出到前端,并且您可以通过在访问某些路由时生成json对象来轻松实现这一点创建RESTful API 该API将通过$ http或$ resource模块在AngularJS中生成的SPA中使用。(非内置的angular-resource)。
无论如何,您需要配置状态(而不是路由),以便您的状态机在应用程序中调用与请求状态相关的数据,默认情况下它是异步执行的。

如果你真的想"停止击中后端"使用您的AJAX,您需要使用$ provider,因为它只运行一次,而应用程序将从该数据提供程序获取数据,实际上是从Web服务获取数据。(您需要这样做)。 />
您还希望减少SPA中的POST方法,因为无法减少负载(除非您正在寻找基础架构解决方案AKA nginx作为事实解决方案..)。
祝你好运..