最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在JavaScript中使用inline函數(shù)的問題

 更新時間:2007年03月08日 00:00:00   作者:  
前段時間被IE和JavaScript腳本引擎的Memory Leak問題弄得郁悶壞了,不過幸好現(xiàn)在總算是柳暗花明了,并且找到了一些IE中使用腳本避免ML問題的方法。繼續(xù)研究JavaScript的編寫,有發(fā)現(xiàn)一些不算ML問題,但是可以節(jié)約IE內(nèi)存使用的方法,在此和大家討論討論。

    我們在JavaScript中編寫代碼,對于定義函數(shù)的語句:
function foo()
{
    
// TODO: . . .
    return x;
}

可以說是在熟悉不過了。當(dāng)然除了這種定義函數(shù)的方法,我們還有另外幾種方法也能定義函數(shù):

var foo = function()
{
    
// TODO: . . .
    return x;
}

var foo = new Function('{/*todo*/return x;}');

    后兩種方法定義的JavaScript函數(shù),在調(diào)用起來和第一種沒有任何效果上的區(qū)別。

    不過由于JavaScript是解釋性語言,當(dāng)我們定義一個函數(shù)的時候,解析引擎生成一個Function對象實例,然后把函數(shù)內(nèi)容保存下來。所以每執(zhí)行一次函數(shù)定義語句,就會生成一個函數(shù)。而不像編譯語言,一個函數(shù)編譯一次后就被任何語句調(diào)用。???難道JavaScript不能調(diào)用定義好的函數(shù)?不是這個意思了,當(dāng)我們在制作JavaScript控件時,如果動態(tài)輸出DHTML來作為控件的內(nèi)容,就容易出現(xiàn)這樣的問題。比如我們在一個HTML對象生成過程中,使用了inline方式定義的函數(shù),那么這個元素生成幾次,那個函數(shù)也就要同時生成幾次。

 function TestObject.prototype.Render(doc, id)
 {
    
var span = doc.createElement('SPAN');
    span.Object 
= this;
    
this.m_Element = span;

    
if ( id == "NamedMethod" )
    {
        span.onclick 
= asdf;
    }
    
else
    { 
        span.onclick 
= function()
        {
            
var asdf01 = ['a', 's', 'd', 'f'];
            
var asdf02 = ['a', 's', 'd', 'f'];
            
var asdf03 = ['a', 's', 'd', 'f'];
            
var asdf04 = ['a', 's', 'd', 'f'];
            
var asdf05 = ['a', 's', 'd', 'f'];
            
var asdf06 = ['a', 's', 'd', 'f'];
            
var asdf07 = ['a', 's', 'd', 'f'];
            
var asdf08 = ['a', 's', 'd', 'f'];
            
var asdf09 = ['a', 's', 'd', 'f'];
            
var asdf10 = ['a', 's', 'd', 'f'];
            
var asdf11 = ['a', 's', 'd', 'f'];
            
var asdf12 = ['a', 's', 'd', 'f'];
        };
    }
    span.Name 
= this.m_Description;
    span.innerText 
= this.m_Name;
    span.style.display 
= 'block';
    
return span;
 }

    函數(shù)span.onclick = function()中的內(nèi)容是用來占位置的,這樣inline方式定義函數(shù),每次Render()都就會生成一個新的函數(shù)對象。使用inline方式有什么不好呢?當(dāng)對象實例多了的時候,會很明顯的浪費內(nèi)存空間呀,試驗數(shù)據(jù)如下:

   
 Normal Method   Inline Method 
 Initialized  27.4 M 27.4 M
 Rendered  33.4 M 35.2 M

    // IE消耗的內(nèi)存數(shù)量(PM+VM)

    單看絕對內(nèi)存消耗差別不大,可是如果看相對內(nèi)存消耗:(35.2-33.4)/(33.4-27.4) = 30% !!!,還是很可觀的了,而且如果方法本省越大,inline時冗余數(shù)據(jù)就越多。

    附測試代碼:
<html>
<head>
    
<title>JScript Function Spending</title>
    
<meta name="author" content="birdshome@博客園" /> 
</head>
<body onunload="ReleaseElements()">
    
<button id="NamedMethod" onclick="GenerateObjects(this)">
        Append Normal Elements
</button>
    
<button id="AnonymousMethod" onclick="GenerateObjects(this)">
        Append Inline Elements
</button>
    
<div id="container">
    
</div>
    
<script language="Javascript">
function GenerateObjects(elmt)
{
    
var room = document.getElementById('container');
    
for ( var i=0 ; i < 1000 ; ++i )
    
{
         
var obj = new TestObject('__Object__' + i);
         room.appendChild(obj.Render(document, elmt.id));
    }
 
}


function TestObject(name)
{
    
this.m_Name = name;
    
this.m_Description = '';
    
this.m_Element = null;
         
    
this.toString = function()
    
{
         
return '[class TestObject]'; 
    }

}


function TestObject.prototype.Render(doc, id)
{
    
var span = doc.createElement('SPAN');
    span.Object 
= this;
    
this.m_Element = span;

    
if ( id == "NamedMethod" )
    
{
         span.onclick 
= asdf;
    }

    
else
    

         span.onclick 
= function()
         
{
             
var asdf01 = ['a', 's', 'd', 'f'];
             
var asdf02 = ['a', 's', 'd', 'f'];
             
var asdf03 = ['a', 's', 'd', 'f'];
             
var asdf04 = ['a', 's', 'd', 'f'];
             
var asdf05 = ['a', 's', 'd', 'f'];
             
var asdf06 = ['a', 's', 'd', 'f'];
             
var asdf07 = ['a', 's', 'd', 'f'];
             
var asdf08 = ['a', 's', 'd', 'f'];
             
var asdf09 = ['a', 's', 'd', 'f'];
             
var asdf10 = ['a', 's', 'd', 'f'];
             
var asdf11 = ['a', 's', 'd', 'f'];
             
var asdf12 = ['a', 's', 'd', 'f'];
         }
;
    }

    span.Name 
