国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

大規模的前端組件化與模塊化

移動開發
Andrew Betts是英國金融時報實驗室(FT Labs)的負責人,同時也是一位PHP和JavaScript程序員。他的團隊致力于研發試驗性質的Web技術并發布相關產品——比如金融時報Web App. 在加入金融時報實驗室之前,Andrew創建了Web咨詢公司Assanka,為諸如News International, The Economist Group and the FT這樣的客戶打造創新性的Web項目。

本文根據Andrew Betts在QCon北京2014大會上的主題演講內容整理而成。

Andrew Betts是英國金融時報實驗室(FT Labs)的負責人,同時也是一位PHP和JavaScript程序員。他的團隊致力于研發試驗性質的Web技術并發布相關產品——比如金融時報Web App. 在加入金融時報實驗室之前,Andrew創建了Web咨詢公司Assanka,為諸如News International, The Economist Group and the FT這樣的客戶打造創新性的Web項目。

今天的話題是大規模的前端組件化與模塊化。首先,先介紹一下FT在研發方面面臨的挑戰:

不同的服務如搜索、內容、廣告、應用,都是由不同的團隊來開發,團隊之間的溝通較少。造成的結果就是,整個服務的靈活性和可維護性越來越差,系統變得越來越復雜之后,新人進來的學習難度很大。隨著整個軟件開發生命周期變得越來越復雜,新功能的集成變得越來越難;更糟糕的是,隨著移動設備的流行,研發團隊不得不把同樣一套邏輯分別在桌面端和移動端各自實現一次。這也是全世界的軟件研發團隊面對的挑戰。

為了應對這些問題,FT Labs開始推行幾條前端的開發理念,目前已經獲得比較好的效果。

***條理念是:“活的”風格指南。“活的”風格指南也可以理解為代碼即文檔,文檔即示例。這里舉一個例子,比如Facebook的React項目。你去看React項目的介紹頁,這個頁面本身就是一個React的推薦實現。

當然像React這樣的項目,說明頁面的實現是一個方面,此外還有另一個重點:組件化的開發方式。正如React不是一個框架——它提倡的是無框架,因為任何框架的引入都會增加額外的復雜度和學習成本。組件(Web components)則不同,它一旦開發出來,就是一個隨時可以很方便的調用的功能;而且,不同的團隊可以同時進行不同組件的開發而互不干擾。Web組件是一個正在快速發展中的特性,目前瀏覽器對它的支持還不***,不過也就是1-2年的時間,現在應該要為未來做準備。對于Web開發而言,向前兼容要比向后兼容更加重要。

組件化的使用在我們處理歷史網站的過程中節省了大量的工作。FT有超過600個域名需要維護,很多網頁從互聯網時代早期就開始運作。對于這些遺留頁面,要全都重寫以適應新的瀏覽器是代價高昂、不值得的,但你又要盡可能的讓它們能夠正常顯示。我們用組件來進行局部替換以解決這個問題。比如某個老頁面上有一個圖庫展示,現在的瀏覽器不能顯示了,你就批量把這種老舊的圖庫展示代碼替換成新的圖庫組件代碼即可。

另外還有一點很重要,就是擁抱模塊化,避免在代碼中嵌入依賴關系。做開發這行兒一個很重要的覺悟就是:你要相信,你現在寫出來的這些代碼,等兩年之后,你自己都會不想去看它。模塊化會讓你的生命更簡單。

對于瀏覽器兼容性,正如剛才所說,我們的建議是跟著***的瀏覽器功能走。不過這里面也有一個分界點,就是所謂core experience和primary experience的分界點,并盡可能的將分界點向擴大core experience的方向推進。對于NoJavaScript的處理,我們的經驗是,基本上所有人的瀏覽器都會支持JS的,盡可以放心大膽的用。

說到這里,我要進入今天的重頭了,那就是FT的Origami這個項目。Origami這個項目要做定義的話可以說是一套規范,是一組文檔化的***實踐,同時搭配Registry這套工具,以方便所有人以***實踐建立規范統一的服務和組件。

這套系統的構成大體上包括一套closure compiler,browserfy(+debowerfy&brfs),commonjs,sass(用于做css模塊化),taskrunner(基于grunt),以及bower。系統在設計上遵循幾個原則:

  • 編譯時納入所有依賴
  • 去中心化、分布式,比如我們的git repo是分散的,沒有一個所謂的core或common的codebase
  • 內置命名和封裝的規則

對于上面提到的分界點,Origami是這樣處理的:core的部分需要保證在用戶環境對JavaScript支持差或不支持的情況仍然能夠完成基本內容的呈現、搜索引擎的抓取等。這個分界點在Origami當中通過 if (querySelector in document) 來實現判定。

