相关疑难解决方法(0)

express/node.js API中的高效服务器端JavaScript内存管理

概观

我过去已经对JavaScript内存管理做了一些阅读,并且意识到循环DOM引用的问题等.

但是我仍然有点不舒服,因为这转换为服务器端JavaScript环境,例如node.js,更具体地说是写在express上的API .


拿这个样本文件(让我们称之为server.js)

var npm_moduleA = require('npmA')({ someInitArg : 'blah' }),
    app = express.createServer();

app.get('/api/foo', function (req, res) {

    var result = npm_moduleA.doSomething();
    res.send(result);

});

app.get('/api/bar', function (req, res) {

    var npm_moduleB = require('npmB')({ someInitArg : 'blah' }),
        result = npm_moduleB.doSomethingElse();

    res.send(result);

});
Run Code Online (Sandbox Code Playgroud)

问题(假设这是一个高负荷的网站)

  1. 什么是生命周期npm_moduleA它能够在瞬间创建的服务器启动,但是当(如果有的话确实GC踢反对) -我猜测,它从来没有被感动,因为它在全球范围内?

  2. 在'/ api/bar /'中,npm_moduleB每次请求后都应该删除吗?或者这应该留给GC单独使用.

  3. 全局实例化是否npm_moduleA比重复实例化(以及可能的删除)明显更有效npm_moduleB


参考

javascript memory-management node.js express

11
推荐指数
1
解决办法
1461
查看次数

Ionic 2/Ionic 3 - 垃圾收集

我正在努力更好地了解ionic2ionic3.

垃圾收集如何在离子中起作用?

  • 什么得到缓存,什么时候?
  • 我们如何清除这个缓存?
  • 我们如何为GC设置元素?
  • 我们甚至需要为GC设置元素吗?
  • 我们/我们需要为GC设置页面吗?

就像在这张图片中看到的那样(来源):

在此输入图像描述

当进入新页面时,一些内存获得G.C'd.然而,记忆仍然显着高于任何视频播放前的记忆.

garbage-collection ionic-framework ionic2 ionic3

10
推荐指数
1
解决办法
1551
查看次数

jquery中DOM元素的手动垃圾收集是否可以提高浏览器性能?

在性能范围上,删除不再需要的元素是否有意义?或者浏览器是否在dom元素上执行自动垃圾收集,这些在代码中没有进一步引用?

$('some_element').fadeOut(1000, function(el){
   $(el).remove(); // <-- does this make sense at all?
});
Run Code Online (Sandbox Code Playgroud)

javascript browser ajax jquery dom

9
推荐指数
1
解决办法
3728
查看次数

无限滚动会导致浏览器崩溃吗?

我实现了无限滚动:

new_page_value = 1;

$(window).scroll(function() {
    if($(window).scrollTop() >= $(document).height() - $(window).height() - 200) {

        new_page_value = parseInt(new_page_value) + 1;

        get_page(new_page_value);

    }
});
Run Code Online (Sandbox Code Playgroud)

当用户几乎到达页面底部(200px左侧)时,get_page()将调用该函数.这包含一个ajax调用,它获取新页面的所有内容并将附加<body>文档的内容中.

现在我才意识到,如果我的网站变大,而不是有10个小页面,我有一个巨大的巨型页面,那么用户的浏览器可能会崩溃,如果它们足够持久以保持无限滚动很长时间.

这可能是解决此问题的可能方法:

我将继续将新页面添加到文档中,<body>直到第10页,之后我将<body>完全替换内容而不是附加内容.所以使用html()而不是append().

我只是不知道这是否真的可以防止崩溃.将.html()清除之前通过ajax引入的html的"记忆"吗?

javascript browser crash jquery

9
推荐指数
1
解决办法
5077
查看次数

javascript垃圾收集器是否处理全局变量?

我对此感到困惑,因为我看过几个不同的评论.我正在阅读一本javascript书,其中提到将全局变量设置为null是一种很好的做法(假设没有其他引用)并且GC在下一次扫描时回收此变量的内存.我已经看到其他评论说全局变量从未被GC处理过.

