公司最近招了个前端,我是写 Python 后台的,他主要负责前端,主要就是做企业工具类的,放在外网给合作伙伴的业务人员用。
几个月下来开发过程中也没什么问题,那个前端最后开发倒是开发出来了,但是就是体积有点爆炸,6MB+的体积,经过 nginx 压缩也只能 5MB 的样子。我很纳闷不就几个页面吗?登录页、图表、表格,功能页也就二十来个,讲道理应该也没什么东西吧,他用的好像是 raect,吹的还很牛 B,什么单页面应用,函数式编程,组件化模块化。
然而每次打开页面都要等个半钟,我们外网的小水管支撑不了这么多 4MB+的一次性请求,有时候用户用着不爽了干脆就投诉到我们老总了,搞得我每次都很尴尬。他们的投诉理由是服务器响应慢、当机了。。老总也天天问我怎么回事,能不能搞定,我说这是前端的问题他不信。。。
所以不得不感叹,现在的前端发展路线是不是走歪了?我记得以前我写个 login.html 效果贼漂亮,2s 就加载进来了,我该如何和前端沟通?是不是技术选型上这个 raect 不太合适呢?
![]() | 1 jasonyang9 2018-12-10 17:03:51 +08:00 2 个地方都打成 raect 不是强迫症都不能忍了,自动 TAG 都歪成 raect 了 |
![]() | 2 yidinghe 2018-12-10 17:05:29 +08:00 ![]() 自从有了 electron,我再也不觉得 Java 桌面应用打开慢了。 |
![]() | 3 wly19960911 2018-12-10 17:09:40 +08:00 ![]() 单页面应用当然体积大,那我司的应用( angular )用户是不是要报警了? 不过经过压缩的压缩包只有 6 M,首屏 gzip 加载 1.2 M,我不会 react,react 没有模块化的加载吗,这样基本不可能每次请求 4m 啊,而且水管小不考虑下 CDN 吗。 ![]() |
4 TomatoYuyuko 2018-12-10 17:11:08 +08:00 不上单页浑身难受系列 20 个页面直接写就行了,单页不做优化初次加载就是会慢一些 |
5 sherryqueen 2018-12-10 17:12:14 +08:00 不做分包的吗? |
![]() | 6 my101du 2018-12-10 17:13:38 +08:00 可能把本来放到 dev-dependency 的放到正式打包列表里面去了.... 毕竟以前我也经常这么干,然后骂 antd pro (匿) |
![]() | 7 cstome 2018-12-10 17:15:08 +08:00 React 不太清楚,像 Vue,不同模块是可以懒加载的,不一定要打包成一个 JS。 SPA 应用用 CDN 分发比较合理。 好吧,我用过的大部分 SPA 应用体验起来确实不咋地,所以我也不认可盲目追求 SPA 的行为。 |
![]() | 8 jy02534655 2018-12-10 17:15:51 +08:00 这个没加缓存么,加了缓存的话会好点,也就是首次访问比较慢。感觉还是前端能力问题吧... |
![]() | 9 abelmakihara 2018-12-10 17:16:29 +08:00 你先让他做成按需加载的 |
![]() | 10 xrr2016 2018-12-10 17:16:49 +08:00 登录页、图表、表格,功能页也就二十来个 |
![]() | 12 jy02534655 2018-12-10 17:27:35 +08:00 @xrr2016 用到这些可以调整加载策略的,启动的时候不加载,界面出来之后再偷偷加载就行了。 |
![]() | 13 banricho 2018-12-10 17:30:45 +08:00 ![]() 水平问题不要怪技术栈 |
14 ShineSmile 2018-12-10 17:34:38 +08:00 动静分离 异步加载 禁不住想起技术栈鄙视链 后端瞧不起 web 端 web 端瞧不起桌面端 |
![]() | 15 lygmqkl 2018-12-10 17:36:46 +08:00 合理的设计思路和系统架构(前端) 模块+异步加载 启用压缩 CDN 或者类似 另外。。。少加载点不需要的库。。。 |
16 sucai 2018-12-10 17:37:36 +08:00 按需加载+gzip 压缩了解一下,估计最后可以做到 1M 以内,我们现在的 500 多 K,也是引了两个图表库 |
17 laike9m 2018-12-10 17:37:45 +08:00 via Android ![]() 你做个最简单的页面,同一套后端,然后加载速度巨快,老版能不信是前端问题? |
![]() | 18 tao1991123 2018-12-10 17:37:55 +08:00 你不懂 + 他太水 = react 不适合你们的偏见 |
![]() | 19 learnshare 2018-12-10 17:38:56 +08:00 跟技术选型有关,但并不怪 React |
![]() | 20 yhxx 2018-12-10 17:48:37 +08:00 我理解你是在吐槽前端水平,不过 6M 的文件为什么 nginx (应该是 gzip 或者 deflate 吧?)压缩之后变成 4M+? 正常情况应该是 1-2M 左右才对吧? |
![]() | 21 yhxx 2018-12-10 17:49:38 +08:00 “我们外网的小水管支撑不了这么多 4MB+的一次性请求” 这么大的文件居然没有 CDN ?运维是不是也要分点锅(手动滑稽 |
![]() | 22 dun602728596 2018-12-10 18:05:13 +08:00 水不是问题,问题是俩人居然都不好好找找问题 |
![]() | 23 gamexg 2018-12-10 18:07:32 +08:00 后端,临时学习 vue 写了个后台,带图表,整个也 2M,压缩只有 1M 多。 |
![]() | 24 wanghao2018 2018-12-10 18:08:19 +08:00 用浏览器打开 network 看看哪一块体积大,分析分析啊 , 哪有 6 兆的网站... |
25 xichengh 2018-12-10 18:13:43 +08:00 只能说你们的前端菜。。。 |
![]() | 26 Biwood 2018-12-10 18:20:52 +08:00 五线小厂,九流程序员的日常 |
27 v2chou 2018-12-10 18:26:00 +08:00 让他优化 还有 gizp 压缩后怎么还有这么大 |
28 VDimos 2018-12-10 18:29:15 +08:00 via Android 这事儿 react 不背锅,世界上那么多大型网站都运行在 react 上,从你们的程序员身上找问题 |
29 KgM4gLtF0shViDH3 2018-12-10 18:31:08 +08:00 via iPhone 比我们这个好多了,我司前端不会写网络请求…… js 一律不会,招人又不让我给面试 |
30 Heavytiger 2018-12-10 18:31:19 +08:00 我移动端,也做过 react。页面打开很快,就是请求 API 要慢点。感觉应该是后端 API 的问题。因为页面要等 api 返回数据,你半天不返回,你怪前端,这就不应该了。我就遇到过这个问题。上家公司,就找我,我把 api 请求时间发过去,10 几秒,立马就不找我了。 |
![]() | 31 no1xsyzy 2018-12-10 18:33:35 +08:00 SPA 的话 6M 一般大小,主要还是 1. 按需加载(由 Webpack 提供,楼上几位说 Vue 只是因为 Vue 特地说了这点(难道说 Vue 写出来经常比 React 大所以……)); 2. 分发机制( CDN,现在家用 20Mbps 打底吧…… 6/(20/8)= 2.4 两秒内没有任何问题)。 其中技术含量(难度) 1>2,体验优化 2>1。不过 1 能给 2 省钱。 但还有……没有设计渐进体验吗? NoScript 用户感 @yhxx 因为打包出来的 dist 6M 是已经混淆过的,函数命名都是单字母,信息量并不高,主要压缩掉的都是 `function(){` 和 `","`。说不定是因为假的函数式编程,所以 `function(){` 少了,能压缩的就不多了。 |
![]() | 32 sammo 2018-12-10 18:35:59 +08:00 ![]() 古典软件工程,追求的是 高性能、节省内存、节省硬盘空间、软件体积小。典型的就是 CHKenPlayer,一个不到 100KB 的软件 可以播放各种音频还有流媒体。 内存不就是拿来用的? 硬盘加钱 上 SSD 阿 摩尔定律阿 旧机器就是要淘汰的 升级你的系统阿 这是你会听到的。当然 他们早就被看透了,也是不可能摧毁到对于古典软件工程真正有追求的人的,但是他们会稀释掉这个 “盘子” ,稀释的结果就是 改变人们对于 “古典软件工程” 的看法。当然 对于古典软件工程真正有追求的人 是不在意的,因为他们知道这是怎么回事。 但是,在软件使用领域,一股 “消费、购买、系统升级” 的风气,逐渐弥漫开来 就像 当一群起哄的人坐在整个教室里的座位上,那么只能迎来更多乐于起哄的老师。当然,对于古典软件工程真正有追求的人 是不会被 劣币驱逐良币的,但 当那些人成为了 “老师” 的时候 ( 甚至所谓了借助开源的噱头 ) ,那么 在软件使用领域,可想而知,发展方向会如何 |
![]() | 33 sammo 2018-12-10 18:39:58 +08:00 ![]() 甚至所谓了借助开源的噱头 -> 甚至借助了所谓的‘开源’的噱头 |
![]() | 34 ayase252 2018-12-10 18:52:03 +08:00 性能优化这方面要具体问题具体分析吧。像从减少体积方面就有代码分离和模块懒加载可以搞事情。 |
35 feverzsj 2018-12-10 18:53:07 +08:00 还有比阿里系更卡的前端吗? |
36 RqPS6rhmP3Nyn3Tm 2018-12-10 18:58:58 +08:00 via iPad ![]() 程序员水平肯定是越来越下降的啊,毕竟程序员的时间比电脑贵。上古时代的程序员我是真的敬佩,那帮做 8bit 游戏的,都是魔鬼吧 |
![]() | 37 ccbikai PRO 是你同事技术不行 |
38 moocean 2018-12-10 19:10:19 +08:00 我打包之后 20 兆,按需加载也很快啊,我们后台不会 gzip,哎 |
![]() | 39 wly19960911 2018-12-10 19:20:09 +08:00 @BXIA #36 8bit 游戏的的确牛逼,还一个是 8bit 音乐的,因为他们不仅要会音乐,而且还要会汇编...... |
![]() | 40 yhxx 2018-12-10 19:22:24 +08:00 |
![]() | 41 largecat 2018-12-10 19:25:48 +08:00 via Android 前端要抢后端的活,搞那么多干嘛呢, 后端给他一堆 api 就行了,前端把 html 码漂亮点比什么都强,速度快不快就是后端的能力了 |
![]() | 42 no1xsyzy 2018-12-10 19:26:55 +08:00 @yhxx gzip 不是字典+熵的压缩吗?我说的 function(){ 是字典啊 就像 jpg 再压缩效果不太好,如果本身熵基本满了实际上也压不了多少的。 |
![]() | 43 no1xsyzy 2018-12-10 19:32:32 +08:00 @largecat SPA 不了解一下吗?说的是界面加载不快啊,API 的环节甚至还没出现,就已经慢了,那不是前端的事? 一个说法称一个界面加载 8 秒以上 90% 的人会失去耐心关闭界面(来源:七牛的广告)。 码得漂亮用户开不出没用的呀。 |
![]() | 45 wly19960911 2018-12-10 19:37:50 +08:00 @no1xsyzy #43 8 秒?首屏加载不应该超过 1M 吧。至少每个 SPA 一个首页,一个登录,基本过了这两关开始就压力减少很多了,首页和登录压不下来那真的有问题了。 |
46 wee911 2018-12-10 20:02:51 +08:00 可以延迟加载的啊,分开打包 |
![]() | 47 aaronly 2018-12-10 20:47:17 +08:00 看了下我司的 React,JS + CSS 240K。 吓死我了,我还以为现在单页都是用 M 做单位的。 |
![]() | 48 yy77 2018-12-10 20:52:03 +08:00 现在 google chrome 不是都带 network 分析的么?拉个图就知道到底是前端还是后端的问题了。就算是不懂的老板也很容易解释的。 |
49 royzxq 2018-12-10 21:00:01 +08:00 这不明显人的问题吗。。create-react-app 构建的项目自带 build 之后 analysis 可以看东西的大小。 什么? 自己配的 webpack, 自己配的 webpack 会搞出这么奇葩的东西? 还有就是 webpack4 已经可以通过简单的配置分 chunk 了, 以及上面说的 vue 懒加载其实是 webpack 的功能。 总结一句话, 人菜不要怨栈。 就算你是 react, 照样怼出来具名路由和路由钩子( react-router v4 )。 最后一句,CRA 官方的脚本真的 like a shit. |
50 royzxq 2018-12-10 21:01:19 +08:00 这个问题就算让他不写前端,直接套模板用 jq 之流也是一样的。 |
52 eslizn 2018-12-10 22:18:37 +08:00 后端狗的开发机一直觉得性能不错( i7/16G/SSD )直到我用了某前端框架的 webpack |
![]() | 53 lwbjing 2018-12-10 22:21:35 +08:00 开发 5 分钟,配置 2 小时... |
![]() | 54 xiangyuecn 2018-12-10 22:40:27 +08:00 ![]() 以前美工也是做个轮播图几个 mb 的导出来也不调一下品质,臭骂几顿就 300k 以下了。 今天刚改版好一个录音工具,github 测试页面,把 mp3、ogg、wav、webp 编码器全部加载出来,还带个 jquery。你猜花了 github 多少流量? 588kb ! gzip 压缩了近 3 倍大小,哈 https://xiangyuecn.github.io/Recorder/ |
55 o0 2018-12-10 23:37:50 +08:00 via iPhone 把前端文件单独放云存储可解吧,再套个 cdn,你们都省事儿。 |
56 RaymondYip 2018-12-11 00:22:43 +08:00 明显是水平问题,就不要说框架了 |
![]() | 57 no1xsyzy 2018-12-11 11:17:10 +08:00 @wly19960911 所以说需要代码分块啊,不分块在登录之前先要把所有模块给你加载好,这谁顶得住呀.jpg @yhxx 其实还是碰运气吧,混淆本身是个破坏原本信息的行为,但熵减得可能并不如长度减少得多(甚至还有增加熵的可能)。有可能还是个命中 gzip 盲点的数据?实际上接触 .min.js 前谁也说不清到底能压多少。虽然一般可以对代码给个高期望,但也是可以落空的。 |
![]() | 58 yhxx 2018-12-11 11:50:19 +08:00 @no1xsyzy 确实是运气。。。不过一般的 js 代码 gzip 掉个 60%还是可以期待的 其实楼主这种情况就是前端懒得搞。。。2 秒搞到 0.5 秒可能很难,从半分钟搞进 5 秒能做的太多了。。。 |
![]() | 59 encro 2018-12-11 12:44:07 +08:00 连浏览器开发者工具都不会用么。随便看下就知道是哪里慢了。 |
![]() | 60 liuxey 2018-12-11 12:46:07 +08:00 既然你是负责后端的,就不要和他扯前端技术,看你的描述,应该也没有性能测试之类的环节, 那么很简单分开部署,服务器加监控,每天出报告,一目了然! |
![]() | 61 q397064399 2018-12-11 15:47:22 +08:00 |
![]() | 62 maplelin 2018-12-11 16:03:39 +08:00 SPA 确实性能问题比较严重,不过做好优化使用体验也还好吧,路由异步加载,按需加载,压缩都做好的话应该不会首屏超过 2s 的,除非网络环境特别差 |
![]() | 63 bukip 2018-12-11 21:41:39 +08:00 @ShineSmile #14 web 端瞧不起桌面端? 哪里来的自信? |
![]() | 64 stariveer 2018-12-12 17:33:37 +08:00 cdn 多缓存静态文件,dll 打包 lab 文件,粒度拆分好,前端不就是干这个的吗;) |
![]() | 65 phpxiaowangzi 2021-01-19 09:56:05 +08:00 @jasonyang9 歪成 raect 笑死了 |