web前端開發(fā)編碼規(guī)范及性能優(yōu)化

代碼優(yōu)化

這個部分僅僅將代碼優(yōu)化本身,不考慮性能,關(guān)于代碼部分的性能優(yōu)化在 頁面渲染 部分 代碼優(yōu)化

HTML+CSS

  • 符合 XHTML 規(guī)范: 小寫,正確嵌套,必須關(guān)閉;
  • 雙引號,合理縮進(jìn),utf-8編碼;
  • 標(biāo)簽語義化,便于維護(hù);
  • 合理注釋,比如 div 關(guān)閉的地方表明配對的 div;
  • HTML,CSS,JS 分離,方便維護(hù);
  • 避免使用 iframe, 否則會阻塞父文檔 onload;
  • 樣式繼承,不要重復(fù);
  • 不要亂用 href 和 onclick, 他們本質(zhì)不同,href 偏向資源加載,而 onclick 僅僅是點擊;其次 click 事件在 href 之前執(zhí)行;
  • css偽類選擇器不宜太多,防止選擇器過載;
  • 不要讓樣式難以覆蓋,少用!improtant;
  • 善于利用樣式繼承(注意繼承和層疊是不一樣的概念);
  • 不要保留過時的瀏覽器前綴和兼容性寫法;

JavaScript

  • 標(biāo)識符簡短清晰,不用 1 和 0 代替 true 和 false,合理編寫注釋,提高代碼可讀性;
  • 定義變量一定寫 var,以免污染全局,同時,new Function() 和 eval() 也會污染全局;
  • 長字符串用字符串鏈接寫法,而非跨行。在兼容的情況下,用 ES6 中的多行字符串也更好;
  • 不要在 if 和 for 中定義函數(shù),前置沒有意義,破壞分支;后者易出現(xiàn)循環(huán)參數(shù)拖尾的情況;
  • 在此法作用域開始處聲明變量,提高可讀性;
  • var Name = function Name(){}; 有利于堆棧跟蹤(注意變量名一致性);
  • 位運算不要大于32位;
  • 不要隨意重寫已有原型,可以用其實例化對象代替,實現(xiàn)實例繼承;
  • 對象方法盡量返回 this 以便鏈?zhǔn)秸{(diào)用;
  • 函數(shù)的放入同名文件夾中,定義 noConflict 方法導(dǎo)出前一版本并返回當(dāng)然版本;
  • 設(shè)計封裝(類,閉包,模塊)時,盡量使用嚴(yán)格模式;
  • 在內(nèi)容為 js 的 script 標(biāo)簽上和內(nèi)容為 css 的 link 標(biāo)簽上省略 type 屬性和 lang 屬性;
  • 注意變量名不要使用保留字和系統(tǒng)全局變量(方法)一樣;
  • 以下行為污染全局: setTimeout 和 setInterval 的首參傳入字符串; eval()函數(shù); new Function() 構(gòu)造函數(shù)疮薇。

性能優(yōu)化

頁面渲染

減少頁面 reflow

  • 修改元素多個樣式可以通過修改 className 完成,這樣可以把多次 reflow 減少為一次 reflow;
  • 修改元素多個樣式可以分為三步:先隱藏(display:none), 再修改,最后顯示凹蜂。這樣可以把多次 reflow 減少為兩次次 reflow;
  • 添加頁面內(nèi)容可以通過將所有內(nèi)容寫入 docuemnt fragment 元素后再一次性 append 到頁面中;
  • 添加頁面內(nèi)容可以通過將所有內(nèi)容組成長字符串,再一次性編輯 innerHTML 加入到頁面中;
  • css(style 標(biāo)簽和 link 標(biāo)簽) 放在 head 中,這樣瀏覽器在加載數(shù)據(jù)時候可以直接通過 css tree 生成 render tree, 減少不必要的重新渲染;
  • 在不影響視覺效果的情況下,盡量減少 js 動畫精度;
  • div 布局優(yōu)于 table 布局,因為后者中元素任意屬性改名都會對整個表進(jìn)行回流;

優(yōu)化用戶體驗

  • 使用懶加載技術(shù),保證首屏優(yōu)先加載;
  • 使用異步腳步,不阻塞主頁面渲染;
  • 先渲染界面,在不影響首屏情況下,使用 js 腳本動態(tài)加載后續(xù)數(shù)據(jù);
  • 將不影響渲染的腳本后置(放在 body 之后),優(yōu)先渲染;
  • 添加自定義的錯誤頁面(如404 not found 頁面);
  • 利用 GPU 加速;

代碼優(yōu)化

  • 圖片 img 標(biāo)簽的 src 不要空著,以免產(chǎn)生多余請求;
  • href, url()和 src 中的鏈接,用//代替http://,/content/a.jpg代替content/a.jpg, 被替代的后者會多發(fā)送一個 http 請求;
  • 合理優(yōu)化外鏈 css 和 JS 以利用緩存;
  • 資源控制在25kB之內(nèi),否則移動端可能無法緩存;
  • 減少不必要的 DOM 節(jié)點;
  • 十六進(jìn)制顏色優(yōu)于 rgb/hsl 函數(shù),圖形轉(zhuǎn)換優(yōu)于動畫,css 動畫優(yōu)于 js 動畫,少用 hack 寫法;
  • 盡量避免 css 表達(dá)式;
  • 不要重復(fù)加載相同代碼;
  • 利用事件委托減少事件定義;
  • 利用變量保存多次用到的 DOM 查詢結(jié)果,減少反復(fù)查找;
  • 能用 !== 或 ===,就不要用 != 或 ==,減少不必要的隱式類型轉(zhuǎn)換;
  • 盡量使用現(xiàn)有的函數(shù)方法,比如數(shù)組所有元素求和,直接用 reduce 方法, 再考慮用 map 方法,接著考慮 forEach 方法,然后是 for...in, 最后是 for;
  • 利用 {} 或 [] 定義對象或數(shù)組,比 new Object() 或 new Array() 效率高;
  • 避免 String 類型隱式裝箱(隱式調(diào)用 new String());
  • 用 switch 代替過多的 if, 并按判斷條件的可能性排序,以便盡早結(jié)束判斷;
  • [].join() 動態(tài)生成字符串比字符串鏈接(+)性能更好;
  • nextSibling() 性能比 children 好虑绵;
  • cloneNode() 比 createElement() 效率高乍桂;
  • 考慮在頁面渲染完畢以后再動態(tài)加載輔助用的外部 js 腳本唤衫;

網(wǎng)絡(luò)通信

減少通信鏈接次數(shù)

  • css spirit 將多次請求變?yōu)?次請求;
  • 設(shè)置 http頭的屬性:connection: keep-alive,使得鏈接為長連接,減少頻繁的握手揮手過程;
  • 設(shè)置合適的 http頭的屬性:expires, cache-control 和 max-age
  • 合理利用瀏覽器本地緩存,路由緩存,使得一些數(shù)據(jù)不需要從服務(wù)器獲取;
  • 去除不必要的重定向;
  • 合并文件 如 css js腳本;
  • 保存(緩存)必要的 Ajax 請求數(shù)據(jù);

