Dav*_*iov 6 optimization performance gzip web-applications
我有一个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中的内部或长期).
您在问题的最后写下了以下内容
注意:请不要了解我是否应该发送30,000条数据的细节 - 这不是我的选择,我无能为力(我也无法改变Guids)在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,我可以举一些例子,清楚我的意思.
小智 0
那么你想要完成的是字典压缩,对吧? http://en.wikibooks.org/wiki/Data_Compression/Dictionary_compression 您将得到的不是 16 字节长的 Guid,而是 4 字节长的 int。您将得到一个充满键值对的字典,它将每个 guid 与某个 int 值相关联,对吧?当有许多具有相同 id 的对象使用时,它会减少您的传输时间。但在传输之前进行压缩和传输之后进行解压缩会花费CPU时间。那么您传输的数据量是多少?是mb/gb/tb吗?在发送之前有什么充分的理由对其进行压缩吗?