`
JavaSam
  • 浏览: 951962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascript模块化、模块加载器初探

 
阅读更多

最常见网站的javascript架构可能是这样的:

  • 一个底层框架文件,如jQuery
  • 一个网站业务框架文件,包含整站公用业务模块类(如弹框、ajax封装等)
  • 多个业务文件,包含每个具体页面有关系的业务代码

  为了减少一个HTTP请求,我们可能将底层框架文件和网站业务框架文件combo成一个文件,作为一个公用文件引入到每个需要使用 javascript的页面中,再在具体的页面中引入和当前页相关业务js文件。为了减少页面加载脚本阻塞现象,我们还可以将脚本文件放在html的 body底部进行加载。

  这看似是一个很好的javascript架构方案。每个页面最多引用两个js文件,打开首页后,后续页面都可以使用缓存中的combo过的js。如果底层框架改动不太频繁,那么缓存在用户浏览器中的combo过的框架文件能够使用较长的时间。

  当网站使用过一段时间后,你可能就会发现一些问题出来了。  

  • combo过的框架文件过大。虽然可以使用YUI Compressor或Google Clousure等第三方压缩工具压缩、启用gzip、使用CDN等优化手段优化。但底层框架会随着开源框架升级,公用模块增多,导致combo后的框架文件越来越大。
  • 业务框架改动频繁,导致浏览器缓存作用减小。由于业务的增加,可能公用的业务模块越来越多,导致业务框架频繁修改。代码修改后,浏览器需要重新加载新的框架文件。
  • 团队开发问题。随着团队人数的增加,可能每个人开发一个公用业务模块,造成多人需要对同一个文件进行修改。若使用TFS这种独占式签出的版本管理工具,会对团队的开发效率造成一定影响。

  我们再看看使用模块加载器、并对javascript进行过模块化处理的网站的javascript架构:

  • 一个模块加载器文件。如loader.js
  • 多个底层模块(如selector、ua等),多个业务模块(如dialog、suggest等)
  • 多个页面相关的脚本调用文件

  优点体现出来了:

  • 按需加载:只加载当前页面需要的模块和文件,不需加载任何多余文件和代码。大大缩减了代码量
  • 并行加载:很多loader提供了并行加载多个文件的功能,减少了代码加载的时间,优点能做到下载和执行相分离。
  • 利于团队开发:团队中每个人负责开发各自的模块,之间互不影响。
  • 最大限度的利用缓存:模块颗粒化后,每次更新可能只是其中一个小模块,其他未更新的可以利用浏览器中的缓存。

  既然javascript模块化、使用模块加载器有这么多的好处,那么我们需要付出哪些努力:

  • 选用或实现loader
  • 底层框架的模块化:我们需要将底层框架按照各自的只能分成不同的模块,分清楚之间的依赖关系
  • 实现业务模块:将原来的业务模块按照loader约定的代码方式进行修改,实现新的业务模块按照loader的方式编写。 
0
1
分享到:
评论

相关推荐

    Extjs portal 应用初探

    总结来说,"Extjs portal 应用初探"涉及到的主题包括:ExtJS Portlet的概念和使用,Portlet布局的创建,portlet的动态加载和异步更新,以及阅读和理解ExtJS源码的重要性。通过实际项目如"mms.html"的实践,开发者...

    详解webpack自定义loader初探

    Webpack 是一个现代JavaScript应用程序的静态模块打包工具,它在前端工程化中扮演着核心角色,负责将各种资源文件(如JavaScript、CSS、图片等)进行处理、编译和打包。Loader 是 Webpack 的一个重要组成部分,它...

    AngularJS入门教程一:路由用法初探

    AngularJS的路由模块不仅仅是一个简单的URL匹配机制,它与控制器的配合使用让开发者能够将应用分割成独立的、可管理的部分,并提供了一种组织大型应用的结构化方法。 要充分理解并运用AngularJS路由,我们还需要...

    PokemonPokedex

    《神奇宝贝图鉴项目:JavaScript实现的初探》 神奇宝贝图鉴,即"Pokedex",是《神奇宝贝》系列游戏中一个重要的元素,它记录了各种神奇宝贝的信息,包括属性、技能、进化链等。本项目名为"PokemonPokedex",主要...

    brandon.eats-Web-Page-:第一个使用 html、CSS 和 java 脚本组合的项目

    Web-Page-"项目也可能涉及了一些最佳实践和优化策略,如合理的HTML语义化、CSS的模块化和预处理器(如Sass或Less)、JavaScript的模块化(如CommonJS或ES6模块),以及代码压缩和合并以提高页面加载速度。...

    Jetty权威指南.pdf

    Jetty的设计模块化、组件化,能够很好地集成到其他应用中。它支持最新的HTTP标准和技术,如HTTP/2和WebSocket,并提供了对Servlet API的支持。 **1.2 Jetty的特点** - **轻量级**:相比于其他大型服务器如Apache ...

    friday-trivia

    4. **模块化**:项目可能会使用ES模块或CommonJS模块系统,通过`import`和`export`语句组织代码,实现代码的模块化和重用。 5. **构建工具**:为了将TypeScript代码转换为浏览器可执行的JavaScript,开发者可能使用...

    cocoscreator 合成游戏

    在实际开发中,良好的代码组织和模块化设计至关重要,可以提高代码的可读性和可维护性。 4. **事件监听与处理**: - 事件监听(Event Handling)是实现用户交互的关键,例如当玩家点击屏幕上的元素时,我们需要...

    FullStack:这是我的第一个全栈Web应用程序

    CSS预处理器如Sass、Less可以提高代码可维护性,模块化和复用性。 JavaScript是网页的动态语言,负责处理用户交互、异步数据请求和页面行为。在全栈Web应用中,JavaScript通常配合库或框架,如React、Vue或Angular...

    Etsy-copy:https

    这个工具包含了Babel(用于转换ES6+语法)、Webpack(模块打包工具)等前沿技术,使得开发者能够专注于编写代码,而不是关注底层配置。 以下是使用“Create React App”创建新项目的步骤: 1. 首先确保已经安装了...

    gatsby-starter-netlify-cms

    《Gatsby与Netlify CMS结合使用初探》 在当今的Web开发领域,静态网站生成器(Static Site Generators,SSGs)与内容管理系统(Content Management Systems,CMSs)的结合已经成为一种趋势,它们能够为开发者提供...

    OnlineStore:这是一个不大成熟的电子商务网站原始码

    《构建与分析OnlineStore:一个不成熟的电子商务网站源码初探》 在信息化时代,电子商务网站已成为企业与消费者之间的重要桥梁。"OnlineStore"作为一款开源的电子商务平台,虽然其成熟度不高,但它为我们提供了一个...

Global site tag (gtag.js) - Google Analytics