簡體   English   中英

使用Hapijs處理和發送大量數據

[英]Process and send large amount of data using Hapijs

我們正在使用Hapijs / React / Sequelize / MySQL。 有件事讓我感到困惑,我對此事進行了一些研究。

設定:

我們有React組件,該組件向Hapi API發出AJAX調用。 API返回一個對象數組。 這是由React顯示的。 問題:我們從表中請求數據。 該數據作為復雜對象的數組返回。 這些對象中的每一個都是序列化對象。 並且它具有許多我們不需要的其他屬性。 我們使用HAPI回復發送該對象,類似於(40k個對象):

flattenedParts.forEach(function(item) {
          item.dataValues.Product = productsMap[item.dataValues.ProductId] || [];
          item.dataValues.PartModule = partModulesMap[item.dataValues.PartModuleId] || [];
          fullObjects.push(item);
      });

      reply(fullObjects).code(200);

當代碼到達reply語句時,要花14秒才能將其作為簡單JSON對象數組發送。

對我來說,這些對象的序列化似乎需要很長時間。 因此,我考慮使用僅我需要的數據制作一個普通對象數組。 我做了這樣的事情(40k個對象)::

flattenedParts.forEach(function(item) {
          item.Product = productsMap[item.dataValues.ProductId] || [];
          item.PartModule = partModulesMap[item.dataValues.PartModuleId] || [];
          var flat = new partCreator(item);
          newParts.push(flat);
      });

      reply(fullObjects).code(200);

零件創建器功能很簡單,如下所示:

function partCreator(part){
  this.Product = {};
  this.id = part.dataValues.id;
  this.PartNumber = part.dataValues.PartNumber;
  ... 
  }

因此,最后我得到了帶有簡單對象的數組,這些對象包含我需要的數據。 現在速度約為7秒。 速度提高近50%。 但是,如果我是正確的話,它應該更快。 使用回復功能在幕后發生了什么,我該如何加快速度?

當您想返回40K(!)對象時,要做很多事情來利用性能。 您很快就會遇到擴展問題,而在大規模情況下,您將無法處理和處理服務器內存中的大量對象。 REST API的目的是真正快速地接收請求並返回少量數據。 您必須限制加載到內存中的數據量,並且不應超過100個(甚至100個很多)。 您必須擴展您的API以支持所需的所有功能(分頁,排序,搜索等),並擴展客戶端以向您的API發出更多請求。 順便說一下,在運行速度不太快的設備上運行的某些瀏覽器也會出現性能問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM