主頁 > 軟體設計 > 🎯【深入決議】跨端框架的核心技術到底是什么?

🎯【深入決議】跨端框架的核心技術到底是什么?

2020-11-26 09:48:31 軟體設計

??

本文是我在學習多個平臺 UI 框架后的一些感觸,受精力和技術水平所限,文中定有不足之處,請各位大佬多多指教

如果你覺得我的文章對你有幫助,在收藏的程序中,一定要記得點贊點在看哦,謝謝你,這對我真的很重要??!

一、前端三板斧

正式討論「跨端開發」這個概念前,我們可以先思考一個問題:對大部分前端作業來說,前端主要干些啥?

我個人認為,無論環境怎么變,前端基本上就是做三件事情:

Fetch Data、Manage State、Render Page
Fetch Data、Manage State、Render Page
  • fetch data(資料獲取)
  • manage state(狀態管理)
  • render page(頁面渲染)

沒了,

也許有人覺得我說的太片面,其實我們可以理一理,往近了說,現在知識付費搞的如火如荼,動不動就搞個「XXX 原始碼決議」,分析一下這些課程的主題和目錄,你就會發現基本都是圍繞著這三個方向展開講的;往遠了說,我們可以分析一下 Web 前端的發展歷程:

  • 1995 年左右,用 HTTP/1.0 拉取資料,用第一版的 JavaScript 管理幾個前端狀態,用裸露的 HTML 標簽展示頁面

  • 2005 年左右,用 HTTP/1.1 和 AJAX 拉取資料,用 JavaScript 做做表單畫畫特效,用 CSS 美化頁面

  • 2010 年左右,用 HTTP/1.1 和 AJAX 拉取資料,用 jQuery 操作 DOM 處理前端邏輯,用 CSS 美化頁面

  • 2015 年左右,隨著 HTML5 標準的推廣和瀏覽器性能的提升,前端開始進入「學不動了」的時代:

    • 在 fetch data 層面,除了 HTTP/1.1 和 AJAX,HTTPS 來了,HTTP/2 來了,WebSocket 也來了
    • 在 manage state 層面,Angular、React 和 Vue 先后出現,從現在看,React 的狀態驅動視圖的理念直接影響了 Flutter 和 SwiftUI 的設計
    • 在 render page 層面,除了傳統的 HTML + CSS,還加入了 CSS3、Canvas 等概念,音視頻功能也得到加強
  • 最近幾年,網路協議趨于穩定,幾年內也不會有啥大的變動;國內 React 和 Vue 的地位基本穩固,一堆前端盯著 GitHub 進度條等版本更新;render 層出了不少幺蛾子,好不容易擺脫了 IE6,又來了各種小程式,同一套業務邏輯寫好幾遍不經濟也不現實,這時候各種跨端方案就整出來了

經過一番分析,這個三板斧理論看上去已經有些道理了,我們順著這個方向再向底層思考:這三大功能是怎么實作的?

  • fetch data 方向,最后要靠網路協議堆疊把資料發出去,但是讓一個前端直接搞套接字編程是非常不現實的,所以我們需要把網路操作封裝為庫,讓應用層呼叫
  • render page 方向,最后是把相關圖元資訊通過各種圖形 API(OpenGL/Metal/Vulkan/DirectX)發給 GPU 進行渲染,很多前端的圖形學路程最終都止于一個三角形,用這套技術堆疊去畫 UI 也極其不現實,更不要說排版系統這種工程量浩大的作業,所以這些活兒都讓相關的渲染引擎做了
  • manage state 方向,你可以用全域變數管理狀態,最后的結局一定被同事打爆,現在主流方案都是采用各種框架和 runtime 進行狀態管理,而這個 runtime 的宿主環境,往往就是某個語言的虛擬機,同時,fetch data 的起點,也是同一個虛擬機
虛擬機 渲染引擎
虛擬機 渲染引擎

經過上面的分析我們可以看出,前端的主要技術核心就兩個:虛擬機渲染引擎,這也意味著,如果我們想要搞跨端開發,就必須得統一虛擬機和渲染引擎

二、虛擬機和渲染引擎

1.網頁:JS Engine + WebKit

