文章插图
前端模块化省流:ChatGPT总结
该文章主要讲述了前端模块化的发展历史和各个阶段的技术方案,包括无模块化(IIFE)、CommonJS、AMD、CMD、ESModule、UMD 。一、参考资料
其中,无模块化时期的文件拆分是最基础的模块化,但也存在函数命名冲突的问题;
IIFE 是现代模块化的基石,利用函数的块级作用域进行隔离,可以控制作用域;
CommonJS 文件即模块,模块加载同步,适用于服务器端 node,浏览器端使用 webpack 或 browserfy 。
【一文带你了解,前端模块化那些事儿】最后,各种模块化技术方案都是为了更好地满足前端代码管理、组织、通信的需求,模块已经成为了代码管理/编译、业务分离的基本单元 。
- es-module-history
- 网页性能管理详解
- defer和async的区别
- 可能是最详细的UMD模块入门指南
- 在浏览器中使用 ECMAScript Modules
- js的设计之初就是为了满足简单的页面设计+表单提交,并无模块化 or 命名空间的概念
- 而是实实在在的需求推进了所有技术的演进,模块化也是 。
- 站在前端发展的上帝视角来看,随着前端的能力在纵深都得到增强之后,迫切的需要更好的代码管理、组织、通信的模式,各种模块化的技术方案开始出现 。
- 现如今模块已经成为了代码管理/编译,业务分离的基本单元 。
- 无模块化(IIFE) -> CommonJS -> AMD -> CMD -> ESModule、UMD
- 开始需要在页面中加载不同的js:动画、组件、格式化
- 多种js分布在不同的文件中
- 不同的文件又被同一个模块中引用
<script src=https://www.isolves.com/it/cxkf/qd/2023-03-10/'jq.js'>// ...
问题:这个时期函数命名可能会冲突,影响到其他人写的代码引出的问题:
- script标签的参数 - async & defer 的区别?
文章插图
总结: 主要是对标签下载和执行时机的控制
- 普通标签 - 遇到标签就去下载,下载完毕之后立刻去解析代码并执行,这个时候会阻塞GUI线程渲染
- defer - 遇到标签之后异步下载,下载完成之后等待其他标签解析完成之后开始执行(在主线程解析完成之后才执行,降低脚本的优先级,保持用户体验,使用相对较多)
- async - 遇到标签之后异步下载,下载完成之后立即执行并阻塞渲染,执行完成之后继续渲染(异步下载结束之后立即执行,不保证脚本执行顺序,一般用来给那些不需要任何依赖的脚本使用)
- 拓展
- ESM 默认是通过 defer 的方式加载的,所以是不需要在 script 标签上加 defer 属性的
- 兼容性如何? > IE9
- 引导内容
- 浏览器渲染原理
- 同步异步的原理(Promise,任务队列)
- 模块化加载原理
- 产生的问题
- 污染全局作用域 => 不利于大型项目的开发以及多人团队的共建
(function($){console.log($)return {data:[]}})(jQuery) //注入对象
3.Commonjs(cjs)- 服务器端node,浏览器端webpack|browserfy
- 文件即模块
- 模块加载同步
- 服务器模块加载是运行时同步加载
- 浏览器模块加载是提前编译打包处理
- exports = module.exports
- 注意:不能直接给exports赋值,会导致与module断开引用
- 使用require进行引入
推荐阅读
- 看完这篇文章,你就是最了解普洱茶的人
- 木耳没泡开能吃吗
- 奇瑞电动车多少钱一辆 奇瑞电动车
- 一文搞懂802.1x协议,认证逃生方案的核心技术
- 一米装饰 随意居装饰
- 高档四件套床上用品图片 女人床上用品
- 快速了解金属天花吊顶安装安全和装饰 金属屋面瓦
- 钱币|辽代铸造的下八品钱币,是哪八品,关于辽代钱币铸造你了解多少?
- 一文带你搞懂 Mmap 技术
- 张若昀|曝当红男星多次出轨L姓女星,原配全了解却忍让,选择共享老公!