微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

performance – 使用Guid ID将大量对象传输到客户端

我有一个Web应用程序,它使用Guids作为数据库中的PK,用于Employee对象和Association对象.

我的应用程序中的一个页面返回大量数据,显示所有员工可能参与的所有关联.

所以现在,我发送给客户端本质上是一堆看起来像这样的对象:

{assocation_id: guid,employees: [guid1,guid2,...,guidN]}

事实证明,许多员工属于许多协会,所以我在这些不同的对象中一遍又一遍地为这些员工发送相同的Guids.例如,在某些情况下,我可能会在所有协会中发送总计30,000个guid,其中只有500名独特的员工.

我想知道是否值得我构建一些我也发送给客户端的查找索引

{ 1: Guid1,2: Guid2 ... }

并用这些整数替换我发送的对象中的所有Guid,

或者,如果只是简单地压缩响应会压缩它,这种额外的努力是不值得的?

注意:请不要了解我是否应该发送30,000条数据的细节 – 这不是我的选择,我无能为力(我也无法改变Guids)在DB中的内部或长期).

解决方法

您在问题的最后写下了以下内容

Note: please don’t get caught up in the details of if I should be
sending down 30,000 pieces of data or not — this is not my choice and
there is nothing I can do about it (and I also can’t change Guids to
ints or longs in the DB).

我认为这是你的主要问题.如果您没有解决主要问题,您可以将传输数据的大小减少到10倍,例如,但仍然无法解决主要问题.让我们考虑一下这个问题:为什么要将这么多数据发送到客户端(到Web浏览器)?

需要客户端上的数据来向用户显示一些信息.显示器不是很大,一页显示总计30,000.没有用户能够掌握这么多信息.所以我相信你只显示一小部分信息.在这种情况下,您应该只发送您显示的一小部分信息.

您没有描述如何在客户端使用guid.例如,如果您在行编辑期间需要信息.您只能在用户开始编辑时传输数据.如果您需要仅为一个关联传输数据.

如果您需要直接显示guids,则无法一次显示所有信息.因此,您只能发送一页的信息.如果用户开始滚动或启动“下一页”按钮,您可以发送下一部分数据.通过这种方式,您可以真正大幅减少传输数据的大小.

如果你没有可能重新设计应用程序的一部分,你可以实现你的原始建议:通过将GUID“{7EDBB957-5255-4b83-A4C4-0DF664905735}”或“7EDBB95752554b83A4C40DF664905735”替换为123这样的数字,你可以减小GUID从34个字符到3.如果你将发送额外的“guid映射”元素数组,如

123:"7EDBB95752554b83A4C40DF664905735",

您可以将数据的原始大小减小30000 * 34 = 1020000(1 MB)至300 * 39 30000 * 3 = 11700 90000 = 101700(100 KB).因此,您可以将数据大小减少10倍.在Web服务器上使用压缩动态数据可以另外减少数据的大小.

无论如何,你应该检查你的页面为什么这么慢.如果程序在局域网中工作,那么甚至1MB数据的传输也足够快.在将数据放置在网页上时,可能页面缓慢.我的意思是以下.如果修改页面上的某个元素,则必须重新计算所有现有元素的位置.如果您首先使用断开连接的DOM对象,然后将整个数据部分放在页面上,则可以显着提高性能.您没有在问题中发布您在Web应用程序中使用的技术,因此我不包含任何示例.如果您使用jQuery,我可以举一些例子,清楚我的意思.

原文地址:https://www.jb51.cc/html/223968.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