在JavaScript中使用inline函数的问题

时间:2024-04-29 13:42:44 

前段时间被IE和JavaScript脚本引擎的Memory Leak问题弄得郁闷坏了,不过幸好现在总算是柳暗花明了,并且找到了一些IE中使用脚本避免ML问题的方法。继续研究JavaScript的编写,有发现一些不算ML问题,但是可以节约IE内存使用的方法,在此和大家讨论讨论。

    我们在JavaScript中编写代码,对于定义函数的语句:

在JavaScript中使用inline函数的问题function foo()
在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    // TODO: . . .
在JavaScript中使用inline函数的问题    return x;
在JavaScript中使用inline函数的问题}

可以说是在熟悉不过了。当然除了这种定义函数的方法,我们还有另外几种方法也能定义函数:

在JavaScript中使用inline函数的问题var foo = function()
在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    // TODO: . . .
在JavaScript中使用inline函数的问题    return x;
在JavaScript中使用inline函数的问题}


在JavaScript中使用inline函数的问题var foo = new Function('{/*todo*/return x;}');

    后两种方法定义的JavaScript函数,在调用起来和第一种没有任何效果上的区别。

    不过由于JavaScript是解释性语言,当我们定义一个函数的时候,解析引擎生成一个Function对象实例,然后把函数内容保存下来。所以每执行一次函数定义语句,就会生成一个函数。而不像编译语言,一个函数编译一次后就被任何语句调用。啊?难道JavaScript不能调用定义好的函数?不是这个意思了,当我们在制作JavaScript控件时,如果动态输出DHTML来作为控件的内容,就容易出现这样的问题。比如我们在一个HTML对象生成过程中,使用了inline方式定义的函数,那么这个元素生成几次,那个函数也就要同时生成几次。

在JavaScript中使用inline函数的问题 function TestObject.prototype.Render(doc, id)
在JavaScript中使用inline函数的问题 {
在JavaScript中使用inline函数的问题    var span = doc.createElement('SPAN');
在JavaScript中使用inline函数的问题    span.Object = this;
在JavaScript中使用inline函数的问题    this.m_Element = span;
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题    if ( id == "NamedMethod" )
在JavaScript中使用inline函数的问题    {
在JavaScript中使用inline函数的问题        span.onclick = asdf;
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题    else
在JavaScript中使用inline函数的问题    { 
在JavaScript中使用inline函数的问题        span.onclick = function()
在JavaScript中使用inline函数的问题        {
在JavaScript中使用inline函数的问题            var asdf01 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf02 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf03 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf04 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf05 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf06 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf07 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf08 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf09 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf10 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf11 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题            var asdf12 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题        };
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题    span.Name = this.m_Description;
在JavaScript中使用inline函数的问题    span.innerText = this.m_Name;
在JavaScript中使用inline函数的问题    span.style.display = 'block';
在JavaScript中使用inline函数的问题    return span;
在JavaScript中使用inline函数的问题 }

    函数span.onclick = function()中的内容是用来占位置的,这样inline方式定义函数,每次Render()都就会生成一个新的函数对象。使用inline方式有什么不好呢?当对象实例多了的时候,会很明显的浪费内存空间呀,试验数据如下:

   


 Normal Method  Inline Method 

 Initialized 27.4 M27.4 M
 Rendered 33.4 M35.2 M


    // IE消耗的内存数量(PM+VM)

    单看绝对内存消耗差别不大,可是如果看相对内存消耗:(35.2-33.4)/(33.4-27.4) = 30% !!!,还是很可观的了,而且如果方法本省越大,inline时冗余数据就越多。

    附测试代码:

在JavaScript中使用inline函数的问题<html>
在JavaScript中使用inline函数的问题<head>
在JavaScript中使用inline函数的问题    <title>JScript Function Spending</title>
在JavaScript中使用inline函数的问题    <meta name="author" content="birdshome@博客园" /> 
在JavaScript中使用inline函数的问题</head>
在JavaScript中使用inline函数的问题<body onunload="ReleaseElements()">
在JavaScript中使用inline函数的问题    <button id="NamedMethod" onclick="GenerateObjects(this)">
在JavaScript中使用inline函数的问题        Append Normal Elements</button>
在JavaScript中使用inline函数的问题    <button id="AnonymousMethod" onclick="GenerateObjects(this)">
在JavaScript中使用inline函数的问题        Append Inline Elements</button>
在JavaScript中使用inline函数的问题    <div id="container">
在JavaScript中使用inline函数的问题    </div>
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    <script language="Javascript">在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题function GenerateObjects(elmt)
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    var room = document.getElementById('container');
在JavaScript中使用inline函数的问题    for ( var i=0 ; i < 1000 ; ++i )
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题         var obj = new TestObject('__Object__' + i);
在JavaScript中使用inline函数的问题         room.appendChild(obj.Render(document, elmt.id));
在JavaScript中使用inline函数的问题    } 
在JavaScript中使用inline函数的问题}
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题function TestObject(name)
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    this.m_Name = name;
在JavaScript中使用inline函数的问题    this.m_Description = '';
在JavaScript中使用inline函数的问题    this.m_Element = null;
在JavaScript中使用inline函数的问题         
在JavaScript中使用inline函数的问题    this.toString = function()
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题         return '[class TestObject]'; 
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题}
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题function TestObject.prototype.Render(doc, id)
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    var span = doc.createElement('SPAN');
在JavaScript中使用inline函数的问题    span.Object = this;
在JavaScript中使用inline函数的问题    this.m_Element = span;
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题    if ( id == "NamedMethod" )
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题         span.onclick = asdf;
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题    else
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题         span.onclick = function()
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题         在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题             var asdf01 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf02 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf03 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf04 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf05 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf06 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf07 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf08 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf09 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf10 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf11 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题             var asdf12 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题         };
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题    span.Name = this.m_Description;
在JavaScript中使用inline函数的问题    span.innerText = this.m_Name;
在JavaScript中使用inline函数的问题    span.style.display = 'block';
在JavaScript中使用inline函数的问题    return span;
在JavaScript中使用inline函数的问题}
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题function asdf()
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    var asdf01 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf02 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf03 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf04 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf05 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf06 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf07 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf08 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf09 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf10 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf11 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题    var asdf12 = ['a', 's', 'd', 'f'];
在JavaScript中使用inline函数的问题}
在JavaScript中使用inline函数的问题</script>
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    <script language="javascript">在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题function ReleaseElements()
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题    var room = document.getElementById('container');
在JavaScript中使用inline函数的问题    var spans = room.all.tags('SPAN');
在JavaScript中使用inline函数的问题    for ( var i=0 ; i < spans.length ; ++i )
在JavaScript中使用inline函数的问题在JavaScript中使用inline函数的问题    在JavaScript中使用inline函数的问题{
在JavaScript中使用inline函数的问题         spans[i].Object = '';
在JavaScript中使用inline函数的问题    }
在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题</script>
在JavaScript中使用inline函数的问题</body>
在JavaScript中使用inline函数的问题</html>
在JavaScript中使用inline函数的问题