前端三劍客
前端三劍客
??

因為谷歌的 Blink 引擎 fork 自蘋果的 WebKit,后文為了描述方便,統一用 WebKit 代替瀏覽器渲染引擎

網頁是成本最低上手最快的跨端方案了,得益于互聯網開放式理念,網頁天生就是跨端的,無論什么渲染框架,WebView 都是必不可少的核心組件,

開發人員的接入成本也極低,主要技術就是 Web 開發那一套,前端主要頭疼的是各個渲染引擎的適配問題性能問題

現在主流的 JS Engine 是蘋果的 JavaScriptCore 和谷歌的 V8,主流的渲染引擎是蘋果的 Webkit 和谷歌的 Blink,雖然 W3C 的規范就擺在那里,各個瀏覽器廠商再根據規范實作瀏覽器,這也是網頁跨端的基礎,問題在于瀏覽器內核實作總有細微差距,部分實作不合規范,部分實作本身就有 Bug,這也是前端擺脫不了適配需求的本質原因,

另一個是性能問題,其實 WebKit 本身的渲染速度還是很快的,但是受限于一些瀏覽器特性,比如說極其復雜極其動態的 CSS 屬性,DOM 樹和 CSSOM 的合并,主執行緒必須掛起等待 JS 的執行,這些都會大大降低性能,前端搞性能優化,一般得依據這些瀏覽器特性進行減枝處理,但是再怎么優化,在頁面性能和互動體驗上,和 Native 還是有很大的距離,

2.網頁 PLUS:JS Engine + WebKit + Native 能力

直接拿個 URL 扔到 WebView 里是最簡單的,其實這樣也能解決大部分問題,畢竟前端 90% 的作業都是畫 UI 寫業務邏輯,但是還有 10% 的功能做不到,比如說要和 Native 同步狀態,呼叫一些系統功能,

要實作客戶端和網頁雙向通訊的話,一般都是借助 JSBridge 進行通信,《JSBridge 的原理》這篇文章總結的不錯,感興趣的同學可以看一下,

JSBridge 只是解決了 Native 和 Web 的互相呼叫問題,如果我想借助 Native 加強 Web 怎么辦?這時候就有了一些探索:

  • 預熱:提前創建和初始化 WebView,甚至實作 WebView 容器池,減少 WebView 的啟動時間

  • 快取:把常用的 Web 資源預先存在 Native 本地,然后攔截瀏覽器網路請求重定向到本地,這樣就可以加快 Web 的資源加載速度(也叫“離線包”方案);

  • 劫持:比如說 Web 對網路加載的控制力比較弱,部分有能力的廠商會把所有的網路請求都劫持下來交給 Native 去做,這樣做可以更靈活的管理 Web 請求

  • 替換:替換一般指替換 Web 的 Img 標簽和 Video 標簽,這個最常見的地方就是各大新聞類客戶端,因為新聞的動態性和實時性,新聞都是由各個編輯/自媒體通過后臺編輯下發的,這時候要利用 Web 強大的排版功能去顯示文本內容;但是為了加載速度和觀看體驗,圖片和視頻都是 Native 組件替換的

經過上面幾步,網頁的速度基本可以達到秒開的級別,這里面最典型的就是幾大新聞客戶端,大家可以上手體驗一下,

3.小程式:JS Engine + WebKit

各大小程式平臺
各大小程式平臺

小程式,國內的特色架構,本質上是微信成為流量黑洞后,想成為流量分發市場管理和分發自己的流量,所以這是個商業味道很重的框架,

小程式在技術上沒什么特別的創新點,本質上就是閹割版的網頁,所以微信小程式出來后各個流量寡頭都推出了自己的小程式,正如有人吐槽的,小程式的實作方式有 9 種,底層實作多樣化,各個廠實作還沒有統一的標準,最后就是給開發者喂屎,我也沒啥好介紹的,就這樣吧,

4.React Native:JS Engine + Native RenderPipeLine

React Native 和 Hermes
React Native 和 Hermes

React 2013 年發布,兩年后 React Native 就發布了,前幾種跨段方案基本都是基于瀏覽器技術的,RN 這個跨段方案的創新性在于它保留了 JS Engine,在渲染引擎這條路上,他沒有自己造輪子,而是復用了現有的 Native 渲染管線,

