我正在编写一个节点应用,需要服务一堆JSON地图数据。为了正确显示数据,必须对其进行解析。
现在我想知道在服务器上解析是否更好(并将此解析后的数据对象发送到客户端)或发送纯json并在ajax调用后在客户端解析它。
我最担心的是在服务器上执行此操作是因为许多同步查询可能会使一大群人放慢速度。
服务器端代码选项:
var data = [];
db.simple_query([{ask: COMPLEX QUERY TO RETURN DATA AS JSON }], function(err, geo_data){
if (err) {
callback(err);
}
else{
data.push(JSON.parse(geo_data.rows[0].row_to_json));
callback();
}
});
客户端代码选项:
$.ajax({
type: 'GET',
url: url,
success: function(data){
if (data){
$.each(data, function(i, geo){
L.geoJson(JSON.parse(geo)).addTo(map);
});
}
},
error: function(data){
//Error Handling
}
});
答案 0 :(得分:4)
真的没关系。与数据库访问(或基本上涉及网络或磁盘活动的任何东西)相比,序列化/反序列化JSON的速度非常快。不要过度优化不需要优化的事情。
但是,如果你想将数据传递给客户端而没有任何服务器端处理和已经获得了一个JSON字符串,那么在服务器上反序列化它然后再次序列化它将毫无意义将其传输给客户端,客户端将再次对其进行反序列化。
答案 1 :(得分:2)
如果这是您打算维护,扩展或支持向前发展的服务,那么我可能会在服务器上进行解析。如果没有,你只是出于某种短期需要或出于任何原因的战术,那么我只是在客户端解析它。无论哪种方式,我都希望JSON解析/序列化的影响可以忽略不计......这就是为什么我在做出决定时会考虑其他因素。
如果您使用服务器端解析,由于多种原因,您将处于有利位置。首先,您将能够为此数据提供更好的合同(例如,将数据分解为有凝聚力的责任集。隐藏漏洞/丑陋的细节。减少并修剪有效负载的大小,使其对您有意义)。其次,如果您选择使用不同的数据提供程序或基础数据提供程序更改,或者您希望更改任何实现细节(例如,您的解析算法),则可以从客户端保留这些决策。此外,您在服务器上用于扩展或优化服务性能的选项很多(例如缓存,解析优化,其他计算机等),这些实现细节也可以向消费者隐藏。
总而言之,我提供了一组很好的合同并执行解析服务器端以隐藏我的实现细节,除非情况(例如,短时间线,这是原型)另有规定。