前端開發規範文檔(初稿)

来源:http://www.cnblogs.com/lohu/archive/2016/07/02/5635098.html
-Advertisement-
Play Games

總體原則 縮進 對於所有編程語言,我們要求縮進必須是軟tab(用空格字元)。在你的文本編輯器里敲 Tab 應該等於 4個空格 。 可讀性 vs 壓縮 對於維護現有文件,我們認為可讀性比節省文件大小更重要。大量空白和適當的ASCII藝術都是受鼓勵的。任何開發者都不必故意去壓縮HTML或CSS,也不必把 ...


總體原則

  • 縮進

    對於所有編程語言,我們要求縮進必須是軟tab(用空格字元)。在你的文本編輯器里敲 Tab 應該等於 4個空格 。

  • 可讀性 vs 壓縮

    對於維護現有文件,我們認為可讀性比節省文件大小更重要。大量空白和適當的ASCII藝術都是受鼓勵的。任何開發者都不必故意去壓縮HTML或CSS,也不必把Javascript代碼最小化得面目全非。

    我們會在伺服器端或build過程中自動最小化並gzip壓縮所有的靜態客戶端文件,例如CSS和JS

  • HTML,CSS,JS代碼分離

    html代碼儘量保持整潔,採用最簡單的代碼層級完成複雜的佈局要求,方便以後的維護和擴展

    css代碼本身都是全局的,所有應當採用css模塊化思想,約束css的規則,儘量減少對全局的污染

    JS代碼分為功能代碼和業務代碼,功能代碼儘量抽取成功能組件,方便團隊內其他同事的使用

  • 命名規範

    文件及文件夾: 全部英文小寫字母+數字或連接符"- , _ ",不可出現其他字元 如:jquery.1.x.x.js
    文件:調用 /libs 文件需包含版本號,壓縮文件需包含min關鍵詞,其他插件則可不包含 如:/libs/modernizr-1.7.min.js
    ID: 小駝峰式命名法 如:firstName topBoxList footerCopyright
    Class: [減號連接符] 如:top-item main-box box-list-item-1
    儘量使用語義明確的單詞命名,避免 left bottom 等方位性的單獨的詞語命名樣式


html規範

基本語法

在屬性上,使用雙引號,不要使用單引號。
不要在自動閉合標簽結尾處使用斜線 - HTML5 規範 指出他們是可選的。
不要忽略可選的關閉標簽(例如, 和 )。
儘量用class來渲染樣式,避免用id來寫樣式

Doctype

在每個 HTML 頁面開頭使用這個簡單地 doctype 來啟用標準模式,使其每個瀏覽器中儘可能一致的展現。
1 <!DOCTYPE html>

 

字元編碼

通過聲明一個明確的字元編碼,讓瀏覽器輕鬆、快速的確定適合網頁內容的渲染方式。這樣做之後,需要避免在 HTML 中出現字元實體,直接提供字元與文檔一致的編碼(通常是 UTF-8)。
1 <head>
2   <meta charset="UTF-8">
3 </head>

 

相容模式

優先使用最新版本的IE 和 Chrome 內核
1 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

 

基本的SEO

<meta name="keywords" content="your keywords">
<meta name="description" content="your description">

 

viewport 設置

  • viewport: 一般指的是瀏覽器視窗內容區的大小,不包含工具條、選項卡等內容;
  • width: 瀏覽器寬度,輸出設備中的頁面可見區域寬度;
  • device-width: 設備解析度寬度,輸出設備的屏幕可見寬度;
  • initial-scale: 初始縮放比例;
  • minimum-scale: 最小縮放比例;
  • maximum-scale: 最大縮放比例;
  • user-scalable: 時候可以允許用戶對頁面進行縮放
  • minimal-ui,不支持(去除導航欄) 為移動端設備優化,設置可見區域的寬度和初始縮放比例。
<meta name="viewport" content="width=640,user-scalable=no">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">

 

favicon

