ctressa和linecitats

輪子造了就寫文章以免遺忘咯。

ctressa

ctressa是前一段時間對測試較爲入迷。

所以閱讀了一些斷言庫,斷言框架的代碼。

本質上斷言框架例如 mocha,ava 這些,最初的實現大抵都是一個任務執行器。

每一個斷言都是一段任務,執行測試就是執行這個任務隊列。

mocha ava diff

mocha在全局引入了方法,原生不支持併發,以串行方式運行測試,在node和瀏覽器中簡單使用。
ava利用導入,儘可能不影響全局變量,支持併發異步,測試文件作爲單獨的進程。有效隔離測試文件。

斷言框架在如今也是很多的。具體選擇還是需要看個人需求。

而斷言庫選擇也不一,例如expect/chai/should/assert等等
他們之間大抵是測試語句風格不同

expect 不侵入原型鏈,與瀏覽器更好的兼容性
should = !以上

閱讀了斷言庫較前的實現。
一句斷言,例如expect(test).toBeA('number')

可以分爲左值待測試,右值是期待值。中間的謂詞代表兩者的關係。

should.js會在Object.prototype綁定should使得用法

var test = {name: 'zwkang'}

test.should.eql(test)

中間的謂詞比較是斷言庫的核心吧。

那這樣一來,JS是支持了中文變量的。是不是意味着我們可以使用中文方式製作一個斷言庫。

中華語言博大精深。中間的連接詞相對來說太多使用方式了。

一句話能有幾種表達方式是常事。所以選擇一種折中的表達方式,合理的表達斷言。

ctressa 可以這麼表達。

希望({}).是.對象;
希望(true).爲真值;

note:

  1. mocha會捕獲showDiff 再確定是否拿期待值與待測試值做徹底比較。 line 41
  2. ctressa 模擬node.0.x實現Error
  3. 在原有英文結構中,對字段做中文的alias賦值。

linecitats

是一個類似now.sh 的server工具。

它可以允許我們在命令行對資源文件夾建立目錄。

流程並不複雜

  1. 初始化配置 例如文件夾位置等
  2. 啓動服務器
  3. 壓縮文件中間件
  4. 文件的緩存
實際上一個服務器提供資源到客戶端,中間可能存在很多的資源服務器例如cdn,緩存服務器等等。

1. 初始化配置

初始化配置很簡單,最簡單肯定是直接傳入文件夾。

初始化

2. 啓動服務器

我們這裏其實可以直接用http模塊。

但是koa在對我們的response body,header做操作會更舒服。

所以這裏可以基於koa做服務器的啓動。當然express之類的都是沒問題的。

3. 壓縮文件中間件

文件的壓縮 壓縮文件

deflate/gzip是是兩種比較常見的壓縮方案。

常見的壓縮協商方案:

瀏覽器通過請求頭部的 Accept-Encoding 告知瀏覽器,它支持的壓縮方案

服務器收到了瀏覽器的請求,選擇一種或多種壓縮方案。壓縮資源返回瀏覽器,並且報文頭部 Content-Encoding 表明壓縮方案。

使用vary字段,讓中間緩存服務器可以對不同的 Accept-Encoding 資源做緩存。不然的話,每次請求都是一致的緩存,瀏覽器可能無法支持解壓。

4. 對資源的緩存

我們常見的緩存方案無非就包括了,強緩存/協商緩存

區別在於是否會像服務端請求資源。

強緩存分爲Expires與Cache-Control,優先級上Cache-Control大於Expires。出現版本一個是HTTP 1 一個是HTTP 1.1

http1 與http1.1一個大區別就是連接是否可複用。

緩存首先會查看Expires與Cache-Control,如果存在的話,判斷強緩存是否實現。如果失效了,再從服務器請求資源,此時協商緩存的作用,就是判斷資源的存活性,一個按照lastModified 文件最後修改時間,一個Etag按照文件的一些特定內容,例如文件內容的sha1值。

lastModified === ctx.get("If-Modified-Since")
      fileSum === ctx.get("is-none-match")

Etag與lastModified 同時存在的話必須 兩者同時通過方可返回304狀態碼,告知瀏覽器資源未被修改。

這樣一來,我們可以簡單地使用強緩存與協商緩存達到,緩存地效果。

同時因爲這塊是直接koa中間件寫的,不妨提供一個方法,供我們以後充當類庫使用複用。

middleware


總結:

  1. 造輪子可以獲得知識,產出的代碼可以化爲記錄。
  2. 希望能做一些好的類庫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章