減少數(shù)據(jù)傳輸距離和數(shù)據(jù)大小

  • 壓縮代碼;
  • 使用內(nèi)容分發(fā)網(wǎng)絡(luò)(cdn), 如 Akamai, Limelight等;
  • 使用 Gzip 壓縮;
  • 使用新的圖片格式或矢量圖,如 .apng, .webp.svg;
  • 必要時, 減小 cookie, 以減少 http 請求中的數(shù)據(jù)量;
  • 盡量用縮寫的 css 樣式;
  • 合理利用服務(wù)器緩存,cdn緩存;
  • 盡量少用或不用 ETag,一般情況下 Expires 頭已經(jīng)夠用了;

合理利用服務(wù)器資源

  • 使用負(fù)載均衡技術(shù),如硬件技術(shù):Alteon, F5和軟件技術(shù):Nginx, LVS;
  • 減少 DNS 查找時間(控制在20ms~100ms);
  • 設(shè)置圖片服務(wù)器;
  • 增加 TTL 時長,建議為24hours(引自Steve Souders的《High Performance Web Sites》)

SEO

  • 完善 meta 標(biāo)簽,discription 簡潔明了,keywords 清晰;
  • 重要內(nèi)容不要用 js 或后端語言加載;
  • 合理利用 h標(biāo)簽,尤其 h1 標(biāo)簽,有很高權(quán)重;
  • 圖片寫上合理的 alt 值;
  • URI 控制在 256KB 之內(nèi);
  • 不要使用 iframe;
  • 語義化標(biāo)簽的使用;

綜合優(yōu)化

  • 用多個域名存儲網(wǎng)站資源(減小cookie, 節(jié)約主域名連接數(shù),突破瀏覽器并發(fā)限制,優(yōu)化cdn緩存)
  • 使用 base64 Encode 圖片,減小鏈接數(shù)量和傳輸大小刁笙。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膨蛮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竖慧,更是在濱河造成了極大的恐慌嫌套,老刑警劉巖逆屡,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踱讨,居然都是意外死亡魏蔗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門勇蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沫勿,“玉大人,你說我怎么就攤上這事味混〔ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵翁锡,是天一觀的道長蔓挖。 經(jīng)常有香客問我,道長馆衔,這世上最難降的妖魔是什么瘟判? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮角溃,結(jié)果婚禮上拷获,老公的妹妹穿的比我還像新娘。我一直安慰自己减细,他們只是感情好匆瓜,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著未蝌,像睡著了一般驮吱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萧吠,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天左冬,我揣著相機與錄音,去河邊找鬼纸型。 笑死拇砰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狰腌。 我是一名探鬼主播除破,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼癌别!你這毒婦竟也來了皂岔?” 一聲冷哼從身側(cè)響起蹋笼,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤展姐,失蹤者是張志新(化名)和其女友劉穎躁垛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圾笨,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡教馆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了擂达。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土铺。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖板鬓,靈堂內(nèi)的尸體忽然破棺而出悲敷,到底是詐尸還是另有隱情,我是刑警寧澤俭令,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布后德,位于F島的核電站,受9級特大地震影響抄腔,放射性物質(zhì)發(fā)生泄漏瓢湃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一赫蛇、第九天 我趴在偏房一處隱蔽的房頂上張望绵患。 院中可真熱鬧,春花似錦悟耘、人聲如沸落蝙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掘殴。三九已至,卻和暖如春粟誓,著一層夾襖步出監(jiān)牢的瞬間奏寨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工鹰服, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留病瞳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓悲酷,卻偏偏與公主長得像套菜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子设易,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案逗柴? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,754評論 1 92
  • AJax 優(yōu)化 緩存 Ajax 請求盡量使用GET, 僅取決于cookie數(shù)量 Cookie 優(yōu)化 減少Cooki...
    KeKeMars閱讀 9,361評論 5 89
  • 圍繞前端的性能多如牛毛,涉及到方方面面顿肺,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優(yōu)化策略進(jìn)行羅列注意戏溺,是羅列不是展...
    流動碼文閱讀 677評論 0 0
  • 性能優(yōu)化方向分類 請求數(shù)量: 合并腳本和樣式表渣蜗, CSS Sprites, 拆分初始化負(fù)載旷祸, 劃分主域(使用“查找...
    Www劉閱讀 1,770評論 3 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評論 25 707