在未指定 favicon 時,大多數瀏覽器會請求 Web Server 根目錄下的 favicon.ico 。為了保證 favicon 可訪問,避免404,必須遵循以下兩種方法之一:

  • 在 Web Server 根目錄放置 favicon.ico 文件;
  • 使用 link 指定 favicon;
<link rel="shortcut icon" href="path/to/favicon.ico">

 

移動端頁頭推薦配置

    <meta charset="UTF-8">
    <title>title</title>
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <meta name="viewport" content="width=640,user-scalable=no" />
    <!--<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no,minimal-ui">-->
    <meta http-equiv="cleartype" content="on">
    <meta name="apple-mobile-web-app-title" content="...">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="x-rim-auto-match" content="none">
    <meta name="apple-touch-fullscreen" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <!-- uc強制豎屏 -->
    <meta name="screen-orientation" content="portrait">
    <!-- QQ強制豎屏 -->
    <meta name="x5-orientation" content="portrait">
    <!-- UC強制全屏 -->
    <meta name="full-screen" content="yes">
    <!-- QQ強制全屏 -->
    <meta name="x5-fullscreen" content="true">

 

CSS 和 JavaScript 結構、樣式、行為分離

儘量確保文檔和模板只包含 HTML 結構,樣式都放到樣式表裡,行為都放到腳本里。
根據 HTML5 規範, 通常在引入 CSS 和 JavaScript 時不需要指明 type,因為 text/css 和 text/javascript 分別是他們的預設值。
<link rel="stylesheet" href="code-guide.css">
<script src="code-guide.js"></script>

<style>
  /* ... */
</style>

 

實用高於完美

儘量遵循 HTML 標準和語義,但是不應該以浪費實用性作為代價。任何時候都要用儘量小的複雜度和儘量少的標簽來解決問題。
在編寫 HTML 代碼時,需要儘量避免多餘的父節點。很多時候,需要通過迭代和重構來使 HTML 變得更少。 參考下麵的示例:
<!-- Not so great -->
<span class="avatar">
  <img src="...">
</span>

<!-- Better -->
<img class="avatar" src="...">

 

避免用 document.write 生成標簽

用 document.write生成標簽讓內容變得更難查找,更難編輯,<b>性能更差</b>。應該儘量避免這種情況的出現。

CSS 規範

  • 外部文件LINK載入CSS,儘可能減少文件數。載入標簽必須放在文件的 HEAD 部分。
  • 避免使用內聯樣式 不要在文件中用內聯式引入的樣式,不管它是定義在樣式標簽里還是直接定義在元素上。這樣會很難追蹤樣式規則
  • 使用 reset.css 讓渲染效果在不同瀏覽器中更一致。
  • 避免使用CSS表達式(Expression)
  • 不要用@import
  • 避免使用ID選擇器
  • 避免使用開銷大的CSS選擇器 如:*
  • 禁止給class加上html標簽 如:li.list
  • 避免讓選擇符看起來像正則表達式 如:[name='aa'] 高級選擇器執行耗時長且不易讀懂,避免使用。
  • 避免直接使用html tag作為樣式選擇器
  • 避免使用 !important
  • 有節制的使用css3偽元素
  • 避免使用css3 低效屬性,如:linear-gradient,borde-image;
  • 使用語義化、通用的命名方式;
  • 使用連字元 - 作為 Class 名稱界定符,不要駝峰命名法和下劃線;
  • 避免選擇器嵌套層級過多,儘量少於 3 級;

用css模塊化

css代碼本身都是全局的,所有應當採用css模塊化思想,約束css的規則,儘量減少對全局的污染

屬性簡寫

堅持限制屬性取值簡寫的使用,屬性簡寫需要你必須顯式設置所有取值。常見的屬性簡寫濫用包括:
padding
margin
font
background
border
border-radius
大多數情況下,我們並不需要設置屬性簡寫中包含的所有值。例如,HTML 頭部只設置上下的 margin,所以如果需要,只設置這兩個值。過度使用屬性簡寫往往會導致更混亂的代碼,其中包含不必要的重寫和意想不到的副作用。

一行還是多行書寫?

