本文内容收集整理自网络

一、模块化与按需加载

1、模块(module)

模块是为完成某一功能所需的一段程序或子程序,是系统中职责单一且可替换的部分。

2、模块化

所谓模块化就是指把系统代码划分为一系列职责单一,且可替换的模块。

3、模块化开发

模块化开发就是指如何开发新的模块,和复用已有模块来实现应用的功能。

4、按需加载

按需加载在空间上指的是:只加载当前页面所需要的模块;在时间上是指:只有当用户表现出需要某一功能的意图时,才去加载相关模块。

5、适用场景

满足如下条件的应用适合采用模块化开发与按需加载技术:

  • 应用复杂。系统拥有不止一个功能部分,这些部分可能共享一些底层代码。

  • 需要长期维护。开发初期可能需求不是十分明确,需要通过不断迭代的方式来开发。而且经常面临需求变更和功能添加。

  • 对性能要求苛刻。面临复杂的用户交互和数据展现问题。

二、传统开发模式

1、传统的JS开发与加载模式

传统的JS开发主要由于应用的复杂度不高,而且网站规模较小,因此采用面向过程的编程模式,把相关的代码集中写在一处,在所有页面都引入这个文件。

这样做开发简单,而且由于浏览器有缓存,首次加载后,后续加载无需网络传输,在性能也不会有什么大问题。但如果是一个大型web应用,以上开发模式就会暴露出严重的问题。

2、传统开发模式的问题

  • 由于代码的组织结构是非模块化的,所以代码无法复用,进而导致代码重复,难以维护,当需求变更或功能添加将导致代码多处更改。

  • 由于代码粒度太大,页面可能会加载大量根本用不到的代码,即便忽略网络传输的问题,过多无用代码,也会导致页面解析缓慢。

  • 由于所有代码都混在一起,阅读代码与测试也变得相当困难。

三、为什么需要模块化开发与按需加载

1、可维护性的需要

代码的可维护性的一种理解是,新功能的添加无需修改已有代码,旧有功能的变更无需修改多处代码。对于初期需求不明确,需要采用不断迭代方式开发的项目,代码可维护性就显的尤为重要。

2、可测性的需要

代码的可测性的一种理解是,代码可以在系统环境外进行独立正确性验证。在系统环境外对代码进行测试十分重要,这不仅能保证代码的正确性,同时也保证了代码可以在不同环境中复用。

3、性能的需要

模块化的代码可以实现按需加载,节省页面加载时间,而且不需要浪费时间解释多余的代码。

4、架构的需求

架构的任务之一是保证系统可以应对未来的变化。这些变化包括新功能的添加,原有功能的修改,底层库文件的更换(有jQuery切换到tangram或其他),性能优化等等。任何可以实现这一目标的架构都要求代码必须是模块化的。

5、代码复用

代码复用不仅仅是为了节省开发时间,同时也是保证代码质量的有效手段,代码的复用程度越高,其质量就越容易得到保证。

6、多人协作的需要

大型应用无法通过一人之力完成,多人协作是不可避免的。在多人协作的环境下,经常要面临修改或使用别人写的代码的问题。只有那些功能单一,接口明确,模块化代码我们才敢放心大胆的修改或使用。