个常见的-错误-及其解决方法-Node.js-19-JavaScript-和 (常见的错误)
1. 变量声明与作用域的不恰当使用
在 JavaScript 中,全局变量可能会带来副作用。最好的做法是在函数作用域内声明局部变量。
//globals.js var color = 'blue'; function printColor() { console.log(color); } printColor(); // 输出 blue
另一种更好的做法是将全局变量的使用限制在配置常量,并确保其他变量在尽可能小的作用域内被声明。
2. DOM 操作的效率问题
批量更改 DOM 元素而不是一次只操作一个节点可以提高性能。构建字符串然后通过 .innerHTML 设置也是一种好方法,因为它可以减少回流。
// 逐个添加列表项 const ul = document.getElementById('list'); for (let i = 0; i < 10; i++) { const li = document.createElement('li'); li.textContent = i; ul.appendChild(li); } // 使用 .innerHTML 设置 const ul = document.getElementById('list'); let html = ''; for (let i = 0; i < 10; i++) { html += `<li>${i}</li>`; } ul.innerHTML = html;
3. DOM 操作的过度使用
频繁地更新 DOM 会对性能产生严重影响。最好只在必要时更新 DOM,并尽可能批量应用更改。
// 不推荐的做法 // 收到新消息 const msg = `<div>${messageText}</div>`; chatLog.insertAdjacentHTML('beforeend', msg); // 推荐的做法 // 收到多条新消息 const messages = []; for (let i = 0; i < 10; i++) { messages.push(`<div>${messageText}</div>`); } chatLog.insertAdjacentHTML('beforeend', messages.join(''));
4. 事件监听程序的滥用
频繁添加和移除事件监听程序会导致性能问题。考虑使用事件委托或一次性添加多个事件监听程序。
// 滥用事件监听程序 const button = document.getElementById('button'); for (let i = 0; i < 100; i++) { button.addEventListener('click', () => { console.log('Button clicked!'); }); } // 更好的做法 const button = document.getElementById('button'); button.addEventListener('click', () => { console.log('Button clicked!'); });
nodejs_bug修复
1、Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory <--- Last few GCs ---> [3628F] ms: Mark-sweep 2045.8 (2063.6) -> 2045.7 (2061.1) MB, 823.6 / 0.0 ms(+ 217.9 ms in 2 steps since start of marking, biggest step 217.9 ms, walltime since start of marking 1052 ms) (average mu = 0.052, current mu = 0.011) <--- JS stacktrace ---> ==== JS stack trace ========================================= Security context: 0xba1 <JSObject> 1: parseMessage [F1DB3371] [C:\Platform\node\service\node_modules\pg\lib\:~377] [pc=DA566DDB0](this=0x03d27f47c261 <Connection map = A6A060F51>,0x03e134ba35c9 <Uint8Array map = A6A>) 2: /* anonymous */ [ACD5EAF31] [C:\Platform\node\service\node_modules\pg\lib\:~119] [pc=DA56... FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1: FF78BAC094F napi_wrap+ 2: FF78BA v8::base::CPU::has_sse+ 3: FF78BA v8::base::CPU::has_sse+ 4: FF78C266F4E v8::Isolate::ReportExternalAllocationLimitReached+94 5: FF78C24EF91 v8::SharedArrayBuffer::Externalize+833 6: FF78C11C85C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1436 7: FF78C127C00 v8::internal::Heap::ProtectUnprotectedMemoryChunks+1312 8: FF78C v8::internal::Heap::PageFlagsAreConsistent+3204 9: FF78C119FC3 v8::internal::Heap::CollectGarbage+1283 10: FF78C v8::internal::Heap::AddRetainedMap+2356 11: FF78C v8::internal::Factory::NewRawOneByteString+83 12: FF78C1434D2 v8::internal::Factory::NewStringFromUtf8+130 13: FF78CA v8::String::NewFromUtf8+298 14: FF78B9D76EF node::tracing::TraceEventHelper::SetAgent+ 15: FF78BA79BFD v8::internal::Malloced::operator delete+1661 16: FF78CC v8::internal::SetupIsolateDelegate::SetupHeap+: DA566DDB0 2、<--- JS stacktrace ---> Cannot get stack trace in GC. FATAL ERROR: MarkCompactCollector: semi-space copy, fallback in old gen Allocation failed - JavaScript heap out of memory 这个问题是node内存泄漏造成的。 因为node是单线程的,所有的访问走的一个线程,如果执行完一个,占用内存增加,但是没有释放的话,就造成内存泄漏,内存泄漏其实就是存储泄漏,而造成的原因就是内存分配超过了v8内存的限制数量,而且进程所占用的内存,并没有慢慢释放回来, 解决办法:node --max-old-space-size=6096
win7系统安装node.js报错的解决方法
最近有win7旗舰版64位系统用户到本站反映说遇到这样一个情况,就是在安装之后,要确认是否安装成功,然后在控制台输入命令来显示node的版本,但是却遇到了报错的情况,该如何处理呢,本文就给大家讲解一下win7系统安装报错的解决方法吧。 1、通过网络下载适合电脑系统的软件。 这里使用的是win7的32位系统,所以需下载是个本系统的软件——node-v0.10.26-x86;2、双击进行安装,根据步骤向下走即可。 小编这里是安装在D盘的;3、安装成功后,点击电脑左下角的Windows图标,在弹出的菜单内点击【运行】;4、在【运行】界面的打开文本框内输入:cmd然后点击【确定】按钮;5、在弹出的控制台界面内输入:node-v然后敲回车键,会报不是内部或外部命令错误;6、在桌面的【计算机】图标上点击右键,选择【属性】项目;7、在弹出【系统】界面,点击左侧的【高级系统设置】选项;8、在弹出的【系统属性】界面,点击【环境变量】按钮;9、在【环境变量】界面找到【系统变量】部分,在【系统变量】里面找到【Path】变量,然后点击【编辑】按钮;10、在【编辑系统变量】界面将【变量值】里面的:D:\ProgramFiles\nodejs\最后的斜杠去掉,修改为D:\ProgramFiles\nodejs然后依次点击【确定】按钮保存设置;11、再到控制台输入:node-v然后敲回车键,会显示node的版本信息。 说明安装成功了。 上述给大家介绍的就是关于win7系统安装报错的解决方法,有遇到同样问题的用户们可以按照上面的方法步骤来操作,希望本教程可以帮助到大家。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。