這樣做的好處在于,保留 JS Engine,可以最大程度的復用 Web 生態,畢竟 GitHub 上輪子最多的語言就是 JavaScript 了;復用 Native RenderPipeLine,好處在于脫離 WebKit 的歷史包袱,相對來說渲染管線更短,性能自然而然就上去了,

那么問題來了,RN 是如何做到跨端的?這個其實全部仰仗于 React 的 vdom,

vdom

前端社區上有些文章討論 vdom,總會從性能和開發便捷性上切入講解,從純 Web 前端的角度看,這些的確是 vdom 的特點,但是這不是 vdom 真正火起來的原因,vdom 更大的價值在于,人們從 vdom 身上看到跨端開發的希望,所以在 React 出現后 React Native 緊跟著出現是一件非常自然的事情,為什么這么說?這個就要先溯源一下 UI 開發的范式,

UI 開發主要有兩大范式:Immediate Mode GUI(立即模式)Retained Mode GUI(保留模式)

簡單來說,IMGUI 每幀都是全量重繪,主要用在實時性很高的領域(游戲 CAD 等);RMGUI 是最廣泛的 UI 范式,每個組件都被封裝到一個物件里,便于狀態管理和復雜的嵌套布局,無論是網頁、iOS、Android 還是 Qt 等桌面開發領域,都是基于 RMGUI 的,這兩者的具體細節差異,可以看這篇知憾訓答和這個 Youtube 視頻,

我們再回到 React Native 中,既然 iOS Android 的原生渲染管線都是 RMGUI 范式,那么總是有相似點的,比如說 UI 都是樹狀嵌套布局,都有事件回呼等等,這時候 vdom 的作用就出來了:

vdom 作為一個純物件,可以清晰的提煉出出布局的嵌套結構,而且這個抽象描述是平臺無關的,那么我們就可以利用 JS 生成 vdom,然后將 vdom 映射到 Native 的布局結構上,最終讓 Native 渲染視圖,以達到跨平臺開發的目的,

到這里如果你有些編譯原理的知識,你就會發現 vdom 和 IR 有些類似,同樣都是抽象于平臺的中間態,vdom 上接 React 下接 Native RenderPipeLine,IR 上接編譯器前端下接編譯器后端,我們只要關心前半段的邏輯處理,臟活累活都讓后半部分做,

Hermes

2019 年 Facebook 為了優化 React Native 的性能,直接推出了新的 JS Engine——Hermes,FB 官方博文介紹了很多的優點,我個人認為最大的亮點是加入 AOT,傳統的 JS 加工加載流程是這樣的:

Babel 語法轉換Minify 代碼壓縮install 下載代碼Parse 轉為 ASTCompile 編譯Execute 執行

Hermes 加入 AOT 后,BabelMinifyParseCompile 這些流程全部都在開發者電腦上完成,直接下發位元組碼讓 Hermes 運行就行,

Bytecode precompilation with Hermes
Bytecode precompilation with Hermes

這樣做的好處在于,可以大大縮短 JS 的編譯時間,不信的話大家可以用 Chrome 分析幾個大型網站,JS 的決議加載時間基本占時都是 50% 以上,部分重型網站可能占時 90%,這對桌面應用來說還好,對于電量和 CPU 都要弱上一線的移動平臺來說,這些都是妥妥的性能殺手,Hermes 的加入可以大大改善這一情況,

目前 React Native 0.64 也支持 Hermes 了,如果有做 RN 業務的同學可以玩一玩,看看在 iOS 上的性能提升有多大,

5.Flutter: Dart VM + Flutter RnderPipeLine

Flutter 和 Dart
Flutter 和 Dart

Flutter 是最近比較火的一個跨端方案,也有不少人認為這是最終的跨端方案,畢竟桌面軟體時代,最終勝出跨端方案就是 Qt,他們的共同特點就是自帶了一套渲染引擎,可以抹平終端差異,

