TAT.rocket 從零開始 React 服務器渲染
In 未分類 on 2017年01月13日 by view: 34,579
4

一. 前言

當我們選擇使用 Node+React 的技術棧開發 Web 時,React 提供了一種優雅的方式實現服務器渲染。使用 React 實現服務器渲染有以下好處

        1. 利于 SEO:React 服務器渲染的方案使你的頁面在一開始就有一個 HTML DOM 結構,方便 Google 等搜索引擎的爬蟲能爬到網頁的內容。

        2. 提高首屏渲染的速度:服務器直接返回一個填滿數據的 HTML,而不是在請求了 HTML 后還需要異步請求首屏數據。

        3. 前后端都可以使用 js

二. 神奇的 renderToString 和 renderToStaticMarkup

有兩個神奇的 React API 都可以實現 React 服務器渲染:renderToStringrenderToStaticMarkup。renderToString 和 renderToStaticMarkup 的主要作用都是將 React Component 轉化為 HTML 的字符串。這兩個函數都屬于 react-dom(react-dom/server) 包,都接受一個 React Component 參數,返回一個 String。

也許你會奇怪為什么會有兩個用于服務器渲染的函數,其實這兩個函數是有區別的:

TAT.李強 Nodejs 原生支持的 ES6 特性
In 未分類 on 2016年07月04日 by view: 22,932
35

隨著 React 的風靡,配合 Webpack 以及 Babel 等技術,越來越多的前端同學將 ECMAScript 2015(ES6) 的特性運用在項目中,import、export、class、箭頭函數、塊級作用域等特性屢試不爽。而對于 Node.js 實現的后臺代碼來說,我們也同樣希望使用這些 ES6 特性,下面將以 v4.4.4(LTS version) 長期支持版本為例展開話題,從兼容性以及性能兩方面著手分析 Node.js 對 ES6 的支持情況。

JavaScript 定時器與執行機制解析
In 未分類 on 2016年05月15日 by view: 22,672
16

Timer

從 JS 執行機制說起

瀏覽器(或者說 JS 引擎)執行 JS 的機制是基于事件循環。

由于 JS 是單線程,所以同一時間只能執行一個任務,其他任務就得排隊,后續任務必須等到前一個任務結束才能開始執行。

為了避免因為某些長時間任務造成的無意義等待,JS 引入了異步的概念,用另一個線程來管理異步任務。

同步任務直接在主線程隊列中順序執行,而異步任務會進入另一個任務隊列,不會阻塞主線程。等到主線程隊列空了(執行完了)的時候,就會去異步隊列查詢是否有可執行的異步任務了(異步任務通常進入異步隊列之后還要等一些條件才能執行,如 ajax 請求、文件讀寫),如果某個異步任務可以執行了便加入主線程隊列,以此循環。

玩轉 npm
In 未分類 on 2016年03月10日 by view: 23,997
20

NPM

npm 本來是 Node.js 的包管理工具,但隨著 JS 這幾年的蓬勃發展,現在的 npm 已經成了幾乎所有跟 JS 相關的工具和軟件包的管理工具了,并且還在不斷發展完善中。

本文從筆者的經驗,總結了 npm 安裝/卸載、更新、發布這幾個最主要功能的正確使用姿勢和一些小技巧,順便從官網搬來了 npm3 處理依賴的重大變化。

TAT.Johnny React 服務器端渲染實踐小結
In 未分類 on 2015年10月31日 by view: 25,188
34

背景

為什么是 React?

React 今年在國內特別火,一時間虛擬 DOM(Virtual DOM)等酷炫概念一下刷新了很多前端開發同學的三觀,關于性能優劣的爭論也在知乎上看到不少。不得不說 React 解決了一些前端項目開發的痛點,而我最近的一年多的工作重心,都在興趣部落這樣一個基于興趣社交的 web 產品上,有很多感同身受的地方。興趣部落這個產品從初期只有移動端的 2、3 個頁面,發展到現在 50+移動頁面,加上 PC 版的最近上線,中間經歷了從 2-3 人的小項目到 10+人團隊的大型前端項目的巨大轉變。這個過程中除了人員相對業務的線性增加,代碼量、維護成本也是以指數速度增長的,很快代碼臃腫、難以維護與測試等問題就凸顯出來。雖然內部經過一些輕量的重構優化,但開發模式還是與高度的迭代節奏很不匹配。這時候,React+Webpack 的組件開發模式讓我眼前一亮,暗下決心要讓這樣的先進開發模式推廣到項目團隊,好東西一定要讓大家有所受益,而不僅僅是技術的嘗鮮、擺設。

TAT.yunsheng 解讀 Node.js 的 cluster 模塊
In 未分類 on 2015年08月31日 by view: 19,363
6

        在如今機器的 CPU 都是多核的背景下,Node 的單線程設計已經沒法更充分的" 壓榨" 機器性能了。所以從 v0.8 開始,Node 新增了一個內置模塊——“cluster”,故名思議,它可以通過一個父進程管理一坨子進程的方式來實現集群的功能。

前端邏輯和 Node 直出復用與重構
In 未分類 on 2015年07月31日 by view: 3,033
1

不得不聊到的重構簡介

要實現軟件演化基本準則,最關鍵的策略就是重構,Martin Fowler 將其定義為” 在不改版軟件外部行為的前提下,對其內部結構進行改變,使之更容易理解并便于修改 “。

復用的理由

重復的代碼,幾乎是代表著對最初設計徹底分解方面的一個失誤。無論何時,如果需要對某個地方進行修改,你都不得不在另一個地方進行完成同樣的修改,這樣你就陷入了兩線作戰的境地。重復的代碼同樣違背了代碼哲學 DRY 原則:”Don’t Repeat Yourself“

TAT.simplehuang Mongoose&KOA 使用入門
In 未分類 on 2015年06月30日 by view: 5,373
1

一、概念解析:

Mongoose:

Let's?face?it,?writing?MongoDB?validation,?casting?and?business?logic?boilerplate?is?a?drag.?That's?why?we?wrote?Mongoose.

Mongoose 簡單來說就是數據庫操作 ORM

createConnection?與?connect:

許多入門學徒在看到這兩個函數的時候都會有一定疑惑,但是這兩個函數其實并不是一個東西,

createConnection?創建的并非一個默認的數據庫連接,它返回的是一個 Connection。我們需要通過這個 Connection 來創建 Model、Instance,然后進行數據表操作,這通常是在程序需要連接多個數據庫的情況下使用,否則一般使用 connect 來打開默認的數據庫連接,這時候我們就可以用 mongoose.model 來創建我們的 Model 了。

Strong Mode 介紹
In 未分類 on 2015年06月30日 by view: 2,835
7
If it is too strong, then you are too weak.

就算是背景吧

隨著 ES2015 的到來,JavaScript 引進了許多新特性,很多很強大的特性完全可以彌補 JS 本身語法上的弱點,比如讓很多初次嘗試 JS 的程序員感到不習慣的變量提升問題、沒有塊級作用域問題等問題。

strong mode

ES5 增加了 strict mode,現在 V8 又實現了一種新的模式——strong mode。

strong modestrict mode 的升級版,在語法要求上更嚴格了,同時正因為這些嚴格的要求,讓開發者得以規避語言本身一些糟粕或者讓人困惑的地方。

關于 Promise 內存泄漏的問題
In 未分類 on 2015年05月30日 by view: 11,082
5

Promise

Promise

Promise 是 ES6 的新特性,在 ES6 之前各大瀏覽器、各種 polyfill 和各種 js 執行環境都針對 Promise 進行了自己的實現,不過實現上大同小異。