标签:在JavaScript中使用inline函数的问题
0
投稿

猜你喜欢

  • 零基础写python爬虫之爬虫编写全记录

    2021-09-06 22:53:27
  • golang gorm错误处理事务以及日志用法示例

    2024-04-25 13:18:50
  • OpenCV视频流Python多线程处理方法详细分析

    2022-02-14 20:29:45
  • MySQL两种表存储结构性能比较测试过程

    2007-12-09 12:45:00
  • 查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    2024-01-23 01:10:46
  • Python异常继承关系和自定义异常实现代码实例

    2023-06-22 07:34:44
  • 利用Python找出删除自己微信的好友并将他们自动化删除

    2022-05-23 00:10:13
  • mysql中如何优化表释放表空间

    2024-01-18 09:58:27
  • 使用jupyter notebook运行python和R的步骤

    2023-03-30 18:22:50
  • mysql远程跨库联合查询的示例

    2024-01-13 23:09:10
  • mssql 大小写区分方法

    2008-12-29 14:08:00
  • sysbench对mysql压力测试的详细教程

    2024-01-13 01:33:40
  • Python计算斗牛游戏概率算法实例分析

    2021-08-08 09:52:21
  • 浅析Python语言自带的数据结构有哪些

    2022-01-14 04:08:44
  • NumPy中的维度Axis详解

    2021-02-12 12:39:35
  • 使用Python手工计算x的算数平方根,来自中国古人的数学智慧

    2021-12-07 01:29:53
  • python实现切割url得到域名、协议、主机名等各个字段的例子

    2022-02-26 11:02:25
  • 关于Python形参打包与解包小技巧分享

    2021-06-08 21:43:39
  • 通过百度地图获取公交线路的站点坐标的js代码

    2024-04-18 09:28:14
  • VUE-ElementUI 时间区间选择器的使用

    2024-05-09 15:12:21
  • asp之家 网络编程 m.aspxhome.com