专栏名称: 程序员成长指北
专注 Node.js 技术栈分享,从 前端 到 Node.js 再到 后端数据库,祝您成为优秀的高级 Node.js 全栈工程师。一个有趣的且乐于分享的人。座右铭:今天未完成的,明天更不会完成。
今天看啥  ›  专栏  ›  程序员成长指北

Monaco编辑器+WebWorker:超速自动代码格式化技巧,必学技能!

程序员成长指北  · 公众号  · 前端  · 2024-08-09 12:07
    

主要观点总结

本文介绍了如何使用WebWorker优化Monaco代码编辑器的自动格式化功能,解决因格式化算法导致的卡顿问题。

关键观点总结

关键观点1: 需求背景

实现浏览器在线代码编辑器中的功能,屏蔽浏览器保存并自动格式化代码。

关键观点2: 初步实现

查询monaco-editor文档,监听onKeyDown事件,触发格式化操作。

关键观点3: 遇到的问题

当代码量增大时,格式化操作会导致主进程卡顿。

关键观点4: 优化方案

提出几个优化方案,包括优化格式化算法、异步处理、代码分段处理和缓存复用。

关键观点5: 选择方案

选择使用WebWorker线程实现异步格式化操作,通过postMessage和onmessage传递消息。

关键观点6: WebWorker相关知识

介绍WebWorker的基础知识,包括同源限制、限制访问、消息传递等。

关键观点7: Webpack配置

介绍如何在Webpack 5中配置支持WebWorker,包括规则配置和globalObject的支持。

关键观点8: 主线程与worker代码编写

介绍如何在主线程和worker中编写代码,使用WebWorker优化Monaco编辑器的格式化操作。

关键观点9: 总结

总结使用WebWorker优化Monaco编辑器自动格式化功能的实现,并预告下一篇文章内容。


文章预览

大厂技术    高级前端    Node进阶 点击上方  程序员成长指北 ,关注公众号 回复 1 ,加入高级Node交流群 需求背景 一个浏览器在线代码编辑器中的功能, Cmd+S/Ctrl+S 时屏蔽浏览器的保存,并自动格式化编写的代码。 初步功能实现 先去查询了一下 monaco-editor 1 文档官网, 查看 monaco 实例 是否提供了格式化代码的 api 。 this.monacoInstance.trigger( "editor" ,  "editor.action.formatDocument" ); 这么一看需求还是蛮简单的 监听 monaco 的 onKeyDown 事件 onKeyDown={ ( event ) =>  {    const  keyCode = event.keyCode || event.which || event.charCode;    const  isCtrlOrCmdPressed = event.ctrlKey || event.metaKey;    if  (keyCode ===  83   & &  isCtrlOrCmdPressed) {     this.monacoInstance.trigger( "editor" ,  "editor.action.formatDocument" );     event.preventDefault();   } }} 然后本地测试确实可以格式化代码成功,但 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览