前端组件的缓存共享策略优化

0

如果一个前端页面中可能引入多个独立的组件,这些独立的组件与页面的技术栈无关,如一个使用 React、Vue 开发的页面引入了一个原生的 Web 组件,此时这些独立组件的共享缓存就是一个值得关注的问题。

常规做法

按照常规的思路,页面如果要引入 A 和 B 两个组件,两个组件都依赖了相同的模块 @lib,如果希望将模块 @lib 缓存共享,那么一般的做法是将共享模块单独提供一个 JS 包,无论是 A 或 B 的包在加载前都先加载好共享缓存包,此时就会存在三个包,对应着三个独立的请求。对于移动 App 来说,原本是两个组件包两个请求,但此时请求数的增加意味着由于为了实现缓存共享而降低了可用性。

阅读全文 »

5173首页前端性能优化实践

从制定计划,到前后端的开发,最后到测试以及上线,历时4个月,5173首页前端性能优化项目终于顺利上线,并达到了预期的性能优化目标。这次的项目并不是改版,而是原来首页的设计和功能不变,只做重构和优化。虽然项目名叫前端的性能优化,但也并不仅仅是前端单方面的工作,要想彻底的把优化做好,就需要前后端的通力配合。

历史背景

老首页应该是09年上线的,首页也是各部门争夺资源的地方,大家都想在首页有一席之地,各部门在首页都有各自的小豆腐块,如果有新项目的上线,大多是打补丁的方式,并且唯一的规范就是能保证功能正常运行,至于性能方面,那是很遥远的事。苦逼的是开发人员,每次有首页的修改都是担惊受怕的,怕改了这个那个又出问题,历史原因造成的问题越来越多。

最先看不下去的应该是前端人员,因为首页在不断的修修补补中,性能已经差到前端人员觉得很没面子的地步了。但是看不下去也仅仅是看不下去,没法采取实质性的措施来改善,因为这牵涉到各部门的利益,也如上面说的,优化不仅仅在于前端,于是前端人员也只能向上面反映问题。到了今年,终于领导也看不下去了,某领导在海外访问我司的8185173首页,对比起来前者首页很快(插播一句,818首页前端开发人员也正是我^_^),后者首页很慢,差别较大。于是在领导重视的推动下,5173首页的前端性能优化项目才经过批准,开发人员终于可以放手大胆的折腾了。

阅读全文 »

javascript事件系统

2005年的时候,jQuery的作者John Resig提出了一个兼容IE和标准浏览器的addEvent的方案,在当时认为是最佳的方案,但是几天后Dean Edwards提出了更好的方案,John Resig之后把Dean Edwards的方法应用在了jQuery中(在jQuery的事件系统的注释代码中可以看到Dean Edwards的署名)。

jQuery历经了这么多的版本,在原来Dean Edwards的基础上,John Resig对于最初的addEvent的方法有了一定的改进。最近在深入学习javascript的事件系统时,看了不少的jQuery的代码,我自己也写了一个简单的javascript事件系统,也算是对于jQuery事件的一个精简。当然这里指得精简并不是说jQuery代码比较臃肿,而是jQuery作为一个类库,需要考虑的东西有很多,也紧密结合了选择器,所以代码量确实很庞大。我的javascript事件系统解决了几个最基本的常见问题:

1. 尽量避免IE在绑定事件时出现的内存泄漏;

2. 修正了IE的this指向问题;

3. 让IE可以支持一些常见的事件标准方法;

4. 同类型的事件可以多次绑定并按顺序执行;

阅读全文 »

解析jQuery的缓存系统

<p>前不久在研究jQuery的动画队列的时候,发现jQuery的缓存系统也很强大,尽管以前也稍微接触过,但一直都没有深入研究过。jQuery的缓存系统在外部应用的时候都比较简单,比如要将某个URL数据存到缓存中只要这么写:</p>
<pre class="brush: c-sharp">
var val = 'blog.yiguochen.com';
$('div').data( 'url' ); // 返回undefined
$('div').data( 'url', val ); // 返回'blog.yiguochen.com'
$('div').data( 'url' ); // 返回'blog.yiguochen.com'
</pre>
<p>不光可以存储字符串,上面的val也可以是任意数据,对象、数组、函数等都可以存到里面。仅仅实现这种功能还是挺简单的,声明一个全局对象用来存储数据,然后使用data方法来存储或返回数据…</p>

阅读全文 »