이 백엔드의로 나는 Node.js를 가진 푸른 모바일 서비스에 일하고 난 본성의 있기 때문에 타임 아웃 상황의 처리에 어려움을 겪고 :최적화 사용자 정의 API
var Dict = require("collections/dict");
var q = require('q');
var async = require('async');
exports.post = function(request, response) {
console.log('body : ' + request.body);
mssql = request.service.mssql;
tables = request.service.tables;
//Get payload from request body
// extracted parameters;
var processRecords;
var sp = new Dict();
getA(longitude, latitude)
.then(function(results) {
async.each(results,
function(value, callback) {
var zc = value.zc;
var c = value.c;
processRecord(zc, c)
.then(function(record) {
sp.add({
zc: zc,
c: c,
B: record[0],
C: record[1],
D: record[2],
E: record[3],
F: record[4],
G: record[5]
}, zc);
callback();
})
.catch(function(err) {
console.log("error is: " + err);
callback(err);
});
},
function(err) {
if (err) {
response.send(statusCodes.INTERNAL_SERVER_ERROR, err);
} else {
response.send(statusCodes.OK, sp.values());
}
});
})
.catch(function(err) {
response.send(statusCodes.INTERNAL_SERVER_ERROR, err);
});
}
function processRecord(zc,c) {
return q.all([
getB(zc)
,getC(c)
,getD(zc)
,getE(zc,c)
,getF(zc,c)
,getG(zc,c)
]);
}
function getA(longitude, latitude) {
var deferred = q.defer();
var sql = "a query from table function";
mssql.query(sql, [longitude, latitude/*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getB(zc) {
var deferred = q.defer();
var sql = " a queryy ";
mssql.query(sql, [zc, /*some param*/ ], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getC(c) {
var deferred = q.defer();
var sql = "query";
mssql.query(sql, [c /*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getD(zc) {
var deferred = q.defer();
var sql = "query";
mssql.query(sql, [zc /*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getE(zc, c) {
var deferred = q.defer();
var sql = "query";
mssql.query(sql, [zc,c /*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getF(zc, c) {
var deferred = q.defer();
var sql = "query";
mssql.query(sql, [zc, c /*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
function getG(zc, c) {
var deferred = q.defer();
var sql = "query";
mssql.query(sql, [zc, c /*some param*/], {
success: function(results) {
deferred.resolve(results);
},
error: function(err) {
deferred.reject(err);
}
});
return deferred.promise;
}
지금이야 예쁜 데이터 집중 형 사용자 정의 API. getA()에서 얻은 결과는 2 ~ 200까지 다양하며, 이러한 많은 데이터 이동을 줄이기위한 귀하의 제안을 원합니다.
나는 그것을 개선 할 사항 몇 가지에 대해 생각, 내가 생각하십니까 알려 :
- 제한을 게타의 결과()
- 가 얻을 SQL 서버에서 테이블 값 함수를 확인 기능을 내 필터에 따라 모든 데이터가 양식 클라이언트를받습니다.
그러나 위의 각 다시 무승부가 :
은 첫 번째 옵션과 함께 예를 들어 내가 수있을 것입니다 결과를 원하는 얻을 수있는 것이 무엇인가 내가 클라이언트 최소 10 개 최고의 명소와 게타를 제공해야처럼() 함수는 나를 10을 반환 할 수 있습니다. 그러나이 레코드에서 필터를 수행하면 더 좋은 결과를 얻지 못합니다.
테이블 값 기능 옵션은 성능을 제공하지만 사용자에게 즉시 반환 할 수있는 데이터를 반환하지 않습니다. 마우스 오른쪽 단추로 데이터가 잘 구성되어있다 :
{ ZC : ..., C를 ..., 는 B : [], 는 ..., ...
}
나에게주십시오 모든 포인터.
감사합니다, Attiqe
P.S : 내가 준 모든 함수 이름은 질문을 게시의 이익을 위해 가상 있습니다.