<blockquote id="cyyyc"></blockquote>
  • <table id="cyyyc"><option id="cyyyc"></option></table>
  • <table id="cyyyc"><option id="cyyyc"></option></table>
  • <table id="cyyyc"></table>
  • <noscript id="cyyyc"></noscript>
  • <td id="cyyyc"></td>
  • <table id="cyyyc"><noscript id="cyyyc"></noscript></table>
  • <noscript id="cyyyc"></noscript>
  • <bdo id="cyyyc"><noscript id="cyyyc"></noscript></bdo>
  • <td id="cyyyc"></td>
  • <noscript id="cyyyc"><source id="cyyyc"></source></noscript>
  • <noscript id="cyyyc"><source id="cyyyc"></source></noscript>
  • <option id="cyyyc"><kbd id="cyyyc"></kbd></option>
    <td id="cyyyc"><option id="cyyyc"></option></td>
  • <td id="cyyyc"><option id="cyyyc"></option></td>
  • <table id="cyyyc"></table>
    <table id="cyyyc"><option id="cyyyc"></option></table>
    <table id="cyyyc"></table>
  • <option id="cyyyc"></option>
  • <table id="cyyyc"></table>
  • <td id="cyyyc"><option id="cyyyc"></option></td>
    <td id="cyyyc"><kbd id="cyyyc"></kbd></td>
  • 簡單還是一致

    簡單還是一致

    前不久發了一篇文章:《簡單還是一致》,引起了不少熱議。淘寶前端工程師拔赤就此總結了一篇文章,非常值得思辯。全文如下。---

    一段代碼的兩種理解(1)

    看這段代碼:

    ```js
    seajs.use('a', function(A) {
    A.doSth();
    console.log('a');
    });

    // some logic...

    seajs.use('b', function(B) {
    B.doSth();
    console.log('b');
    });
    ```

    問題來了,我們想象這段代碼出現在淘寶首頁,淘寶首頁的結構是被分割為很多個“區塊”,每個“區塊”由不同業務線中的同學開發維護,他們之間互不知曉,最終首頁是被“拼湊”而成的。那么這個例子中,若A的代碼報錯,會不會影響B的代碼?

    按照玉伯的設計,因為同步執行回調,當然會影響。怎么辦?淘寶首頁架構師要call正在休假的A讓他去改`A.doSth()`的邏輯以適應seajs的簡單性嗎?本來是一個小功能出問題,導致整個頁面癱瘓掉,這種架構當然有問題。

    這段代碼真實的語義應當是:

    ```js
    seajs.use('a', function(A) {
    A.doSth();
    console.log('a');
    }, {
    async: true // 異步執行callback
    })

    // some logic...

    seajs.use('b', function(B) {
    B.doSth();
    console.log('b');
    }, {
    async: false // 同步執行callback
    })
    ```

    seajs的“一致性”隱藏了這個重要的配置。

    一段代碼的兩種理解(2)
    看這段代碼:

    ```js
    seajs.use('a', 'b', 'c', callback)
    ```

    這段代碼有兩種理解

    1、我想依次執行`a.js`,`b.js`,`c.js`,這時a、b、c之間有依賴。

    2、我想盡快執行`a.js`、`b.js`、`c.js`的代碼,三者無依賴。

    對于第一種情況,三段代碼的加載順序無要緊,只要三者順序執行即可,這和瀏覽器中寫入script標簽一樣。
    對于第二種情況,因為有“約定”三者無依賴,每段js代碼加載完成后立即執行。
    `a.js`、`b.js`、`c.js`之間到底有無依賴,在這段代碼中是看不出來的。其實上段代碼的真實語義其實等同于
    ```js
    seajs.use('a', 'b', 'c', callback, {
    sequential: false // 不要順序執行a,b,c
    });
    ```

    問題又來了,seajs默認三者之間無依賴。如果真有呢?同樣,seajs的“一致性”隱藏了這個配置信息。
    小結
    其實,代碼所蘊含的信息,不會因為代碼量減少而減少。代碼過于簡潔,就需要額外的“規約”來傳達這些重要信息?!包S金法則”中提到的“簡單性”就是指約定,約定共識,做事才會簡單。其中提到的“完整性”是指的底層機制的健壯,說的直白一點就是面向場景的設計。

    這時,seajs就和舊有的類庫有所不同,seajs提供“方法”和“思路”,而jquery、yui、mootools等則提供“工具”。兩種思路直接決定了類庫所面向的“問題集合”。因此,seajs需要“學習”,而jquery更多的則是需要“查閱”。

    對于具體的場景來說,“一致”的約定難免單薄,相比之下,“工具”則更易于被大眾接受。理論最終是要和業務結合,這也是為什么一個“懂”業務的框架看起來不美的原因?!岸畼I務”帶來的復雜性和“強約定”帶來的優雅的編程體驗,兩者之間,你會選擇哪個?

    花一點時間,填寫您的服務需求獲取項目報價 展開
    也歡迎直接發送郵件到 fangfa@fangfa.net
    * 請認真填寫需求信息,我們會在24小時內與您取得聯系
    1.軟件開發及各類管理系統、平臺定制開發
    1.軟件開發及各類管理系統、平臺定制開發
    2.手機app應用及微信小程序定制開發
    3.網站建設,商城、分銷、響應式網站建設
    4.微網站、微商城、微分銷、h5定制開發
    姓       名
    在線聯系
    聯系電話
    郵       箱
    合作需求
    日日夜夜视频一二三区视频>>天天cao在线>>亚洲精品免费日日夜夜夜导航>>亚洲午夜国产