摘要:注意作用域避免全局查找以上代碼應(yīng)該修改如下避免語(yǔ)句必須使用語(yǔ)句的情況很少,因?yàn)樗饕糜谙~外的字符。將代碼分離稱多個(gè)文件只是為了提高可維護(hù)性,并非為了部署。要進(jìn)行部署的時(shí)候,需要將這些源代碼合并為一個(gè)或幾個(gè)歸并文件。
注意作用域 避免全局查找
function updateUI () { var images = document.getElementsByTagName("img"); for (var i = 0, len = images.length; i < len; i++) { images[i].title = document.title + " image " + i; } var msg = document.getElementById("msg"); msg.innerHTML = "Update complete"; }
以上代碼應(yīng)該修改如下:
function updateUI () { var doc = document; //doc var images = doc.getElementsByTagName("img"); for (var i = 0, len = images.length; i < len; i++) { images[i].title = doc.title + " image " + i; //doc } var msg = doc.getElementById("msg"); //doc msg.innerHTML = "Update complete"; }避免with語(yǔ)句
必須使用with語(yǔ)句的情況很少,因?yàn)樗饕糜谙~外的字符。
使用正確方法 避免不必要的屬性查找算法的復(fù)雜度是使用O符號(hào)來(lái)表示的,最簡(jiǎn)單快速的算法是常熟值O(1)。
使用變量和數(shù)組要比訪問(wèn)對(duì)象上的屬性更有效率。
var query = window.location.href.substring(window.location.href.indexOf("?"));
上面的代碼需要6次屬性查找,應(yīng)該改為:
var url = window.location.href; var query = url.substring(url.indexOf("?"));
上面的代碼則減少為4次屬性查找。
優(yōu)化循環(huán)for (var i = 0; i < Things.length; i++) { Things[i] }; for (var i = Things.length - 1; i >= 0; i--) { Things[i] };
應(yīng)該才去上面第二種寫法。
var id = Things.length - 1; if (i > -1) { do { Things[i]; } while (--i >= 0); }
或者把循環(huán)改成后測(cè)試循環(huán)。
展開(kāi)循環(huán)使用Duff裝置
其他避免雙重解釋
用原生方法C或C++等
用Switch代替if-else
位操作符代替布爾運(yùn)算和算數(shù)運(yùn)算
最小化語(yǔ)句數(shù) 多個(gè)變量聲明var count = 5; var color = "red"; var value = [21, 3, 21, 4]; var count = 5, color = "red", value = [21, 3, 21, 4];
應(yīng)該采用下面的方法
使用數(shù)組和對(duì)象字面量語(yǔ)法var values = new Array(); values[0] = 123; values[1] = 456; var obj = new Object(); obj.name = "Oli"; obj.age = 18; var values = [123, 456]; var obj = { name: "Oli", age: 18 };
應(yīng)該采用下面的方法
優(yōu)化DOM交互 最小化現(xiàn)場(chǎng)更新使用fragment方法更新DOM
使用innerHTMLvar list = document.getElementById("myList"), html = "", i; for (var i = 10; i >= 0; i--) { html = html + "
類似fragment方法,要避免以下寫法:
var list = document.getElementById("myList"), i; for (var i = 10; i >= 0; i--) { list.innerHTML = list.innerHTML + "
任何可以冒泡的事件都可以在祖先節(jié)點(diǎn)上處理事件;
注意HTMLCollectionvar imgs = document.getElementsByTagName("img"); for (var i = 0, len = imgs.length; i < len; i++) { //processing... };部署 構(gòu)建過(guò)程
將每個(gè)對(duì)象或自定義類型分別放在多帶帶的文件中。
將代碼分離稱多個(gè)文件只是為了提高可維護(hù)性,并非為了部署。
要進(jìn)行部署的時(shí)候,需要將這些源代碼合并為一個(gè)或幾個(gè)歸并文件。
Ant構(gòu)建工具(http://ant.apache.org)
驗(yàn)證用JSLint(http://www.jslint.com)
壓縮 文件壓縮使用YUI壓縮器(http://yuilibrary.com/projects/yuicompressor)
HTTP壓縮在Apache Web服務(wù)器中可以用下面兩個(gè)模塊進(jìn)行HTTP壓縮:mod_gzip和mod_deflate
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78960.html
摘要:代碼約定可讀性以下地方需要進(jìn)行注釋函數(shù)和方法注釋參數(shù)代表什么,是否有返回值大段代碼描述任務(wù)的注釋復(fù)雜的算法變量和函數(shù)命名變量用名詞函數(shù)名用動(dòng)詞開(kāi)頭等返回布爾值類型的函數(shù)用等合乎邏輯不用擔(dān)心太長(zhǎng)變量類型透明化方法一初始化,如下推薦方法二匈牙利 代碼約定 可讀性 以下地方需要進(jìn)行注釋: 函數(shù)和方法:注釋參數(shù)代表什么,是否有返回值; 大段代碼:描述任務(wù)的注釋; 復(fù)雜的算法; Hack 變...
摘要:垃圾收集具有自動(dòng)垃圾收集機(jī)制。管理內(nèi)存優(yōu)化內(nèi)存的最佳方式,就是為執(zhí)行中的代碼只保存必要的數(shù)據(jù)。一般適用于大多數(shù)的全局變量和全局對(duì)象的屬性。如執(zhí)行完畢后,變量被銷毀手動(dòng)解除的引用解除一個(gè)值的引用并不意味著自動(dòng)回收該值所占的內(nèi)存。 垃圾收集 JavaScript 具有自動(dòng)垃圾收集機(jī)制。 標(biāo)記清除 JavaScript 中最常用的垃圾收集方式是標(biāo)記清除。 當(dāng)變量進(jìn)入環(huán)境(如在函數(shù)中聲明一個(gè)...
摘要:能力檢測(cè)性能檢測(cè)基本模式語(yǔ)法目標(biāo)不是識(shí)別特定的瀏覽器,而是識(shí)別瀏覽器的能力。更可靠的能力檢測(cè)能力檢測(cè)對(duì)于想知道某個(gè)特性是否會(huì)按照適當(dāng)方式行事非常有用。所以在可能的情況下,要盡量使用進(jìn)行能力檢測(cè)。 客戶端檢測(cè) 不到萬(wàn)不得已,就不要使用客戶端檢測(cè)。只要能夠找到更通用的方法,就應(yīng)該優(yōu)先采用更通用的方法。先設(shè)計(jì)最通用的方案,然后再使用特定于瀏覽器的技術(shù)增強(qiáng)該方案。 能力檢測(cè)(性能檢測(cè)) 基本模...
摘要:編寫高質(zhì)量的要點(diǎn)深入理解系列一知識(shí)點(diǎn)最小全局變量全局變量命名易與第三方的腳本引起沖突所以盡可能少的使用全局變量是很重要的相關(guān)策略有命名空間模式或是函數(shù)立即自動(dòng)執(zhí)行,但是要想讓全局變量少最重要的還是始終使用來(lái)聲明變量。 Title: 編寫高質(zhì)量Javascript的要點(diǎn)-Review深入理解Javascript系列(一)date: 2017-6-9 14:14:20 status: p...
摘要:如調(diào)用函數(shù)聲明函數(shù)不會(huì)報(bào)錯(cuò)使用函數(shù)表達(dá)式則不可以報(bào)錯(cuò)創(chuàng)建函數(shù)的兩種方式,一個(gè)是函數(shù)聲明如第一種方式一個(gè)是函數(shù)表達(dá)式如第二種方式。第二種函數(shù)創(chuàng)建方式創(chuàng)建的函數(shù)叫匿名函數(shù)或拉姆達(dá)函數(shù),因?yàn)殛P(guān)鍵字后面沒(méi)有標(biāo)識(shí)符。 函數(shù)表達(dá)式的基本概念 name屬性和函數(shù)提升 首先,name屬性,通過(guò)這個(gè)屬性可以訪問(wèn)到給函數(shù)指定的名字。(非標(biāo)準(zhǔn)的屬性)如: function People(){}; cons...
閱讀 682·2021-11-25 09:43
閱讀 1688·2021-11-18 10:02
閱讀 1067·2021-10-15 09:39
閱讀 1918·2021-10-12 10:18
閱讀 2151·2021-09-22 15:43
閱讀 795·2021-09-22 15:10
閱讀 2110·2019-08-30 15:53
閱讀 1011·2019-08-30 13:00