css實例都是用的多行的格式,每一對屬性和值占單獨一行。這個是廣泛使用的約定,不僅是在css文件中,也多出現在書里和文章里。許多人認為他的可讀性很好。
然而在和團隊的工作中,尤其是大型的css文件,我是將樣式寫成多行,並使用css模塊化思想:
.alert-window {
       background: #fff; 
       border: 1px solid #ff0; 
       font-weight: bold;
       padding: 10px;
       }
.alert-window .window-title{
    ...
    } .alert-window .window-content{
    ...  
    } .alert-window .window-buttom{
    ...
    }

PS:  1. 現在純手寫css比較少了,一般 都是用sass 和 less 來管理樣式。
       2 書寫sass 和 less 一行簡直就是災難 3 css 多行書寫,還有個好處,可以要求團隊,css 輸出按照盒子模型的順序去書寫,更好維護,不強制但是倡導輸出是一致的。


Javascript

命名規範

  • 使用單引號'而不是雙引號"
  • 類的命名使用駱駝命名規則,並且首字母大寫,例如: Account, EventHandler
  • 常量必須使用大寫,在對象(類)或者枚舉變數的前部聲明,駱駝命名規則
  • 類的私有變數和屬性建議以 _開頭。例如:var _buffer; _init:function(){}

變數

  • 必須全部小寫字元組成
  • 變數必須在聲明初始化以後才能使用,即便是 NULL 類型。
  • 在作用域頂端對變數賦值,這有助於避免變數聲明問題和與聲明提升相關的問題
  • 變數不要產生歧義。
  • 相關的變數集應該放在同一代碼塊中,非相關的變數集不應該放在同一代碼塊中。
  • 變數應該儘量保持最小的生存周期。
  • 能直接使用直接量的,不要使用 new ....; 如: a=/\d/g; a=new RegExp('\d','g');

不要用 void

不要用 with 語句

不要用 continue 語句

儘量不要用位運算

PS:前端團隊很少有科班出身的,位運算符效率不見得會有太高的性能,優勢非常不明顯,出發是高強度的演算法需要,否則還是不要有位運算;它會造成代碼的苦澀難懂,不利於後續的維護

不要擴充內置原型(Object,Array,String...)

不要用 eval();

+運算要註意

    '1'+1==2 //false;
    1+1==2 //true

 

使用簡易條件判斷方式

if (name !== 0 || name !== '' || name!==null || name!==undefined) {
...
}

if (name) {
...
}


if (collection.length > 0) {
  ...
}


if (collection.length) {
...
}

 

使用三元表達式來代替簡單的if else

if(a){
        d='b'
    }else{
        d='c'
    }

    d=a?'b':'c';

 

使用&& 和 || 替代簡單的if

if(a){
        b()
    }

    a && c();


    if(bb){
        a=bb
    }else{
        a=2
    }

    a=bb||2

 

使用數組或json優化if else

if(a=='1' || a=='b' || a=='c' || a=='ss'){
        bb();
    }else{
        ...
    }

    var hasData={
        '1':1,
        'b':1,
        'c':1,
        'ss':1
    }

    if(hasData[a]){
        bb()
    }else{
    ...
    }

 

不要在非函數塊中(if, while etc)聲明函數

儘管瀏覽器允許你分配函數給一個變數,但壞消息是,不同的瀏覽器用不同的方式解析它
如果一定要定義函數,請用函數表達式方式聲明;
如:
function b(){
    ...
    }

    if(a){
        function b(){
            ...
        }
    }

    var b=function(){
    ...
    }
    if(a){
        b=function(){
            ....
        }
    }

 

有else的if都要有{}

if(a)
        b()
    else
        c();

    if(a){
        b();
    }else{
        c();
    }

 

不要有多餘逗號

這會在IE6、IE7和IE9的怪異模式中導致一些問題;同時,在ES3的一些實現中,多餘的逗號會增加數組的長度。在ES5中已經澄清
 var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn',
  };

  var heroes = [
    'Batman',
    'Superman',
  ];

  var hero = {
    firstName: 'Kevin',
    lastName: 'Flynn'
  };

  var heroes = [
    'Batman',
    'Superman'
  ];

 