Flutter 的創造還是很有意思的,這里有個 Eric 的訪談,視頻中說 Eric 差不多有十幾年的 Web 渲染領域作業經驗,有一次在 Chrome 內部他們做了個實驗,把一些亂七八糟的 Web 規范去掉后,一些基準測驗甚至能快 20 倍,因此 Google 內部開始立項,Flutter 的出現了,至于 Flutter 選擇 Dart 的理由,坊間一直傳說 Flutter 開發組隔壁就是 Dart 開發組,離得近就好 PY 交易,反正 Dart 也沒人用,沒啥歷史包袱,可以很好的相應 Flutter 的需求,

Flutter 的架構也是比較清晰的:

  • 虛擬機用的 Dart VM,Dart 同時支持 JIT 和 AOT,可以同時保證開發效率和運行效率
  • 渲染引擎先把 Dart 構建的視圖資料傳遞給 Skia,然后 Skia 加工資料交給 OpenGL/Metal 這兩個圖形 API,最終交給 GPU 渲染,整體上比 WebKit 的渲染流水線清晰不少

從純粹程度上看,Flutter 是做的最徹底的,虛擬機和渲染引擎都沒有用業內的成熟方案,而是自造了一套,好處就是沒啥適配壓力,壞處就是太新了,業務開發時往往會遇到無輪子可用的尷尬狀態,如果谷歌大力推廣,國內大廠持續跟進,前景還是很光明的,

6.其它方向的探索:JS Engine + Flutter RnderPipeLine?

社區里有一種聲音,認為 Flutter 最大的敗筆就是不能用 JavaScript 開發,這時候就會有人想,如果我們把 Web 技術和 Flutter 技術結合起來,用 JS Engine 對接世界上最大最活躍的 JS 社區,用 Flutter 渲染引擎對接高性能渲染體驗,國安民樂,豈不美哉?

豈不美哉?
豈不美哉?

目前來說一些大廠還是做了一些探索,我看了一些分析和專案架構,感覺就是做了個低配版的 React Native,React Native 的現有架構有一個性能瓶頸就是跨語言呼叫成本比較高,而這些大廠的呼叫鏈路多達 4 步:JS -> C++ -> Dart -> C++,更加喪心病狂,目前看無論是上手和推廣都是沒有直接用 RN or Flutter 方便,

三、各跨端方案的不足之處

跨端方案不可能只有好處的,各個方案的壞處也是很明顯的,我下面簡單列一下:

  • 網頁:性能是個過去不的坎兒,而且 Apple 明確指出不歡迎 WebView 套殼 APP,有拒審危險
  • 網頁 PLUS:技術投入很高,基本只能大廠玩轉
  • 小程式:對開發者不友好,技術半衰期極短
  • React Native:基本只能畫 UI,一旦做深了,只會 JS 根本解決不了問題,Java OC 都得學,對開發者要求比較高
  • Flutter:Android 支持很好,但 iOS 平臺的互動割裂感還是很強的,而且和 RN 問題一樣,一旦做深了,必須學習客戶端開發知識,對開發者要求比較高

總的來說,在犧牲一定用戶體驗的前提下,跨端方案可以提高開發者的開發效率和公司的運行效率,我個人認為,只要某個方案的 ROI 比較高,其實是還是可以投入到生產的,

四、總結

本文到此就結束了,我把各個跨端技術提煉為為虛擬機和渲染引擎技術,然后以這兩個核心技術的角度去拆解各個跨端方案,一旦概念理清,在面對性能調優等技術場景時,就能抓住主要矛盾,更快更好的發現問題,解決問題,


如果你覺得我的文章對你有幫助,在收藏的程序中,一定要記得點贊點在看哦,謝謝你,這對我真的很重要??!

最后推薦一波我的微信公眾號:鹵蛋實驗室和我的個人博客:supercodepower.com, 目前專注前端技術,對圖形學也有一些微小研究,

也可以加我的微信 egg_labs,歡迎大家來撩,

五、推薦閱讀

【答疑解惑】為什么你的 Charles 會抓包失敗?

【全網最全】React Native 性能優化指南

【獨家】React Native 版本升級指南

webpack 中那些最易混淆的 5 個知識點

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/227803.html

標籤:架構設計

上一篇:重溫設計模式系列(三)面向物件設計原則

下一篇:RISC-V為什么會成為熱點?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more