端架構,在過去的這一兩年里,發生了很大的變化。
與后端相比,前端以開放、開源、共享而著稱。這三個要素,促使前端的發展變得越來越快——完善的基礎設施,多樣性的前端構架,豐富的生態系統,以及正在快速形成的架構體系。
以我為例,在過去的這一年里,我使用了:
微應用化架構,即開發時分離,構建時合并。
前端微服務化架構,即開發時分離,構建獨立的架構模式。
整潔架構,即將業務代碼獨立于框架的架構風格。
微件化架構,即每個業務構架作為獨立的組件,融入到項目。
……
最近的最近,在與同事對于過去架構的反思和總結中,我們討論出了一個新的架構模式:應用微化架構。由于它是一個反向的微應用化架構模式,所以從模式上來說,我們便將名字反向了一下。由于這一種架構模式,實施和設計相當的簡單。所以,在進行詳細的介紹之前,先了解一下我們遇到的問題。
應對于業務復雜的前端應用而言,我們都有一個共同的痛點是:代碼太多,影響開發效率——影響 IDE 的響應,影響到系統的構建。為此,應對于這種情況,我們的第一反應就是,拆分代碼庫。在我們過去的一些場合里,我們做了相似的決定。
角色與權限,往往是阻礙前端系統拆分一個難點。不同的角色,不同的權限,可是呢,在后臺系統中, 它們確擁有同樣的界面,只是受限于權限原因,我們要拆分成多個系統。
在這個系統里,是由一個團隊來維護的。為此在這個項目里,于是我們:
Ctrl + C / Ctrl + V 了一下、兩下、三下,將它們變成了兩個、三個、四個代碼庫。
運用軟件工程來共享代碼——通過 git submodule、npm 包、共用 CSS 等方式
……
好了,我們成功地拆分成了多個系統。可是呢,當我們收到一個新的業務需求,我們就需要:
修改公共部分的代碼,并在多個項目中更新
在每個項目中,添加不同權限的代碼
于是乎,每次更新的時候,我們都需要一個 Checklist 去一一更新每個代碼庫。
在隨后的一個系統里,我們遇到的場景也是拆分。
稍有不同的是,系統有多個應用,而每個應用是由不同的團隊來維護。這便是一個非常適合于使用微前端的系統。我們采用了微前端中的微應用化方案,來解決這個問題:
將代碼拆分成多個應用,每個應用只在自己的目錄編寫代碼。
在構建時,合并不同應用目錄以變成一個完整的應用。
通過軟件工程的方式,來在多個應用間共享代碼。
一切都好,唯一的問題和之前相似:通過軟件工程來共享代碼仍然有很多坑。
應用微化架構,是一種開發時整體,構建時拆分,運行時分離的前端架構模式。即應用微化架構從一份代碼中,構建出適用于不同環境的多套目標代碼。實現上它是一種:
構建時拆分架構。
代碼刪除架構。笑,以刪代碼的方式,來形成每個前端應用。
微前端準備式架構。即,隨時可以拆分為多個前端應用。
由于它與微應用化的相似性,我們將它與微應用化做一個對比。它與微應用化不同的是,應用微化是在構建時對應用進行拆分,而非在本地模式下對應用拆分。相似的是,它也是基于構建系統的應用拆分方式。
即:微應用化,是一個隨時可合并式架構。而應用微化,則是一個隨時可拆分式架構。
它不僅僅是一個適合于前端的架構模式,也是一適用于后端的架構模式。
為了方便后期我的查閱,我還是簡單地寫個相應架構的電梯演進。
關鍵因素 | 描述 |
---|---|
對于 | 想拆解單體前端應用的團隊 |
我們的架構 | 應用微化 |
是一個 | 類微前端架構 |
它可以 | 在開發時是單一代碼庫,構建時拆分應用,運行時多個應用存在 |
但他不同于 | 代碼庫拆分 |
它的優勢是 | 靈活庫高、維護成本低 |
適用業務場景:
多權限系統的早期階段。手疼,不廢話。
微服務化的遷移時。適用于前后端,手疼,不廢話。
以 Angular 框架為例,大致就流程便是:
準備好適用于不同環境的路由文件(需要配置為路由懶加載)
編寫一個刪除代碼的腳本,諸如于 rm -rf / blog
(笑~)。
將這些 task
加到 pipeline 上。
相似的,對于 Spring Boot 構建的微服務也是類似的。
最近,代碼敲多了,手疼得厲害,就先不寫 DEMO 了——以后補上。
這個信息爆炸的時代,使用移動終端獲取新鮮信息已經是大勢所趨,但是移動網頁瀏覽速度還有巨大的提升空間。據 Strangeloop Networks 統計,在同樣的網絡條件下,使用移動端訪問相同網頁平均會比 PC 端慢40%!然而另一方面,用戶對網速的要求卻步步緊逼。研究表明,網頁響應時間可容忍的閥值是2秒,一旦超過3秒,會有40%的用戶放棄瀏覽頁面。
所謂天下武功,唯快不破!想要設計更快的網頁優化速度,我們可以借鑒成功的優化經驗,全球最大的CDN服務商Akamai(阿卡邁)針對移動體驗的問題,提供了一套較為完整的解決方案,感興趣的讀者可以前往注冊下載;與此同時,我們也可以采用直接的技術手段,本文從PC端優化經驗、HTTP/2優化協議、優化蜂窩網絡、以及智能的加載方案設計四個維度,總結了一些提升移動網頁加載速度的方法和技巧。
一、PC 端網站優化方案
不論在 PC 還是在移動瀏覽器上,只有不到10%的時間是用來讀取頁面的 HTML 的。剩下的90%是用來加載額外的如樣式表、腳本文件、或者圖片這樣的資源和執行客戶端的程序。因此,許多在 PC 端的傳統網頁優化方案在移動端仍然可行。比如說:
1.1 減少每個頁面的 HTTP 請求數
I. 將共用的 JavaScript 和 CSS 代碼放在公共的文件夾中與多個頁面共享。
II. 確保在一個頁面中相同的腳本不會被加載多次。同時,將腳本中的 Click 事件改為 On Touch 事件來減少固有的300ms延遲。
III. 使用 CSS Sprites 來整合圖像,將多張圖片整合到一個線性的網狀的大圖片中。
IV. 使用 Cache-Control 或者 Expires 標記來實現瀏覽器緩存,從而減少不必要的服務器請求,盡可能地從本地緩存中獲取資源。
1.2 減少每個請求加載的大小
I. 使用 gzip 這樣的壓縮技術來壓縮圖像和文本,依靠增加服務端壓縮和瀏覽器解壓的步驟,來減少資源的負載。
II. 整合并壓縮 CSS 與 JavaScript,刪除不必要的字符與變量。
III. 動態地調整圖片大小或者將圖片替換為移動設備專用的更小的版本。
IV. 分段加載和隱藏加載等手段,可以將不可見區域的內容延遲加載或暫時不需要的腳本進行延時讀取
二、采用更優的 HTTP/2 協議
2.1 多路復用技術帶來的請求-響應加速
I. HTTP/2 采用多路復用的技術,允許同時通過單一的 HTTP/2 連接發起多重的請求響應消息,從而大大的加快了網頁加載時間。
2.2 更節省空間的二進制頭部數據嵌套
I. HTTP/2 采用二進制格式傳輸數據,并把他們分割為更小的幀,相比于 HTTP/1.x 的文本格式傳輸更為方便。
II. HTTP1.x 的 header 由于 cookie 和 user agent 很容易膨脹,而且每次都要重復發送。HTTP/2 對消息頭采用 HPACK 進行壓縮傳輸,能夠節省消息頭占用的網絡流量。
2.3 Server Push 帶來的更快的資源推送
I. 通過 Server Push 功能,服務端可以主動把 JS 和 CSS 等文件發送給終端,而省去了解析HTML 請求的過程。簡單的說,當你需要訪問某個文件的時候,它已經在乖乖的在后臺躺好了。
三、優化蜂窩網絡
I.具有實力的內容服務商可以把資源配置在離用戶地理位置更近的地方,縮短最后一公里。
II. 與移動網絡服務商合作共同開發算法,實現實時自動調整互聯網路由,避免網絡擁堵、丟包與離線問題。
III. 還可以采用優化TCP協議的方法,通過借助主流的Cubic、Bic以及Westwood算法,可以有效的避免網絡擁堵。
IV. 此外,還可以研究算法改善NAT嵌套導致的網絡延時,也可以直接通過IPV6的連接協議規避NAT的延遲問題。
四、設計更加智能的加載方案
4.1采用分段加載和隱藏加載
I.分段加載又稱懶加載,它能夠在用戶滾動頁面的時候自動獲取更多的數據,從而可以很大程度上減少服務器端的資源耗用。諸如Lazyload.js或Belazy.js都是非常成熟易用的開發包。
II. 隱藏加載是在頁面顯示后再加載用戶暫時看不到的信息,諸如圖片展示窗里除了第一張圖片,其他圖片都可以采用隱藏加載的技術。
4.2采用預加載技術
I.資源預加載目的是讓瀏覽器在空閑時間下載或預讀取一些文檔資源,用戶在將來將會訪問這些資源時瀏覽器能快速的從緩存里提取給用戶。
II. 預加載技術不僅支持PC,也已經支持Android系統,可惜的是目前尚不支持iOS Safari。
III. 事實上,Prefetch是網頁優化里Prebrowsing的一部分,開發者還可以通過DNS-Prefetch , Subresource,Preconnect,Prerender等技術來實現預先解析DNS與提前渲染等優化。
4.3通過機器學習的手段智能加載
I.通過機器學習的方法,網站可以自動收集并分析用戶的瀏覽習慣與訪問信息,然后通過預加載的手段將最有可能訪問的信息提前加載完成。
4.4智能調整圖片分辨率
I.圖片通常占用了Web頁面加載的大部分網絡資源,也占據了頁面緩存的主要空間。 根據統計,一個站點平均62%的內容都是由圖片組成。管理這些圖片除了需要考慮到圖片的大小、格式、旋轉、藝術處理、增加水印、存儲空間等,還要顧及海量的設備的屏幕尺寸,以及適應終端上運行的瀏覽器。
以上是我們給開發者總結的一些經驗分享,希望能夠對讀者有所幫助,大家也可以注冊下載阿卡邁的技術PPT詳細了解如何通過CDN 的方式為(移動)網頁提速。我們需要明確的是,專注移動網頁的性能優化無疑是開發者需要努力的方向,然而用戶并不等于機器。用戶不關心你的網站發出了多少請求,也不在乎你的屏幕渲染得有多快,他們只關心網站帶給他們體驗上的感覺。因此,開發者在進行技術優化時,不僅僅是在某一技術點上的優化,更需要從網站的整體性能規劃把控,讓整個網站給客戶呈現出更快的加載體驗!
點擊藍字 ↑【恩施發布】關注我-
恩施土家族苗族自治州曾氏宗親聯誼會
恩施土家族苗族自治州謝氏宗親聯誼會
恩施土家族苗族自治州劉氏宗親聯誼會
中華尹氏恩施土家族苗族自治州宗親研究會
恩施土家族苗族自治州愛心志愿者協會
以上組織,你聽說嗎?
它們其實都是“山寨”的!
以上是州民政局公布的我州首批5個未在民政部門登記、擅自以社會組織名義開展活動、涉嫌非法社會組織的名單。同時,民政部門正在向社會各界征集這些組織的有關活動線索。
請記住舉報方式
州內“山寨社團”可向民政部門舉報
舉報電話:0718-8212934
涉及境外非政府組織管理可向州公安部門舉報
舉報電話:0718-8488110
同時,民政部門提醒,在參與有關組織活動時,可登錄民政部中國社會組織公共服務平臺(http://www.chinanpo.gov.cn/search/orgindex.html),核查其合法身份。
查證涉及境外文化類社會組織的,可登錄公安部的境外非政府組織辦事服務平臺(http://ngo.mps.gov.cn/ngo/portal/index.do)“信息公開”欄目,查詢其是否依法登記設立代表機構或備案開展臨時活動。
近年來,各類社團組織興起
在豐富社會實踐、參與社會管理中
起到了重要作用
但是,一些山寨社團渾水摸魚
成為“治理頑疾”
一段時期以來,一些在境內未注冊登記或被撤銷登記的組織、在境外成立在境內未經登記備案的組織及以文化類社會組織名義出現的企業,違法違規開展活動,群眾反響強烈。對此,我州積極開展“山寨社團”清理整頓工作。州委宣傳部迅速傳達省文件精神,研究制訂《全州開展文化類“山寨社團”清理整頓工作的實施方案》。州委常委、宣傳部長尹達多次部署清理整頓文化類“山寨社團”,并提出具體要求。
截至今年8月,中國民政部門
取締、勸散非法社會組織1800多個
請大家千萬擦亮眼睛
積極提供它們的活動線索和證據
讓它們無機可乘
記者:譚燚 通訊員:唐敏
來源|專稿/綜合
編輯|梅珂
審核|鄒瑜
近期最熱↓
*請認真填寫需求信息,我們會在24小時內與您取得聯系。