Heroku中NodeJ的内存问题

时间:2017-03-07 18:15:59

标签: javascript node.js memory heroku memory-management

你好吗?

我正在创建此应用程序,必须像1000张照片一样下载并调整大小。

我正在使用mikeal的请求包来下载图像,并使用图形magick来调整它们的大小。 此外,我正在使用承诺对该过程进行并列化。

事情就是heroku失败并说

var request = require('request')
var mkdirp = require('mkdirp')
var fs = require('fs')
var path = require('path');
var randomstring = require('randomstring');
var appDir = path.dirname(require.main.filename);
var util = require('util')
var gm = require('gm');
var sqldb = require('../../sqldb');
var MlStock = sqldb.MlStock;


 MlStock.findAll({})
  .then(fixProductsImages)

function fixProductsImages(products) {
 return Promise.all(products.map(fixProductImages))
}

function fixProductImages(product) {
 return Promise.all(product.imageVariations.map(makeImageLocal))
 .then((imageVariations)=>{
  // console.log('Updating product images: ', product, '\n', imageVariations)
  product.update({
    imageVariations: imageVariations
  })
 })
}

function makeImageLocal(imageObject) {
 return new Promise((resolve, reject) => {
  request({ url: imageObject.url, encoding: 'binary' }, function(err, res, body) {
   if (err) {
    console.log(err);
    resolve(imageObject);
   };
   mkdirp(path.join(appDir, 'tempImages'), function(err) {
    var random = randomstring.generate();
    var imagePath = path.join(appDir, 'tempImages') + '/' + random + '.jpg';
    fs.writeFile(imagePath, body, 'binary', function(err) {
     if (err) {
      console.log(err);
      resolve(imageObject);
     };
     gm(imagePath)
      .fuzz(1, 1)
      .trim()
      .resize(500, 500)
      .gravity('Center')
      .extent(500, 500)
      .compress('BZip')
      .write(imagePath, function(err) {
       if (err) {
        console.log(err);
        resolve(imageObject);
       };
       console.log("The file was saved!  -- ", imagePath);
       resolve({ url: imagePath })
      });
    });
   })
  })
 })
}

我正在使用自由计划,因为它是我自己使用的应用程序,我希望能够支付更多内存。

如何重构我的代码,以免内存不足?

我的代码看起来像这样:

**<!-- Bootstrap Core CSS -->
 <link href="css/bootstrap.min.css" rel="stylesheet">
 <!-- Custom CSS: You can use this stylesheet to override any Bootstrap styles and/or apply your own styles -->
  <link href="css/custom.css" rel="stylesheet">**

0 个答案:

没有答案