此外,当在OOP结构中编写javascript时,如果我有类似这样的东西(游戏在全局上下文中)会发生什么:

var game = {};
game.level = 0;
game.hero = new hero();
//do stuff
game.hero = null;
Run Code Online (Sandbox Code Playgroud)

由于英雄生活在一个存储在游戏中的对象中,这个对象位于全局上下文中,如果我将例如英雄设置为null,那么这会被GC处理吗?

javascript garbage-collection

9
推荐指数
1
解决办法
2733
查看次数

我们如何删除Dart中的对象?

我想基本上删除我创建的对象.我们如何删除对象?

在这里检查了Object定义,但无法弄清楚这样做的方法.我也很好奇我们是否可以定义析构函数.

更新 问题是获得好的答案.但我想提请你注意我想要删除我的对象或调用析构函数的情况.假设我们想要使用您可以通过放置在其上的端口连接矩形来创建节奏.因此,我们的想法是拥有一个对象,该对象具有对矩形体的引用和两端的端口.实际上,该对象可能需要一些其他属性,如[bool] selected[bool] dragging[List<RectElement>] connectedSquares.例如,当用户选择矩形并命中退格时,我想确保矩形消失并且我的对象被正确删除.因此,这个用例可以更深入地了解这个问题.

dart

9
推荐指数
2
解决办法
5362
查看次数

使用原型继承的javascript代码中的对象生存期是什么?

我目前正在阅读"Javascript Good Parts",我发现了以下段落

如果我们尝试从对象检索属性值,并且对象缺少属性名称,则JavaScript会尝试从原型对象中检索属性值.如果该对象缺少属性,那么它将转到其原型,依此类推,直到该进程最终以Object.prototype结束.

如果我从obj1创建一个对象obj2作为原型,这是否意味着obj1不能被销毁,直到obj2也超出范围?

javascript prototype

8
推荐指数
1
解决办法
1176
查看次数

删除的替代方案?

我一直在浏览很多关于JavaScript严格模式的博客文章,文档等.

我注意到delete关键字有很多限制.我甚至不知道你是否可以称他们为限制.似乎delete不再有效.

我很想用严格的模式.这是一个好主意.但我也认为删除是一个好主意.

有没有其他方法可以"删除"变量,或者我只是搞砸了?

javascript

7
推荐指数
2
解决办法
3728
查看次数

使用JQuery/JavaScript导致内存泄漏的常见方法有哪些?

我的问题是假设您正在创建一个将长时间显示的网页.我很好奇在这种情况下使用JQuery/JavaScript会导致内存泄漏的常见问题是什么?例如,当您调用$.remove()元素集合时,内存会发生什么?谢谢!

javascript jquery memory-leaks memory-management

7
推荐指数
1
解决办法
618
查看次数

当没有返回引用时,作用域是否终止?

以此代码为例:

var test = (function(){
  var name = 'rar';
  return function foo(){
    console.log('test');
  };
}());
Run Code Online (Sandbox Code Playgroud)

foo获取返回到test 没有任何引用name在内部范围.怎么了name?它被摧毁了吗?或者它是否继续存在并与返回的函数混淆,但是无法访问?第一种情况是否类似于执行以下操作,好像name从来不是等式的一部分?:

var test = function foo(){
  console.log('test');
};
Run Code Online (Sandbox Code Playgroud)

这是另一个案例:

var test2 = (function(){
  var name = 'rar';
  var age = '20';
  return function foo(){
    console.log(age);
  };
}());
Run Code Online (Sandbox Code Playgroud)

age被引用foo并将形成一个闭包.但是,name仍然没有被任何东西引用.name在这种情况下会发生什么?它被摧毁了吗?或者它是否继续存在并与返回的函数混淆,但是无法访问?

javascript

6
推荐指数
1
解决办法
47
查看次数