探秘Twitter改版背后的技術(shù)
如果要評(píng)2010最漂亮的網(wǎng)站改版,除了豆瓣就是Twitter了。在看了新版Twitter的介紹視頻后,相當(dāng)興奮,那種感覺就像2004年看到Gmail一樣。面對(duì)未知的新時(shí)代,一部分人在暢想,一部分人在抵觸,只有小部分人在行動(dòng),Twitter很快交出了他們的答卷。
看過Twitter官方發(fā)表的博文“The Tech Behind the New Twitter.com”后,總結(jié)了新版Twitter背后的技術(shù),值得一讀。(下面的內(nèi)容不是翻譯,是作者的理解)
API客戶端
新版背后的一個(gè)重要的架構(gòu)上的改變是像其它第三方客戶端一樣,Twitter自己也開始基于API開發(fā),唯一不同是他們可以使用更多資源。同時(shí)對(duì)訪問API做了諸多優(yōu)化,原文提到的“highly optimized JSON fragment cache”。
這種方式是很多技術(shù)團(tuán)隊(duì)都想實(shí)現(xiàn)的,但礙于原有架構(gòu)的歷史問題,下不了決心徹底改變它。但未來要滿足各種終端上各種形式應(yīng)用的開發(fā)需求,這種架構(gòu)是最靈活的。
The JavaScript API
對(duì)應(yīng)后端的API架構(gòu),前端自然需要一個(gè)很給力的JavaScript庫實(shí)現(xiàn)和后端的數(shù)據(jù)交互。Twitter內(nèi)部用到一個(gè)庫叫@Anywhere,它提供的功能:
1. 負(fù)責(zé)和API交換數(shù)據(jù)。文檔里可以看到提供了豐富的接囗。
2. 提供一個(gè)客戶端的緩存策略(保存在本地的內(nèi)存和localStorage中)。
3. 提供一個(gè)事件通知機(jī)制,當(dāng)UI發(fā)生變化,相應(yīng)處理組件能夠立即響應(yīng)。
從中可以看到Twitter前端架構(gòu)的設(shè)計(jì)思路,跟后端充分對(duì)接,建立業(yè)務(wù)級(jí)的通用接囗層,提供通用處理機(jī)制解藕,保持代碼的模塊化。這個(gè)路子很對(duì),很值得借鑒。
頁面管理
新版的一個(gè)項(xiàng)目目標(biāo)就是讓頁面導(dǎo)航更簡單更快。它是利用URL hash建立一套瀏覽器端的頁面路由系統(tǒng)。這個(gè)具體要等到用上新版后看一看。
像GMail那種,用URL hash做頁面切換,管理起來還是很復(fù)雜的。等用上新版后要好好分析一下代碼。
渲染堆棧(The Rendering Stack)
新版Twitter的頁面都是在前端渲染的,但在不支持JavaScript的情況下,后端也需要一個(gè)渲染系統(tǒng)。他們前后端用的模板系統(tǒng)都是Mustache,這樣前后端可以保持一致,利用Mustache將API對(duì)象轉(zhuǎn)成HTML代碼。另外,針對(duì)DOM操作還做了諸多優(yōu)化,如事件處理都是用事件代理機(jī)制實(shí)現(xiàn),提高組件的重用性,盡可能減小repaint提高頁面渲染性能等。
Mustache是開源的模板系統(tǒng),支持各種語言。我原來認(rèn)為它有點(diǎn)重,并沒有在項(xiàng)目中用過它。但如果真要做一個(gè)所有頁面切換都是Ajax的應(yīng)用,Mustache是***。
內(nèi)聯(lián)媒體(Inline Media)
新版Twitter整合了很多第三方內(nèi)容,從URL中判斷如果是像kiva,vimeo這樣的合作方,會(huì)利用基于oEmbed標(biāo)準(zhǔn)的JSON-P方式,從合作方的接囗中抓取內(nèi)容。如果判斷是來自TwitPic的圖片或來自Youtube的視頻,就直接顯示出來。從視頻中可以看到,交互方式很酷。
開源
Twitter的前端開發(fā)大量用到開源技術(shù),像jQuery, Mustache, LABjs, Modernizr和大量jQuery插件。這么做的好處是一方面可以將重心放在前端應(yīng)用的創(chuàng)新上,另一方面對(duì)開源社區(qū)的發(fā)展也是一種推動(dòng)。自己在項(xiàng)目中積累的一些技術(shù)也會(huì)開源。
我非常贊同這樣,不要重復(fù)造輪子,尤其像瀏覽器級(jí)的基礎(chǔ)功能庫,jQuery,YUI已經(jīng)做的很成熟了,需要做的應(yīng)該是在沒有或沒有成熟的開源技術(shù)解決的領(lǐng)域上,通常更多在應(yīng)用層面上需要建立適合自己產(chǎn)品的各種功能庫和框架機(jī)制。
原文鏈接:http://hikejun.com/blog/?p=590
【編輯推薦】