Registry作為工具,會做以下幾個事情:

  • 掃描所有已知的git服務器
  • 給版本標簽建索引
  • 給每個模塊的每個版本做build
  • 把每個模塊的所有版本收集、整理到一個模塊頁面上

Registry可以說是我們Web服務的一個黃頁。我們把這個黃頁放在公開的互聯網上,這樣所有人都可以上去協作,每個人都可以查看每個組件的每個版本,它們的說明和相關文檔,實現的樣板等。如果有的功能還沒做完或者沒啟用,可以打上一個not implemented的flag。

大家可以在Registry上隨意查看我們的各個組件,比如header,footer,調色板,按鈕等。這些組件調用起來很簡單,以調色板為例,只需要

  1. <link rel="stylesheet" href="http://build.origami.ft.com/bundles/css?modules=o-colors@^2.3.8" />  
  2. <script src="http://build.origami.ft.com/bundles/js?modules=o-colors@^2.3.8"'></script>  

這樣的兩行代碼即可調用任意模塊的任意版本。

我們的build服務可以按需build不同模塊的任意組合,之后還進行打包、壓縮、優化等處理并通過CDN分發(經過了GZIP處理)。調用的時候可以指定調用指定的版本,或者自動調用***版。有了這套系統后,開發者創建原型變得非常簡單了。

下面我介紹一下我們遇到的一些零碎問題,以及我們是如何處理的。

首先,有關polyfill的加載,如何才能讓polyfill僅在需要的時候才加載?我們的處理辦法是在模塊的metadata中進行聲明,哪些是required,哪些是optional,以modernizr測試名來進行控制。

然后,如何在支持JS但是支持的不好的瀏覽器中顯示noscript當中的內容?我們的辦法是定義一個o-nojs-fallback類的div,通過類的visibility來控制呈現。

對于hover的處理,我們用了一個o-hoverable的組件來控制。

對于資源加載,為了確保每個組件都知道其他資源的URL地址,我們專門有一個o-asset組件

***想說的是,將我們的這些工作公開在互聯網上,我們從中收獲了很多。

責任編輯:閆佳明 來源: infoq
相關推薦

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2022-09-05 09:01:13

前端模塊化

2013-08-20 15:31:18

前端模塊化

2022-03-11 13:01:27

前端模塊

2019-12-02 16:05:10

前端模塊化JavaScript

2023-05-24 10:35:11

Node.jsES模塊

2017-02-13 18:46:38

Android模塊化組件化

2016-01-29 20:23:23

華為

2019-08-28 16:18:39

JavaScriptJS前端

2017-05-18 11:43:41

Android模塊化軟件

2017-07-11 11:02:03

APP模塊化架構

2016-09-23 11:08:35

前端Javascript模塊化

2013-03-19 10:50:38

2022-09-21 11:51:26

模塊化應用

2018-12-18 11:20:28

前端模塊化JavaScript

2010-01-21 09:27:30

模塊化的優點NetBeans

2022-02-17 16:22:41

高壓直流模塊化UPS

2016-10-09 11:03:41

Javascript模塊化Web

2010-02-03 09:01:01

Java動態模塊化
點贊
收藏

51CTO技術棧公眾號

