-
Notifications
You must be signed in to change notification settings - Fork 211
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
再谈前端优化——从实际项目优化说起 #14
Comments
2. 资源及其规划这里的资源主要指JS/CSS/Image,其它音视频等资源暂不讨论。 2.1 资源尽量小,启用压缩资源的大小是影响整个请求时间的绝对因素(更长的
如上,一张错误提示的gif图片,大小83KB,超过95%的时间用在下载内容(蓝色块)上。 此外,gzip对文本的压缩效率很高,压到原内容的**20%-30%**也不足为奇: 如上,原文件36KB,gzip压缩后仅仅9.3KB。 2.2 CDN与域名收敛
CDN(内容分发网络)能够加速静态资源,原理就是提供分发网络(不同地理位置大量节点),在用户请求某资源时动态定位到最近节点,由最近的节点响应用户。 CDN与主站不在同一域名,可以避开浏览器同一域名最大6个TCP连接的限制,提高并发下载能力。 但我们知道,域名解析是需要时间的,我们需要控制统一页面中出现的域名数。一般来说,主站+CDN两个域名比较合理。 2.3 合理设计缓存善用缓存,让你的网页“秒开”。
CSS和JS避不开的问题是文件合并,包括图标图片的sprite也是同样的。合并必须和缓存综合考虑。 2.4 合理的文件合并这里加上了限定语_合理的_,因为文件合并 并不总是起正效用的,更多请看下一小节。 文件合并可以减少HTTP请求——这是正效用的原因。 一个正面例子是雪碧图: 2.5 文件合并和缓存规划首先来看张chrome network的截图: 我们看到,页面引入了大量脚本(位于CDN),然后(后面的)脚本的timeline中出现了比较长的灰色块(可能也比较少见)。 灰色块代表什么?
联系之前说的浏览器同源下最大6TCP连接的限制,我们可以知道图中如此耗时的根源:同源下多个js下载请求,超过6个,后面的请求被挂起,等待正在使用的TCP连接释放。 同时,我们可以看到,有时等待时间可以达到总时间的** 那么,是不是把所有JS打包成一个
总之,资源/缓存规划是复杂的,没有一劳永逸的方案,需要因地制宜。 2.6 延迟下载并不是所有资源在首页/首屏是必须的,是可见的。所以有些资源是可以延时下载的。 这里的延迟下载和上面的按需加载有点类似。特地列出来一是按需加载一般与JS强关联,二是延迟下载的典型_图片延迟下载_有广泛的应用。 对于多图片的网页(如电商网站),在首屏以外的图片由于不可见,没必要一开始就加载。用一张默认图片代替这些图片一可以提高网页加载速度,二可以节省带宽。 对比上面两张图可以看到,48张图片中首屏只需要加载14张,这极大低加快了网页渲染速度。 |
3. 占坑,待续 |
继续,继续 ... |
继续,继续。。 |
继续,继续 ... |
继续,继续 !!! |
大佬,一年过去啦 |
@icymind 哈哈哈 😂 已经不知道写什么了 |
@creeperyang,可以来个如何从零开始实现一个SPA应用,纯手工打造,只是这个过程有点漫长! |
很受教,谢谢 |
最近遇到一个Content Download加载很慢的情况,返回的内容总共44kb,前端vue页面请求时间偶尔会有2~5秒,很是诡异。但是单独访问后端接口,花费的时间都小于400ms. |
@Chang1ng 我也遇到了这个问题,不知道时间浪费在哪儿了,最后你查到原因了吗 |
@Chang1ng 同遇到,我的情况更诡异, 本地开发环境正常;测试环境正常;同测试环境不同端口号下content download超过2s,导致页面渲染数据慢了一步,react项目; |
追踪请求挂起深层原因的好文: 对类似问题的追查应该会有帮助。 |
@Zero0331 请问你的问题解决了嘛? 我现在也是本地测试环境都没有问题,就是线上加载巨慢, vue 工程 |
@Chang1ng 请问一下大佬查到原因了吗? |
@wjinlong I think you should check the network condition of the production environment first. |
@xu20160924 请问一下您最后是怎么解决的这个问题呀 我现在也遇到了这个情况 本地测试没问题 线上加载特别特别慢 我是react项目 |
一直觉得前端优化是个挺复杂的东西(可能是我比较菜 😂 ):
The text was updated successfully, but these errors were encountered: