当一个变量被传递给一个函数时,JavaScript堆栈会发生什么
What happens to the JavaScript stack when a variable is passed to a function?
我正在使用JavaScript(Express)编写一个服务器端应用程序。因此,我必须验证一个大的字符流(基64字符串)。我知道我想做什么以及如何做,但我有一个与绩效相关的问题。
考虑一下上传的字符串真的很大(高达5MB)。我已经编写了几个应该进行验证的函数,但我不知道引擎盖后面发生了什么。
function validate(str) {
....
return bool;
}
var b64_string = '......'; // <- string can be 5 megabytes
if(validate(b64_string) {
doSomething(b64_string);
}
如果这是C,则会为validate(str)函数分配一个堆栈,并且传递的变量将有5mb的内存。
但JavaScript引擎会发生什么呢?有没有什么方法可以将"指针"发送到函数,这样内存消耗就不会太大?T
提前感谢!
对象是通过引用传递的。
我相信整数和字符串(等等)是而不是,所以要小心这一点。
考虑将字符串添加到对象哈希引用中,然后通过引用将其传递到链中。
例如:
var hashRef = {};
hashRef.b64_string = '......'; // <- string can be 5 megabytes
function validate(hashRef) {
....
return bool;
}
if(validate(hashRef)) {
doSomething(hashRef);
}
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 高图表,检测点是否在堆栈中的第一个
- 当一个变量被传递给一个函数时,JavaScript堆栈会发生什么
- 仅在堆栈中的最后一个执行回调
- Android WebView:在javascript中,有没有一种方法可以加载另一个javascript文件,并为堆栈
- JS调用堆栈是否始终至少有一个帧
- 如何制作一个Javascript/jQuery/HTML动画图像堆栈
- 如何在Javascript中释放上一个堆栈帧的内存
- 为了研究节点并制作好产品,哪个技术堆栈(模块、框架)更适合第一个node.js项目
- 获取堆栈中具有绝对位置的下一个元素
- JavaScript是否在每次递归调用时启动一个新的堆栈?
- 我如何采取一个缩小的javascript堆栈跟踪,并运行它对源映射,以获得适当的错误
- 是node.js + express(后端)+ emberjs(客户端)一个合理的堆栈为我的项目
- 动态更改URL,而不需要将前一个添加到历史堆栈
- 另一个IE错误:堆栈溢出在第0行,而使用jquery地址或至少ajax
- Highcharts -如何在一个系列中获得堆栈的值
- 意味着js堆栈,调试Angular错误:fnPtr不是一个函数
- 为什么这个递归函数给我一个“最大调用堆栈大小超过”错误
- 打开一个新的选项卡会丢失本地存储中的arraylist javascript堆栈溢出
- (为什么)有一个“自称”的指令在一个有限的n -repeat导致一个堆栈溢出从无限递归