{"id":13459237,"url":"https://github.com/yinguangyao/blog","last_synced_at":"2025-04-12T18:41:46.103Z","repository":{"id":50739016,"uuid":"102313800","full_name":"yinguangyao/blog","owner":"yinguangyao","description":"关于 JavaScript 前端开发、工作经验的一点点总结。","archived":false,"fork":false,"pushed_at":"2025-01-17T08:38:57.000Z","size":1854,"stargazers_count":276,"open_issues_count":77,"forks_count":12,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-04-03T20:12:00.844Z","etag":null,"topics":["blog","canvas","docker","ecmascript","ioc","javascript","jsbridge","konvajs","mobx","nodejs","nuxt","react","react-hooks","recoil","redux","ssr","typescript","underscore","webpack","webview"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yinguangyao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-04T03:12:47.000Z","updated_at":"2025-04-01T14:33:29.000Z","dependencies_parsed_at":"2025-02-28T04:07:37.929Z","dependency_job_id":"2e413901-0f25-4c8d-8dc7-6f9604f7e1a3","html_url":"https://github.com/yinguangyao/blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinguangyao%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinguangyao%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinguangyao%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinguangyao%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yinguangyao","download_url":"https://codeload.github.com/yinguangyao/blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248616951,"owners_count":21134160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","canvas","docker","ecmascript","ioc","javascript","jsbridge","konvajs","mobx","nodejs","nuxt","react","react-hooks","recoil","redux","ssr","typescript","underscore","webpack","webview"],"created_at":"2024-07-31T09:01:11.887Z","updated_at":"2025-04-12T18:41:46.074Z","avatar_url":"https://github.com/yinguangyao.png","language":null,"funding_links":[],"categories":["miscellaneous"],"sub_categories":[],"readme":"我是 null，擅长移动 Web 开发、React 全家桶、前端工程化、Web 渲染等方面的技术栈。\n\n闲暇之余，我喜欢在知乎（[前端漫谈](https://www.zhihu.com/column/c_158541431)）输出技术博客，也是慕课网[《web前端开发修炼指南》](https://www.imooc.com/read/72)的作者，擅长移动 Web 开发、React 全家桶、前端工程化、Web 渲染等方面的技术栈。\n\n感兴趣可以加我微信 gioryyin 一起尬聊。\n\n## VSCode 源码分析系列\n- [VSCode 架构分析：启动和初始化](https://github.com/yinguangyao/blog/issues/86) \u003csub\u003e`2025`\u003c/sub\u003e\n- [VSCode 架构分析：依赖注入和组件](https://github.com/yinguangyao/blog/issues/87) \u003csub\u003e`2025`\u003c/sub\u003e\n\n\n ## React 系列\n - [介绍 Preact Signals](https://github.com/yinguangyao/blog/issues/80) \u003csub\u003e`2022`\u003c/sub\u003e\n - [各流派 React 状态管理对比和原理实现](https://github.com/yinguangyao/blog/issues/56) \u003csub\u003e`2021`\u003c/sub\u003e\n - [从零实现 Redux 和 React-redux][15] \u003csub\u003e`2020`\u003c/sub\u003e\n - [从零实现 Mobx：深入理解 Mobx 原理](https://github.com/yinguangyao/blog/issues/54) \u003csub\u003e`2020`\u003c/sub\u003e\n - [从零实现 React](https://github.com/yinguangyao/blog/issues/73) \u003csub\u003e`2020`\u003c/sub\u003e\n - [怎样用 React Hooks 实现 Vue3 Composition API？][16] \u003csub\u003e`2020`\u003c/sub\u003e\n - [浅谈 React 组件设计](https://github.com/yinguangyao/blog/issues/40) \u003csub\u003e`2020`\u003c/sub\u003e\n - [React Hooks 原理和最佳实践](https://zhuanlan.zhihu.com/p/136171624) \u003csub\u003e`2020`\u003c/sub\u003e\n - [如何写好 React 业务代码？][17] \u003csub\u003e`2019`\u003c/sub\u003e\n - [深入理解 React Lite][11] \u003csub\u003e`2019`\u003c/sub\u003e\n - [浅谈 React Diff 实现][14] \u003csub\u003e`2019`\u003c/sub\u003e\n - [React 入门：生命周期与组件通信](https://github.com/yinguangyao/blog/issues/59) \u003csub\u003e`2019`\u003c/sub\u003e\n - [React 入门：JSX 和组件](https://github.com/yinguangyao/blog/issues/58) \u003csub\u003e`2019`\u003c/sub\u003e\n - [Mobx 项目实践][12] \u003csub\u003e`2018`\u003c/sub\u003e\n\n## 工作沉淀\n - [腾讯文档智能表格渲染层 Feature 设计](https://github.com/yinguangyao/blog/issues/83) \u003csub\u003e`2023`\u003c/sub\u003e\n - [异步分片计算在腾讯文档的实践](https://github.com/yinguangyao/blog/issues/82) \u003csub\u003e`2022`\u003c/sub\u003e\n - [回学校教前端的经历](https://github.com/yinguangyao/blog/issues/70) \u003csub\u003e`2021`\u003c/sub\u003e\n - [移动端开发技术详解](https://github.com/yinguangyao/blog/issues/49) \u003csub\u003e`2021`\u003c/sub\u003e\n - [JS Bridge 通信原理与实践](https://github.com/yinguangyao/blog/issues/50) \u003csub\u003e`2021`\u003c/sub\u003e\n - [有必要使用服务端渲染（SSR）吗？](https://github.com/yinguangyao/blog/issues/46) \u003csub\u003e`2021`\u003c/sub\u003e\n - [Web 安全之恶意扫描](https://github.com/yinguangyao/blog/issues/55) \u003csub\u003e`2021`\u003c/sub\u003e\n - [记一个 Nuxt 同构问题](https://github.com/yinguangyao/blog/issues/42) \u003csub\u003e`2020`\u003c/sub\u003e\n - [记一次 Nuxt 登录页优化](https://github.com/yinguangyao/blog/issues/44) \u003csub\u003e`2020`\u003c/sub\u003e\n - [使用 Puppeteer 实现文件下载](https://github.com/yinguangyao/blog/issues/69) \u003csub\u003e`2020`\u003c/sub\u003e\n - [对跨域页面通信的深入思考][24] \u003csub\u003e`2019`\u003c/sub\u003e\n\n ## Canvas\n - [Leaferjs，全新的 Canvas 渲染引擎](https://github.com/yinguangyao/blog/issues/85) \u003csub\u003e`2023`\u003c/sub\u003e\n - [浅谈 Canvas 渲染引擎设计](https://github.com/yinguangyao/blog/issues/84) \u003csub\u003e`2023`\u003c/sub\u003e\n - [KonvaJS 原理解析](https://github.com/yinguangyao/blog/issues/68) \u003csub\u003e`2021`\u003c/sub\u003e\n - [canvas 画一朵樱花](https://github.com/yinguangyao/blog/issues/48) \u003csub\u003e`2021`\u003c/sub\u003e\n\n## 前端工程化杂谈\n - [whistle 开发调试最佳实践](https://github.com/yinguangyao/blog/issues/77) \u003csub\u003e`2022`\u003c/sub\u003e\n - [使用 MonoRepo 管理前端项目](https://zhuanlan.zhihu.com/p/333021512) \u003csub\u003e`2021`\u003c/sub\u003e\n - [深入理解 webpack 模块](https://github.com/yinguangyao/blog/issues/43) \u003csub\u003e`2020`\u003c/sub\u003e\n - [前端 CI/CD 初探][26] \u003csub\u003e`2019`\u003c/sub\u003e\n \n## JavaScript 面向对象\n - [JavaScript 面向对象编程](https://github.com/yinguangyao/blog/issues/62) \u003csub\u003e`2020`\u003c/sub\u003e\n - [深入理解 JavaScript 中的类与继承][23] \u003csub\u003e`2020`\u003c/sub\u003e\n - [前端开发中常用的设计模式](https://github.com/yinguangyao/blog/issues/64) \u003csub\u003e`2020`\u003c/sub\u003e\n - [写好业务代码 —— 前端 MVC 分层的实践](https://github.com/yinguangyao/blog/issues/63) \u003csub\u003e`2020`\u003c/sub\u003e\n - [策略模式和表驱动优化你的条件语句][18] \u003csub\u003e`2019`\u003c/sub\u003e\n - [前端开发中的状态机](https://github.com/yinguangyao/blog/issues/57) \u003csub\u003e`2019`\u003c/sub\u003e\n - [前端开发中的 AOP 和 IoC](https://github.com/yinguangyao/blog/issues/39)  \u003csub\u003e`2019`\u003c/sub\u003e\n - [Babel 下的 class 和 extends](https://github.com/yinguangyao/blog/issues/72) \u003csub\u003e`2019`\u003c/sub\u003e\n \n## 重学 ES6\n - [深入理解 ES6 中的 Class 和 extends 原理](https://github.com/yinguangyao/blog/issues/53) \u003csub\u003e`2020`\u003c/sub\u003e\n - [深入理解 JavaScript 模块系统](https://github.com/yinguangyao/blog/issues/61) \u003csub\u003e`2020`\u003c/sub\u003e\n - [深入理解回调函数与 Promise 原理](https://github.com/yinguangyao/blog/issues/51) \u003csub\u003e`2020`\u003c/sub\u003e\n - [深入理解 generator 和 async 原理](https://github.com/yinguangyao/blog/issues/52) \u003csub\u003e`2020`\u003c/sub\u003e\n - [ES6 Proxy 实践](https://github.com/yinguangyao/blog/issues/41) \u003csub\u003e`2020`\u003c/sub\u003e\n - [一文搞懂 Dynamic Import 和 Top-level await 提案](https://github.com/yinguangyao/blog/issues/38) \u003csub\u003e`2020`\u003c/sub\u003e\n - [都2020年了，你还不会JavaScript 装饰器？](https://github.com/yinguangyao/blog/issues/34) \u003csub\u003e`2020`\u003c/sub\u003e\n - [面向未来的 ECMAScript 标准](https://github.com/yinguangyao/blog/issues/60) \u003csub\u003e`2020`\u003c/sub\u003e\n\n## JavaScript 进阶\n - [实现一个bind函数][19] \u003csub\u003e`2019`\u003c/sub\u003e\n - [JS 函数高阶应用][21] \u003csub\u003e`2019`\u003c/sub\u003e\n - [怎么解决跨域问题][25] \u003csub\u003e`2019`\u003c/sub\u003e\n - [从 ECMA 规范看 JavaScript 类型转换][22] \u003csub\u003e`2019`\u003c/sub\u003e\n - [万事开头难 —— 如何起一个好的变量名?](https://github.com/yinguangyao/blog/issues/66) \u003csub\u003e`2019`\u003c/sub\u003e\n - [你不了解的JS运算符小技巧](https://github.com/yinguangyao/blog/issues/67) \u003csub\u003e`2019`\u003c/sub\u003e\n - [JavaScript 的前世今生](https://github.com/yinguangyao/blog/issues/71) \u003csub\u003e`2019`\u003c/sub\u003e\n\n## Underscore 源码解读\n - [underscore源码剖析之整体架构][1] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之基础方法][2] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之数组遍历函数分析（一）][3] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之数组遍历函数分析（二）][4] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之throttle节流函数][5] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之debounce防抖动函数][6] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之查找索引函数][7] \u003csub\u003e`2018`\u003c/sub\u003e\n - [underscore源码剖析之实现模板引擎][8] \u003csub\u003e`2018`\u003c/sub\u003e\n\n\n## 其他\n - [知乎前端回答合集](https://github.com/yinguangyao/blog/issues/81) \u003csub\u003e`2022`\u003c/sub\u003e\n - [前端面试技巧和总结](https://github.com/yinguangyao/blog/issues/75) \u003csub\u003e`2020`\u003c/sub\u003e\n - [《编写可读代码的艺术》笔记][20] \u003csub\u003e`2018`\u003c/sub\u003e\n - [富爸爸，穷爸爸][30] \u003csub\u003e`2018`\u003c/sub\u003e\n - [关于编程学习][31] \u003csub\u003e`2018`\u003c/sub\u003e\n \n\n  [1]: https://github.com/yinguangyao/blog/issues/7\n  [2]: https://github.com/yinguangyao/blog/issues/15\n  [3]: https://github.com/yinguangyao/blog/issues/16\n  [4]: https://github.com/yinguangyao/blog/issues/17\n  [5]: https://github.com/yinguangyao/blog/issues/18\n  [6]: https://github.com/yinguangyao/blog/issues/19\n  [7]: https://github.com/yinguangyao/blog/issues/20\n  [8]: https://github.com/yinguangyao/blog/issues/4\n  [9]: https://github.com/yinguangyao/blog/issues/6\n  [10]: https://github.com/yinguangyao/blog/issues/13\n  [11]: https://github.com/yinguangyao/blog/issues/10\n  [12]: https://github.com/yinguangyao/blog/issues/9\n  [13]: https://github.com/yinguangyao/blog/issues/26\n  [14]: https://github.com/yinguangyao/blog/issues/27\n  [15]: https://github.com/yinguangyao/blog/issues/35\n  [16]: https://github.com/yinguangyao/blog/issues/37\n  [17]: https://github.com/yinguangyao/blog/issues/23\n  [18]: https://github.com/yinguangyao/blog/issues/14\n  [19]: https://github.com/yinguangyao/blog/issues/5\n  [20]: https://github.com/yinguangyao/blog/issues/1\n  [21]: https://github.com/yinguangyao/blog/issues/3\n  [22]: https://github.com/yinguangyao/blog/issues/30\n  [23]: https://github.com/yinguangyao/blog/issues/29\n  [24]: https://github.com/yinguangyao/blog/issues/33\n  [25]: https://github.com/yinguangyao/blog/issues/32\n  [26]: http://share.gyyin.top/Shopee/CI.html\n  [27]: https://github.com/yinguangyao/blog/issues/28\n  [28]: https://github.com/yinguangyao/blog/issues/24\n  [29]: https://github.com/yinguangyao/blog/issues/21\n  [30]: https://github.com/yinguangyao/blog/issues/25\n  [31]: https://github.com/yinguangyao/blog/issues/31\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyinguangyao%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyinguangyao%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyinguangyao%2Fblog/lists"}