【面试】如何保证百万级数据的页面被流畅地访问?

呃…又是一个“百万级”的问题,被问到的当时真被唬住了(那时候还是个靓仔 ~ 工作经验也只是三年以上五年以下,真不知道怎么回答)。现在又让我看到之前的记录找回了这个问题,我竟一下子也回答不上。我觉得还是先对这个问题进行拆解吧。“百万级数据”、“页面”、“流畅“、”访问”这四个关键字我觉得应该是跟“大数据量”、“前端”、“性能”、“请求”对标的。

首先“百万级数据”根本不会存在直接加载到前端页面这种场景吧,如果有…算我孤陋寡闻(认怂)。

这种需求只要一抛出来各位大佬们就有可能这样说:

UI 大佬:这极大影响了用户的阅读和对页面的理解,从用户体验层面这要怎样操作?

前端大佬:你真当“分页设计”是死的是么,还有渲染呢?解析呢?一大堆性能问题。

后端大佬:你百万级数据我传送都费劲儿,要是来个 BLOB 或者 CLOB 字段,这一套下来动辄都几个 G 甚至十几个 G ,不被技术总监 x 算你牛逼。

最后产品大佬:我就问一个问题,这需求谁提的? …

至于后面“前端”、“性能”和“请求”都比较好回答,就是加上“百万级数据”这个前置条件就真不好回答了。不过面试嘛,既然面试官这样问,那还是要回答的。如果实在需求是这样的话,那么我有3个不成熟的想法:

  1. 只加载用户首屏可见部分的数据,其他的数据懒加载。问题说的是“百万级数据的页面”,没有说是一次性加载还是可以分批加载,只要最终出来的结果是“百万级数据”就可以了吧(虽然有点投机取巧,但又合情合理,毕竟我们都是应试教育出来的,这种应对方式还是有的),只要是单页面模式,已经加载过的数据不需要重新加载,最终页面还是以分页的方式进行加载,效果“百万级”并且因为每次加载量少,渲染速度也不会有太大的问题应该不会产生卡顿。
  2. 对数据进行缓存,重复访问时直接读取缓存,而不是每次都重新获取数据渲染,可以大幅提高访问速度。这种虽然有点曲线救国的嫌疑,但是也是没有办法中的办法了。
  3. 合理使用SSR、预渲染等技术,首屏数据直接输出为静态HTML,减少前端操作。

目前我能够想到的基本上就是以上的这些解决方案了。不过像这种“百万级”的问题真的是在面试中经常出现,问的时候也没有实际的场景,直接就抛出这个问题未免有点太过极端。如果撇除“百万级”这个因素,如果单单是前端的性能优化我还有以下3个意见:

  1. 减少和合并页面对象,减少动态计算,尽量减少下载页面所需的域名解析次数;
  2. 静态资源通过多域名进行划分,利用好浏览器的并发连接数机制;
  3. 信息传输前采用 Gzip 压缩,减轻传输压力;

我的回答基本上就是这些了吧。

猜你喜欢

转载自blog.csdn.net/kida_yuan/article/details/132663962