欧美精品高清| 成人性生交大片免费看视频直播| 国产精品99一区二区| jizzjizzxxxx| 朝桐光一区二区| 麻豆视频在线播放| 欧美激情国产精品日韩| 成人欧美一区二区三区在线| 阿v天堂2018| 国产aⅴ综合色| 羞羞视频在线免费国产| 91在线播放国产| 欧美日韩免费观看中文| 香蕉视频一区| 亚洲成人福利在线| 午夜精品在线视频| 国产精品―色哟哟| 日韩av网站在线免费观看| 爱情岛论坛成人| 午夜精品久久久久久久99热| 国产精品不卡在线观看| 希岛爱理av免费一区二区| free性欧美1819hd| 国产精品视频精品| 色天天综合久久久久综合片| 精品69视频一区二区三区Q| 免费a在线看| 亚洲国产精品一区二区第一页| 亚洲国产成人爱av在线播放| 久久资源在线| 香港成人在线视频| 欧美日韩美女视频| 奇米影视首页 狠狠色丁香婷婷久久综合| 色综合天天综合网天天狠天天| 亚洲h色精品| jyzzz在线观看视频| 久久国产精品-国产精品| 精品粉嫩aⅴ一区二区三区四区| 精品中文字幕一区二区| 国产成人a视频高清在线观看| 精品久久久久久中文字幕2017| 国产成人自拍视频在线观看| 欧美性生活大片免费观看网址| 亚洲永久免费| 日韩欧美一区二区三区免费观看| 国产黄色特级片| 国产精品欧美日韩久久| 欧美视频自拍偷拍| 18网站在线观看| 亚洲欧美激情视频| 久久精品亚洲麻豆av一区二区| 亚洲一区二区电影| 在线观看免费网站| 亚洲 日韩 国产第一区| 久久精品免费播放| 亚洲成av人片| 麻豆成人91精品二区三区| 国产精品1区| 色鬼7777久久| 妞干网这里只有精品| 欧美极品少妇与黑人| 日韩欧美在线视频观看| 极品美女销魂一区二区三区| 日韩区一区二| а天堂8中文最新版在线官网| 欧洲xxxxx| 国产精品第8页| 亚洲精品久久久久久久久久久久久 | 国产高清视频一区二区| 黄色av免费| 欧美一进一出视频| 免费av一区二区| 在线观看日韩毛片| 99精品视频一区二区三区| 久久久久久久久国产一区| 亚洲私拍视频| 在线视频福利| 草草视频在线免费观看| 91视频8mav| 久久精品电影网| 在线观看不卡视频| 久久久99精品久久| 亚洲免费影视| 竹菊久久久久久久| 涩涩视频网站在线观看| 羞羞网www| 国产女主播av| 亚洲综合自拍一区| 欧美成人一区二区三区电影| 欧美三级视频在线观看| 国产亚洲欧洲997久久综合| 亚洲久久在线| 婷婷国产精品| 美女av在线免费看| 色天堂在线视频| 日韩中文字幕免费在线| 欧美日韩国产免费一区二区三区| 51久久精品夜色国产麻豆| 亚洲精品720p| 国产精品最新| av三级影院| 久久在线中文字幕| 国产原创精品| 国产精品69精品一区二区三区| 亚洲欧美国产高清va在线播| 日韩欧美在线看| 亚洲国产激情av| 久久精品国产网站| 欧美黄色精品| 图片婷婷一区| 中文字幕综合| 欧美aa在线| 日本www在线观看| 中文字幕在线播放第一页| 国产精品少妇在线视频| 一区二区三区av在线| 国产欧美日韩伦理| 国产九九精品视频| 午夜精品在线视频| 久久精品国产欧美激情| 日韩av中文字幕在线播放| 欧美日韩精品一区二区三区 | 欧美一区二区三区思思人| 亚洲色图在线视频| 久久婷婷色综合| 国产成人av在线影院| 人禽交欧美网站| 国产精品外国| 国产精品jizz在线观看美国| 精品免费av| 一区二区美女| 国产精品欧美大片| 香蕉久久一区| 久久久久毛片| 成人自拍视频网| 欧美日韩国产v| 免费成人在线电影| 九色91在线| 欧美1—12sexvideos| 日本中文字幕在线看| 欧美中文在线| 粉嫩tv在线播放| 一个人看的免费视频色| 羞羞视频立即看| 人人做人人爽| 国产真实生活伦对白| 日本xxxxxx| 国产午夜视频| 原千岁中文字幕| 欧美日韩亚洲丝袜制服| 一区二区三区四区不卡视频| 国产精品欧美综合在线| 国产日韩欧美高清| 日本一区二区在线不卡| www.欧美色图| av在线综合网| 久久精品一级爱片| 国产精品日产欧美久久久久| 国产精品天天看| 亚洲欧洲精品成人久久奇米网| 中文字幕av一区二区三区| 中日韩av电影| 亚洲色图欧洲色图| 亚洲欧美一区二区三区久本道91| 亚洲日本丝袜连裤袜办公室| 一二三区精品视频| 精品久久久久久久久久| 欧美性xxxx极品hd欧美风情| 欧美在线综合视频| 欧美不卡激情三级在线观看| 亚洲激情电影中文字幕| 伊人久久久久久久久久| 久久久久999| 欧美一区二区三区精品电影| 国产99在线|中文| 亚洲精品免费在线视频| 精品国产免费人成电影在线观...| 91黄色激情网站| 午夜在线免费观看视频| 欧美国产精品一区二区三区| 丰满少妇大力进入| 激情偷拍久久| 成人精品在线视频| 日韩在线电影| 加勒比在线一区二区三区观看| 成人美女免费网站视频| ts人妖另类在线| 青青草精品视频| 日韩一区精品视频| 国产激情精品久久久第一区二区| 成人晚上爱看视频| 中文字幕+乱码+中文字幕一区| 亚洲国产精品自拍| 3atv一区二区三区| 一本色道久久88精品综合| 国内精品在线一区| av资源一区二区| 国产一二三四五| 成人免费淫片| 国产三区在线观看|