Javascript 如何限制数组';s的价值观?

Javascript 如何限制数组';s的价值观?,javascript,jquery,arrays,performance,Javascript,Jquery,Arrays,Performance,我有一个JS数组,它的每个键都包含一个页面的整个HTML。我将该数组用作后退和前进按钮 有时,当它包含100页的HTML时,浏览器的性能会下降。我有两个问题: 可以计算内存中JS数组的大小吗 如何限制数组?我的意思是,我想在推送新值时删除旧数组的值。有什么事 当前阵列: var myarr = ['val1', 'val2', 'val3']; // - it should be limited to 3 values +------+------+------+ | val1 | val2 |

我有一个JS数组,它的每个键都包含一个页面的整个HTML。我将该数组用作后退和前进按钮

有时,当它包含100页的HTML时,浏览器的性能会下降。我有两个问题:

  • 可以计算内存中JS数组的大小吗
  • 如何限制数组?我的意思是,我想在推送新值时删除旧数组的值。有什么事
  • 当前阵列:

    var myarr = ['val1', 'val2', 'val3']; // - it should be limited to 3 values
    +------+------+------+
    | val1 | val2 | val3 |
    +------+------+------+
    
    将新值推入数组后应为该数组:

    myarr.push('val4'); // expected result:
    
    +------+------+------+
    | val2 | val3 | val4 |
    +------+------+------+
    

    这样做可能吗

    很明显,您需要一种堆栈。例如,如果您正在使用此数组,并且有许多push调用。您可以替换它的push函数(不是Array.prototype,而是实例本身的push)。在那里,如果需要,可以限制数组并移动元素

    var push = arrayInstance.push;
    arrayInstance.push = function(elem) {
        // todo check length and remove leading elems if needed
        push(elem);
    }
    

    它可能在语法上不正确,但你能理解。这不是一个干净的解决方案,更好的解决方案是嵌套功能并创建相应的对象/类。

    为什么还要使用数组呢。如果您正在动态地构建数组的值,这些值是上一页和下一页的HTML,那么您不能简单地使用全局变量来保存这些值吗

    lastPage = HTML of currentPage-1
    thisPage = HTML of currentPage
    nextPage = HTML of currentPage +1
    
    所以当你前进的时候

    lastPage = thisPage;
    thisPage = nextPage;
    nextPage = HTML of currentPage + 1 (computed)
    
    然后回来

    nextPage = thisPage;
    thisPage = lastPage;
    lastPage = HTML of currentPage -1 (computed)
    

    这样就不会出现任何数组增长或内存泄漏问题。

    用于删除第一个元素。使用ArrayInsertCustomMethod(item)方法管理数组逻辑如果您知道如何使用array.slice,您可以创建所需长度的新数组:
    var arr2=[…myarr.slice(-2),'var4']
    对于第一个问题,有答案,以及如何计算对象的内存占用。只需在阵列上循环。有关数组方法的更多信息,请阅读。我还应该提到,像那样将页面的整个HTML加载到内存中可能是个坏主意。它完全违背了浏览器缓存页面的功能。