前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >eBay 对静态资源加载的优化

eBay 对静态资源加载的优化

作者头像
dys
发布2018-04-03 17:46:20
8510
发布2018-04-03 17:46:20
举报
文章被收录于专栏:性能与架构性能与架构

对于页面中引用 JS CSS 静态资源的处理,eBay 之前的主要模式是打包资源

每个页面中所需要的 JS 都打包为一个 JS 文件,放在页面的底部加载,CSS 也都打包为一个 CSS 文件,放在 head 标签内引用

这个方式的好处是大大减少了HTTP请求的数量,但也有明显的劣势,就是没有很好的利用浏览器缓存

例如

用户访问 A页面,需要加载 A.js

(由 jquery.js 和 logic_a.js 打包而成)

再访问B页面时,需要加载 B.js

(由 jquery.js 和 logic_b.js 打包成)

这两个JS文件中都包含了 jquery.js ,但还是需要每个页面都加载,使用不了缓存

所以需要一个折中的方案,既能减少HTTP请求的数量,又能缓存公共文件

优化过程

优化思路是拆分出公共资源,不再全都打包成一个文件,而是拆除两个文件,公共资源包 + 独立资源包

公共核心资源例如

这样可以带来几个明显的好处:

(1)浏览器缓存

之前提到的缺点 - 打包所有资源在一起不利于利用浏览器缓存,而使用通用的核心库以后,便可以在整站中缓存,这对性能有非常大的提高

(2)库文件的一致

之前,没有要求统一基础库,有可能在 A页面 和 B页面看到的按钮样式不一样,而有了核心 JS/CSS 库之后,eBay 整站的基础样式和行为都是一致的

(3)更容易管理

可以统一维护核心库中的各文件

现在已经把资源文件分为了 公共部分独立部分,eBay 根据自己的网站结构特点,又进行了更进一步的拆分

eBay是由多个子域组成的,例如 购物、销售、浏览 等等

各子域内的资源还是存在通用部分的,所以对于之前的独立部分,可以再拆分,一个是这个子域的通用资源,一个是完全个性的页面资源,例如

域公共资源:此域内各个请求中都一致的 JS CSS,不会随着请求参数的不同而变化,这部分资源还会被打包成一个文件,同样可以使用到浏览器缓存

个性资源:与请求参数密切相关的资源,例如业务逻辑的处理,页面中引用的所有个性资源再打包成一个文件

总结

这样每个页面就会引入6个资源文件,3个JS和3个CSS

核心库

打包公共的核心 JS CSS 文件,整站通用,负载最高

子域公共资源

打包各个子域中不变的 JS CSS 文件,子域内通用,中等负载

页面个性资源

打包剩下的个性的 JS CSS文件,负载最低

eBay表示从目前来看,这个打包策略对于他们是最适合的,在请求数量和浏览器缓存之间实现了平衡

内容整理自eBay的技术文章

http://www.ebaytechblog.com/2016/01/04/packaging-for-performance/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档