3

我正在编写一个节点应用程序,需要提供一堆 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
                    }
                });
4

2 回答 2

4

真的没关系。与数据库访问(或基本上任何涉及网络或磁盘活动的东西)相比,序列化/反序列化 JSON 的速度非常快。不要过度优化不需要优化的东西。

但是,如果您想在不进行任何服务器端处理的情况下将数据传递给客户端并且已经获得 JSON 字符串,那么在服务器上对其进行反序列化然后再次对其进行序列化以将其传输到客户端是没有意义的,这将再次必须反序列化它。

于 2013-05-07T19:54:11.273 回答
2

如果这是您打算维护、扩展或支持向前发展的服务,那么我可能会在服务器上进行解析。如果不是,并且您只是出于某种短期需求或出于某种原因出于战术考虑而将其干扰,那么我将在客户端上对其进行解析。无论哪种方式,我都希望 JSON 解析/序列化的影响可以忽略不计……这就是为什么我在做出决定时会考虑其他因素。

如果您使用服务器端解析,出于多种原因,您将处于有利位置。首先,您将能够为这些数据提供更好的合同(例如,将数据分解为有凝聚力的职责集。隐藏泄漏/丑陋的细节。减少和修剪有效负载的大小,使其适合您)。其次,如果您选择使用不同的数据提供者或底层数据提供者发生变化,或者您希望更改任何实现细节(例如您的解析算法),您可以将这些决定从客户端隐藏起来。此外,您在服务器上用于扩展或优化服务性能的选项很多(例如缓存、解析优化、附加机器等),这些实现细节也可以对消费者隐藏。

总而言之,我会提供一组很好的合同并在服务器端进行解析以隐藏我的实现细节,除非情况(例如,时间短,这是一个原型)另有规定。

于 2013-05-07T20:28:49.307 回答