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,我可以举一些例子,清楚我的意思.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些