不是吧,我的是IE7和Firefox2.0.0.8,没有问题啊,只是CSS弱 DIV更弱。

解决方案 »

  1.   

    to gzdiablo代码里面用的就是闭包,呵呵。
      

  2.   

    我的 win200 sp4  + IE 6.0.2800 有问题 
      

  3.   

    看到代码里面多用了一层function来绑定事件. 
    网上说这样很好但实际上反而妨碍了IE下内存的释放.
    因为就算你将几个事件模型delete掉,在释放HTMLELement时候缺因为无法释放掉几个onmouseover=function(){}等等。导致整个HTMLElement仍然在残留在内存中
      

  4.   

    经你这么一说我还真测了下纯IE7打开空白页 = 25.5MB
    打开页面拦截JavaScript = 28MB
    启用JavaScript < 28.5MB 几百K的内存可以忽略不计了
    把所有菜单事件触发一遍 = 30MB 这里是循环遍历了儿子 占用了1.5MB  而这里的1.5MB是绑定事件之后 事件触发的,没有通过闭包,因为标签对象的事件在页面装载时就已经附加上去,闭包的工作在触发任何一个菜单之前早就已经结束,没结束浏览器会报错。CPU峰值 4%首先程序是面向对象,用闭包无非就挽救this,让程序更贴近对象编程。再一个没有用递归,每一层都只处理自己的儿子,而且怎个事件绑定只有一次onload的时候。整个IE都关了不知道内存还占着做什么,如果这样操作系统多开几个不规范的网页不就挂了,不是大型树菜单,占用不了多少资源,都在正常范围,不信你就编个最简单的试试,通常大规模JavaScript如果编码习惯不好,乱用对象,那是程序员自讨苦吃。=====
    Firefox的测试让我无语,启动Firefox打开空白页 25.7n MB,打开页面跑一遍菜单涨了一点点 还是25.7n MB,当中还有我的一些插件,还有Google的同步收藏夹验证同步占用的资源都在内。
      

  5.   

    确实关闭了浏览器就什么都解决了。如果是大应用外加ajax交互。这里必定存在大量的数据交互。到时候就很难避免内存泄漏带来的问题。浏览速度降低是主要表现。不过一般的小应用这些可以忽略不计。
    我只是提点意见。LZ的代码非常标准没什么问题。说实在我以前也是这么写的。
      

  6.   

    其实不难发现C#和Java的一些事件都是函数指针的模式,JavaScript也不例外,实际在 onclick = "代码片段1;代码片对2;代码片段n;..."这些是明文代码 也就是函数模型,怎么样都需要实例对象。  而对象是用绳子拉着走了,绳子一断,对象也就失去了在存在的意义(所以才会丢失对象丢失了this的引用,那么程序对内存的管理原理不说大家也都明白了),现在的语言都会考虑到这一点,如果IE真这么多问题,也只能说明IE改动的地方太多,别人统一用JavaScript他就偏偏要翻版一个JSCript,而且做了很多改动,所以问题多也怪不得我们程序员。只是好多人习惯了IE反而不习惯标准了。编程进步、程序员进步,IE如果不进步,迟早会被边缘化。这里说的内容涉及C/C++的指针 C#或Java的对象垃圾回收机制,并不是我乱说的,的确这些都是基础原理。我晕,无非就是个下拉菜单,呵呵。  练了练刚学会不久的JavaScript模拟对象编程,再说做得也不好。
      

  7.   

    gzdiablo 你当真以前和我一样这么写的? 哈哈
      

  8.   

    C#和java对于我来说几乎是玩具了.
    C++我开发过单片机数据采集项目 但2年多没用了都生了.
    C的话自从在大学时写过泥巴之外就没用过了.javascript我有4年经验了,但以前都是DOM操作.开始OOP模式开发也只是1年多的时间.
    不过已经是非常精了.也专门研究过IE的内存泄漏和内存释放问题.所以才能和你这么说.
    你这样的代码大概是我半年前还没研究IE内存问题时的写法.
    因为曾经看过一个贵佬的js优化建议,里面也建议说另外用一个方法去调用比较好.确实IE存在这这样那样的问题.不过IE的标准确实比较好.FF也在慢慢的吸收IE的部分标准.
    如此下去FF还真有可能超越IE.IE可能也会修正自己的bug.
      

  9.   

    无语...  gzdiablo暴强。
      

  10.   

    gzdiablo 看了你的文章,IE或IE内核的浏览器在最小化时内存调整幅度巨大,你研究得真仔细。请教一下,上面的代码怎样改动能得到更好的效果?
      

  11.   

    每刷新一次占用内存就多几十K !
    IE 6.0.3790.1830
      

  12.   

    for循环的话国外的网站上说应该
    for(var i=0,l=xxx.length;i<l;i++)....其他没什么问题,结构有点特殊..好像和我的写法有点区别........
    这种结构不好评论.
      

  13.   

    其实只要给window.onunload事件加个语句柄就可以降低刷新后内存增加的问题 但效率非常低不建议用
    而且只是清除元素因为数据绑定导致内存无法卸载的问题 但脚本里面引起的内存问题则无法解决window.onunload = function()
    {
    var tags = document.getElementsByTagName("*");//获取全部标签
    for(var i=0,l=tags.length;i<l;i++)//遍历全部标签 优化了for循环
    for(var o in tags[i])//遍历全部属性
    if(o.indexOf("on")==0)//判断属性是否以"on"开头 是否是事件柄
    tags[i][o] = null;//清除事件柄的内容
    }
      

  14.   

    周末我再研究一下,这个还没考虑子菜单的样式事件,虽然可以实现,但是比较混乱。 需要大改结构。其实我这种写法的目的是 便于界面设计师一目了然 他一看HTML部分就知道谁是谁的下级菜单,这样搞界面精通CSS和DIV的想怎么设计就怎么设计。子菜单可以用容器包裹起来,在容器上做文章。