« 上一篇下一篇 »

冗余的精简矛盾

公共组件和私有组件的区分及避免带来的新问题
 
      有了公共组件和私有组件的区分,可以有效避免代码的重复。但又会带来新的问题——如果组织公共组件。

      合理前端架构中CSSJavaScript都是会提取共公组件的,如何组织公共组件是需要权衡的。如果没有将公共组件载入到系统中,那么组件是没有办法被使用的。一个最方便的做法就是将公共组件全部打包好,然后一次性全部载入,这样可以保证所有组件都是可用的。这种做法的好处是加载方便,但是夹在的代码量可能过大,而很多代码事实上很可能是没有被用到的。另一种做法是将代码精确划分成一小块一小块,然后按需要加载相应的模块。这种做法的好处是加载灵活,保证代码的加载量小,但坏处是使用起来比较麻烦。

      我们在组织公共组件时,组织的力度越大,文件越集中,加载和管理越方便,但无用代码越多,组织的力度越小,文件越分散,加载和管理越麻烦,但是无用代码越少。我们要加载方便就要适当舍弃精简性,要保证精简性就要适当放弃加载的方便性。我们需要认识到一点:完美的解决方案是不存在的,我们只能在冗余和精简中尽量找到最佳平衡点。

      以Javascript框架jQuery和YUI为例说,jQuery就选择“集中”,而YUI选择了“分散”。jQuery将所有组件全放在了一个文件中,但是它通过非常优秀甚至诡异的算法,让代码本身尽可能精简,从而尽量让代码在“加载和使用方便”的基础之上,尽量往“精简”靠拢。而YUI将组件按功能分成了一个个不同的文件,在页面中只根据需求加载相关的文件。YUI通过智能的loader方式,尽可能让这种按需加载对用户友好。YUI在保证“精简”的基础上,尽量往“加载和使用方便”靠拢。两者出发点不同,但是都找到了一个不错的平衡点。

      因为公共组件预写好的,弹性才是它们最应该重点考虑的,毕竟不是特定为完成某功能而定制的,所以就算是按需加载,仍然可能会存在无用代码。这个是无法解决的,我们的认识到,只可能尽量减少冗余,不可能根除冗余。

« 上一篇下一篇 »