diff --git a/docs/learning-note/stenography/weekly-fe-perusal/note-p3.md b/docs/learning-note/stenography/weekly-fe-perusal/note-p3.md index 8f59a28..74092a8 100644 --- a/docs/learning-note/stenography/weekly-fe-perusal/note-p3.md +++ b/docs/learning-note/stenography/weekly-fe-perusal/note-p3.md @@ -237,6 +237,231 @@ git cat-file -t # 查看对象类型 git reflog # 查看引用日志,找到丢失的分支或提交 ``` +## 52.精读《图解 ES 模块》 -
last modified at August 28, 2025 17:17
+ES 模块化的工作机制 + +1. 静态分析:在编译时确定模块之间的依赖关系 +2. 代码分割:按需加载模块,优化性能 +3. 作用域隔离:每个模块都有自己的作用域,避免变量冲突 +4. 导入导出:使用 `import` 和 `export` 语法进行模块之间的交互 + +与 CJS 的区别 + +1. ES 模块是静态的,CJS 是动态的 +2. ES 模块支持异步加载,CJS 是同步加载 +3. ES 模块有自己的作用域,CJS 共享作用域 +4. ES 模块使用 `import` 和 `export`,CJS 使用 `require` 和 `module.exports` + +## 53.精读《插件化思维》 + +插件化思维是一种将系统分解为多个可插拔模块的设计理念。通过定义清晰的接口和契约,使得各个模块之间可以独立开发、测试和部署。 + +如何实现插件化的框架设计: + +1. **定义插件接口**:为插件定义统一的接口和规范,确保各个模块之间的兼容性。 +2. **实现事件机制**:通过事件机制实现模块之间的通信和协作。 +3. **使用依赖管理工具**:使用依赖管理工具(如 npm)管理插件的依赖关系。 +4. **支持热更新**:支持插件的热更新,提升开发体验。 + +## 57.精读《现代 js 框架存在的根本原因》 + +现在框架最重要的帮助是保持 UI 与 状态的同步。 +两种方式: +1. 重渲染组件,React,当状态改变后,生成新的虚拟DOM🌲,最终改变当前的真实DOM,成为reconciliation +2. 监听修改,Angular/Vue,状态改变触发对应DOM的Value更新 + +三个框架互相借鉴,一般会混合使用上述两种方式。 + +```md +// 评论 +1. 个人觉得浏览器应该做的是更底层的事,比如新的人机交互,更快的加载和渲染速度等等,而UI与state同步的事,其实加上一个中间层就能搞定,react、vue等都是一个中间层,这一层应该开放给开发者进行处理。 +2. 状态与UI同步的问题我个人理解是一个状态机处理状态的问题,整个应用是一个状态机,处理不同的输入。而能把应用变成状态机的只能是js,html和css都不行。所以以js为中心进行前端开发是趋势,除非找到新的编程模型 +``` + +## 59.精读《如何利用 Nodejs 监听文件夹》 + +```js +// 轮询检测文件,有延迟 +fs.watchFile(dir, (curr, prev) => { + console.log(`File changed: ${dir}`); +}); +``` + +```js +// 为了抹平操作系统差异,回调执行次数不确定 +fs.watch(dir, (eventType, filename) => { + console.log(`File changed: ${filename}`); + // 优化判断逻辑 + // 1. 对比文件修改时间 + // 2. 校验文件md5 + // 3. 延迟判断(debounce) +}); +``` + +## 6.精读《JavaScript 错误堆栈处理》 + +1. 抛出标准的 Error 对象 +2. Promise 使用 reject 代替 throw 抛出错误,避免未捕获的异常 +3. 监控客户端错误,`try...catch`(无法捕捉语法错误和全局错误),使用 `window.onerror` 进行全局错误处理。 +4. `window.onerror` 跨域解决方案 + - `