= this.m_Description;
    span.innerText 
= this.m_Name;
    span.style.display 
= 'block';
    
return span;
}


function asdf()
{
    
var asdf01 = ['a', 's', 'd', 'f'];
    
var asdf02 = ['a', 's', 'd', 'f'];
    
var asdf03 = ['a', 's', 'd', 'f'];
    
var asdf04 = ['a', 's', 'd', 'f'];
    
var asdf05 = ['a', 's', 'd', 'f'];
    
var asdf06 = ['a', 's', 'd', 'f'];
    
var asdf07 = ['a', 's', 'd', 'f'];
    
var asdf08 = ['a', 's', 'd', 'f'];
    
var asdf09 = ['a', 's', 'd', 'f'];
    
var asdf10 = ['a', 's', 'd', 'f'];
    
var asdf11 = ['a', 's', 'd', 'f'];
    
var asdf12 = ['a', 's', 'd', 'f'];
}

</script>
    
<script language="javascript">
function ReleaseElements()
{
    
var room = document.getElementById('container');
    
var spans = room.all.tags('SPAN');
    
for ( var i=0 ; i < spans.length ; ++i )
    
{
         spans[i].Object 
= '';
    }

}
 
</script>
</body>
</html>

相關(guān)文章

  • js實現(xiàn)淘寶瀏覽商品放大鏡功能

    js實現(xiàn)淘寶瀏覽商品放大鏡功能

    這篇文章主要為大家詳細介紹了js實現(xiàn)淘寶瀏覽商品放大鏡功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • js執(zhí)行字符串代碼的具體實現(xiàn)

    js執(zhí)行字符串代碼的具體實現(xiàn)

    這篇文章主要給大家介紹了js執(zhí)行字符串代碼的具體實現(xiàn),需要的朋友可以參考下
    2024-06-06
  • JavaScript null和undefined區(qū)別分析

    JavaScript null和undefined區(qū)別分析

    在JavaScript開發(fā)中,被人問到:null與undefined到底有啥區(qū)別?
    2009-10-10
  • JavaScript實現(xiàn)將數(shù)組中所有元素連接成一個字符串的方法

    JavaScript實現(xiàn)將數(shù)組中所有元素連接成一個字符串的方法

    這篇文章主要介紹了JavaScript實現(xiàn)將數(shù)組中所有元素連接成一個字符串的方法,涉及javascript中采用join方法進行數(shù)組轉(zhuǎn)化的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 前端layui?table表格勾選事件以及常見模塊詳解

    前端layui?table表格勾選事件以及常見模塊詳解

    Layui 是一個非常流行的前端框架,其中的table組件可以幫助您實現(xiàn)復(fù)選框功能,下面這篇文章主要給大家介紹了關(guān)于前端layui?table表格勾選事件以及常見模塊的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • js實現(xiàn)上下滑動輪播

    js實現(xiàn)上下滑動輪播

    這篇文章主要為大家詳細介紹了js實現(xiàn)上下滑動輪播,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JS讀寫CSS樣式的方法匯總

    JS讀寫CSS樣式的方法匯總

    這篇文章主要為大家詳細匯總了JS讀寫CSS樣式的方法,內(nèi)容詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • ECharts繪制立體柱狀圖(圓柱體)詳細示例

    ECharts繪制立體柱狀圖(圓柱體)詳細示例

    echarts實現(xiàn)平面的柱狀圖很順利,但是用戶為了美觀立體感,用到圓柱體圖,下面這篇文章主要給大家介紹了關(guān)于ECharts繪制立體柱狀圖(圓柱體)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 推薦20家國外的腳本下載網(wǎng)站

    推薦20家國外的腳本下載網(wǎng)站

    腳本使網(wǎng)站更加動態(tài)和更具交互性,但是寫好一個腳本并不是一件容易的工作,因此一些開發(fā)者會到網(wǎng)站下載其他人分享的腳本來使用。今天,本文向大家推薦20佳國外的腳本下載網(wǎng)站。
    2011-04-04
  • JavaScript中三個等號和兩個等號的區(qū)別(== 和 ===)淺析

    JavaScript中三個等號和兩個等號的區(qū)別(== 和 ===)淺析

    javascript中比較運算符'=='與'==='可能大家用的比較多,但是大家對他的區(qū)別不是很清楚,接下來小編給大家介紹下js中三個等號和兩個等號的區(qū)別(== 和 ===),感興趣的朋友可以參考下
    2016-09-09

最新評論

洛扎县| 河间市| 阳西县| 泊头市| 杂多县| 雷山县| 云霄县| 淳化县| 宜昌市| 新泰市| 文安县| 罗田县| 绍兴县| 邹平县| 景宁| 左云县| 闽侯县| 南阳市| 马龙县| 汉阴县| 定安县| 吐鲁番市| 林芝县| 剑阁县| 永善县| 原阳县| 元谋县| 株洲市| 嵩明县| 泰兴市| 财经| 富顺县| 腾冲县| 平和县| 银川市| 祥云县| 汤阴县| 迁安市| 黄石市| 闸北区| 英山县|