服务器端的 JSON 解析与客户端的解析
Posted
技术标签:
【中文标题】服务器端的 JSON 解析与客户端的解析【英文标题】:JSON parsing on server vs. parsing client side 【发布时间】:2013-05-01 21:33:30 【问题描述】:我正在编写一个节点应用程序,需要提供一堆 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
);
【问题讨论】:
【参考方案1】:真的没关系。与数据库访问(或基本上涉及网络或磁盘活动的任何事情)相比,序列化/反序列化 JSON 的速度非常快。不要过度优化不需要优化的东西。
然而,如果你想在没有任何服务器端处理的情况下将数据传递给客户端并且已经得到一个 JSON 字符串,那么在服务器上反序列化它然后再次序列化它是没有意义的将其传输给客户端,客户端将再次对其进行反序列化。
【讨论】:
嗯,我从查询函数中得到一个 JSON 字符串。我需要做的是在某个时候反序列化该字符串。如果我在服务器端反序列化(解析)它,它会在传输到客户端之前被序列化吗?【参考方案2】:如果这是您打算维护、扩展或支持向前发展的服务,那么我可能会在服务器上进行解析。如果不是,并且您只是出于某种短期需求或出于某种原因出于战术考虑而将其干扰,那么我将在客户端上对其进行解析。无论哪种方式,我都希望 JSON 解析/序列化的影响可以忽略不计……这就是为什么我在做出决定时会考虑其他因素。
如果您使用服务器端解析,出于多种原因,您将处于有利位置。首先,您将能够为这些数据提供更好的合同(例如,将数据分解为有凝聚力的职责集。隐藏泄漏/丑陋的细节。减少和修剪有效负载的大小,使其适合您)。其次,如果您选择使用不同的数据提供者或底层数据提供者发生更改,或者您希望更改任何实现细节(例如您的解析算法),您可以将这些决定从客户端隐藏起来。此外,您在服务器上用于扩展或优化服务性能的选项很多(例如缓存、解析优化、附加机器等),并且这些实现细节也可以对消费者隐藏。
总而言之,我会提供一组好的合同并在服务器端进行解析以隐藏我的实现细节,除非情况(例如,时间短,这是一个原型)另有规定。
【讨论】:
以上是关于服务器端的 JSON 解析与客户端的解析的主要内容,如果未能解决你的问题,请参考以下文章
android 在服务器端生成json格式数据,在客户端怎么解析
解析ajax服务请求——客户端的数据配置解析——服务端node的接收数据的解析——其他状态——fetch——ajax封装fetch