使用事件代理

在分配低調(unobtrusive)的事件監聽器時,通常可接受的做法是把事件監聽器直接分派給那些會觸發某個結果動作的元素。不過,偶爾也會有多個元素同時符合觸發條件,給每個元素都分配事件監聽器可能會對性能有負面影響。這種情況下,你就應該改用事件代理了

圖片

儘量使用png8替代gif圖片

不要在移動端手機使用gif動畫圖片

使用雪碧圖,減少css背景圖的載入

使用第三方工具壓縮png24的圖片,可以有非常高的壓縮率

PS:手機端不適用GIF圖的原因是:1.可以用css3動畫來代替,css3動畫只出發頁面複合,性能更好,2 gif動畫都在手機端顯示不流暢,不能使用GPU加速,會造成頁面重排,嚴重影響頁面性能


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、過濾器 過濾器就是向web應用程式的請求和和響應添加功能的組件。過濾器能夠實現客戶端和目標資源之間的交互信息進行篩選和過濾,最終保留有效的數據信息。 二、過濾器的生命周期 2.1 實例化。 web容器複製創建過濾器的實例來完成過濾器的實例化,只會實例化一次。 2.2 初始化。 在進行過濾工作前會 ...
  • 一、servlet的概念 Servlet是一種獨立與平臺和協議的伺服器端java應用程式,通過Servlet可以生成動態web頁面,同時使用Servlet還可以在伺服器端對客戶的請求進行處理,控製程序的執行。 Servlet的主要作用就是互動式的瀏覽和更新數據,並生成動態的頁面內容展示。 1. 服務 ...
  • 題目:輸入兩個鏈表,找出它們的第一個公共節點。鏈表的定義如下: 思路1:採用蠻力的方法:在第一個鏈表上順序遍歷每個節點,每遍歷到一個節點的時候,在第二個鏈表上順序遍歷每個節點。如果第二個鏈表上的節點和第一個鏈表上的節點一樣,就說明兩個鏈表在節點上重合,於是就找到了公共的節點。而通常蠻力並不是好的方法 ...
  • HTTP 應用的信息是通過 請求報文 和 響應報文 傳遞的,關於更多的相關知識,可以閱讀《HTTP權威指南》獲得。 其中 請求報文 由客戶端發送,其中包含和許多的信息,而 django 將這些信息封裝成了 HttpRequest 對象,該對象由 HttpRequest 類創建。每一個請求都會生成一個 ...
  • 這周還是在改自己的這個框架,被多線程折騰了兩天,最終無奈放棄在游戲啟動時調用引擎進行圖片相關資源的初始化,當然進展還是不錯的。 嗯,下麵還是以流水的方式繼續記錄一下本周完成的工作: 1、調通了客戶端與lua的相互調用,用的是verysimple這個第三方庫(跨平臺的庫)。這邊遇到一個坑,特此記錄。 ...
  • 1基礎理論部分 分頻,是的,這個概念也很重要。分頻是指將一單一頻率信號的頻率降低為原來的1/N,就叫N分頻。實現分頻的電路或裝置稱為“分頻器”,如把33MHZ的信號2分頻得到16.5MHZ的信號,3分頻得到11MHZ的信號,10分頻得到3.3MHZ的信號。 分頻主要是相對於主晶振來說,用不到那麼高的 ...
  • C++並不是一個純粹的面向對象的語言,而是一種基於過程和麵向對象的混合型的語言。 凡是以類對象為基本構成單位的程式稱為基於對象的程式,再加上抽象、封裝、繼承和多態就成為面向對象程式。 ...
  • 本文真沒啥難點,我就是為了檢驗我英語水平退化了沒哈哈雖然我英語本來就渣翻譯起來也像大白話。將原文看了一遍也碼完翻譯了一遍差不多一個小時,其中批註部分是自己的理解如有疏漏或誤解還請之處感激不盡吶,比如JavaScript中對於單例的理解感覺定義有些模糊啊。 翻譯自斯托揚·斯蒂凡諾夫的原文鏈接:http ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...