2017 年了滑燃,這么多前端框架役听,你會(huì)怎樣選擇?

圖片來(lái)源: Ember.js: 解決你框架疲勞的良藥

過(guò)去七年來(lái),前端框架生態(tài)系統(tǒng)發(fā)展蓬勃典予。我們已經(jīng)學(xué)了很多關(guān)于構(gòu)建和維護(hù)大型應(yīng)用的知識(shí)甜滨。我們看到了很多新想法的出現(xiàn)。其中一些新想法改變了我們構(gòu)建 Web 應(yīng)用的方式瘤袖,而其他想法被廢棄衣摩,因?yàn)樗鼈兤鸩坏绞裁醋饔谩?/p>

在這個(gè)過(guò)程中,我們看到很多炒作和沖突的觀點(diǎn)捂敌,選擇一個(gè)框架變得困難重重艾扮。當(dāng)您為長(zhǎng)期維護(hù)一個(gè)應(yīng)用的組織挑選框架時(shí),更是難上加難占婉。

在本文中泡嘴,我想描述我們對(duì)如何構(gòu)建現(xiàn)代 Web 應(yīng)用的理解的演變,并提出一種如何在多種技術(shù)中進(jìn)行選擇的方法逆济。

在開始前酌予,我想先回顧一下,回到第一個(gè)使構(gòu)建網(wǎng)絡(luò)應(yīng)用更像編程的庫(kù)奖慌。 Backbone.js 于 2010 年 10 月發(fā)布抛虫,2013 年 3 月達(dá)到 1.0 版本。它是第一個(gè)廣泛使用的采用模型與視圖之間相分離的 JavaScript 庫(kù)升薯。

圖片來(lái)源:Angular Model 和 View 之間的關(guān)系?—— http://backbonejs.org
Backbone.js 的 Model 表示數(shù)據(jù)和業(yè)務(wù)邏輯莱褒。它們觸發(fā)視圖層的變化。當(dāng)改變事件觸發(fā)的時(shí)候涎劈,顯示模型數(shù)據(jù)的視圖負(fù)責(zé)將該更改應(yīng)用于 DOM。Backbone 并不知道您首選 HTML 模板的方法阅茶,需要開發(fā)者自行編寫 render 函數(shù)解決如何更新 View 到 DOM蛛枚。

在 Backbone 1.0 誕生的時(shí)候,Angular.js 被發(fā)布并開始普及脸哀。它不像 Backbone 那樣側(cè)重于模型蹦浦,而是側(cè)重于使視圖做的更好。

Angular.js 采用了編譯模型以使 HTML 動(dòng)態(tài)化的想法撞蜂。它允許使用指令將行為注入到 HTML 元素中盲镶。您可以將模型與視圖進(jìn)行綁定,并且當(dāng)模板改變的時(shí)候蝌诡,視圖會(huì)自動(dòng)更新溉贿。

Angular.js 的流行度迅速增長(zhǎng),因?yàn)槟愫苋菀讓?Angular.js 添加到任何項(xiàng)目中浦旱,并且上手簡(jiǎn)單宇色。許多開發(fā)人員被 Angular.js 所吸引,因?yàn)樗怯?Google 開發(fā)的,這賦予 Angular.js 天生的可靠度宣蠕。

大約在同一時(shí)間例隆,Web 組件規(guī)范承諾使開發(fā)人員可以創(chuàng)建與其上下文分離的,并且易于與其他組件進(jìn)行組合的可重用組件抢蚀。

Web Components 規(guī)范是由四個(gè)獨(dú)立的規(guī)范組合而成的镀层。

  • HTML 模板?—?為組件提供 HTML 標(biāo)記
  • 自定義元素?—?提供了一種創(chuàng)建自定義 HTML 元素的機(jī)制
  • Shadow DOM?—?將組件的內(nèi)部與渲染它的上下文隔進(jìn)行離
  • HTML 導(dǎo)入?—?使將 Web 組件加載到頁(yè)面中成為可能

Google 的一個(gè)團(tuán)隊(duì)創(chuàng)建了一個(gè)補(bǔ)丁庫(kù),為當(dāng)時(shí)所有瀏覽器提供 Web Components 支持皿曲。這個(gè)庫(kù)被稱為 Polymer唱逢,并于 2013 年 11 月開源。

Polymer 是第一個(gè)使通過(guò)組合組件構(gòu)建交互式應(yīng)用成為可能的庫(kù)谷饿。早期使用者受益于可組合性惶我,但發(fā)現(xiàn)性能問題還是需要用框架來(lái)解決。

同時(shí)博投,一小群開發(fā)人員受到 Ruby on Rails 思想的啟發(fā)绸贡,希望創(chuàng)建一個(gè)基于約定的社區(qū)驅(qū)動(dòng)的開源框架來(lái)構(gòu)建大型 Web 應(yīng)用。

他們開始基于 SproutCore 2.0 進(jìn)行開發(fā)毅哗。SproutCore 2.0 是一個(gè)基于 MVC 的框架听怕,在模型、控制器和視圖之間有明顯的分隔虑绵。這個(gè)新框架叫做 Ember.js尿瞭。

創(chuàng)建基于約定的框架的第一個(gè)挑戰(zhàn)是找到大型 Web 應(yīng)用的通用模式。 Ember.js 團(tuán)隊(duì)查看了大型 Backbone 應(yīng)用翅睛,以找到相似之處声搁。

他們發(fā)現(xiàn)應(yīng)用的某些部分是一致的,而其他部分會(huì)有些改動(dòng)捕发。在這種地方就需要嵌套視圖疏旨。

他們還將 URL 視為 Web 應(yīng)用架構(gòu)中的關(guān)鍵角色。他們結(jié)合了嵌套視圖的想法和 URL 的重要性扎酷,創(chuàng)建一個(gè)路由系統(tǒng)檐涝,作為入口點(diǎn)進(jìn)入應(yīng)用并控制初始視圖呈現(xiàn)。

Ember.js?的元素 —— 原文 Ember JS?深入介紹

Ember 社區(qū)在 Ember.js 核心團(tuán)隊(duì)的領(lǐng)導(dǎo)下法挨,于 2013 年 8 月發(fā)布了 Ember.js 1.0谁榜。它具有 MVC 架構(gòu),強(qiáng)大的路由系統(tǒng)和可編譯模板的組件凡纳。像 Angular.js 和 Polymer 一樣窃植,Ember.js 主要依靠雙向綁定來(lái)保持視圖與狀態(tài)同步。

在 2014 年的年中惫企,一個(gè)新的庫(kù)開始引起開發(fā)者的注意撕瞧。Facebook 為他們的平臺(tái)創(chuàng)建了一個(gè)框架陵叽,并以 “React” 的命名發(fā)布。

在其他的框架都依賴于對(duì)象突變和屬性綁定的時(shí)候丛版,React 引入了將諸如純函數(shù)和組件參數(shù)之類的組件作為函數(shù)參數(shù)來(lái)處理的想法巩掺。

組件是返回 DOM 的函數(shù)?——?原文 https://facebook.github.io/react/docs/components-and-props.html#functional-and-class-components

當(dāng)一個(gè)參數(shù)的值改變時(shí),組件的 render 函數(shù)被調(diào)用并返回一個(gè)新的組件樹页畦。 React 將返回的組件樹與虛擬 DOM 樹進(jìn)行比較胖替,以確定如何更新真實(shí)的DOM。這種重新渲染所有內(nèi)容并將結(jié)果與虛擬 DOM 進(jìn)行比較的技術(shù)經(jīng)實(shí)踐證明是非常有效的豫缨。

原文: React.js Reconciliation

Angular.js 開發(fā)人員面臨著 Angular.js 變更檢測(cè)機(jī)制引發(fā)的性能問題独令。Ember 社區(qū)正在學(xué)習(xí)如何解決維護(hù)依賴于雙向綁定和觀察者模式的大型應(yīng)用的挑戰(zhàn)。

React 主攻的是 Polymer 所未能解決的問題好芭。React 顯示了如何提高組件架構(gòu)的性能燃箭。 React 在基準(zhǔn)測(cè)試中打敗了 Ember 和 Angular.js。一些較有嘗試新技術(shù)精神的 Backbone 開發(fā)人員將 React 作為視圖添加到其應(yīng)用中舍败,以解決他們遇到的性能問題招狸。

為了應(yīng)對(duì) React 的威脅,Ember 核心團(tuán)隊(duì)制定了一項(xiàng)計(jì)劃邻薯,將 React 提出的想法納入 Ember 框架裙戏。他們認(rèn)識(shí)到需要提升向后兼容性,并創(chuàng)建了一個(gè)版本升級(jí)的途徑厕诡,允許現(xiàn)有應(yīng)用升級(jí)到包含新 的 React-inspired 渲染引擎的 Ember 版本累榜。

在 4 個(gè)次要版本的更新過(guò)程中,Ember.js 已棄用 Views灵嫌,將社區(qū)遷移到基于 CLI 的構(gòu)建過(guò)程壹罚,并將基于組件的架構(gòu)作為 Ember 應(yīng)用開發(fā)的基礎(chǔ)。逐漸對(duì)框架進(jìn)行重要的重構(gòu)的過(guò)程被稱為“穩(wěn)定無(wú)停滯”寿羞,成為 Ember 社區(qū)的基本宗旨渔嚷。

當(dāng) Ember 正在向 React 學(xué)習(xí)時(shí),React 社區(qū)正在采用由 Ember 推廣的路由稠曼。 大型 React 應(yīng)用是使用 React Router 編寫的,該路由器是從用于 Ember 路由的 router.js 分支發(fā)展而來(lái)的客年。

Ember 對(duì)我們構(gòu)建現(xiàn)代 Web 應(yīng)用最大的貢獻(xiàn)之一是他們?cè)谑褂妹钚泄ぞ咦鳛闃?gòu)建和部署 Web 應(yīng)用的默認(rèn)界面上的領(lǐng)導(dǎo)力和普及霞幅。此工具稱為 EmberCLI。它啟發(fā)了 React 的 create-react-appAngularCLI×抗希現(xiàn)在的每個(gè) Web 框架都提供了一個(gè)命令行工具來(lái)簡(jiǎn)化 Web 應(yīng)用的開發(fā)司恳。

在 2015 年上半年,Angular.js 的核心團(tuán)隊(duì)得出結(jié)論绍傲,他們的框架正在進(jìn)入一個(gè)進(jìn)化的死胡同扔傅。Google 需要一個(gè)開發(fā)人員可以用來(lái)構(gòu)建強(qiáng)大的應(yīng)用的工具耍共,而 Angular.js 不能成為這個(gè)工具。他們開始研究一個(gè)新的框架猎塞,這將是 Angular.js 的精神繼承者试读。 Angular.js 是在谷歌不是很支持的情況下流行起來(lái)的,而這個(gè)新框架則與 Angular.js 不同荠耽,得到了 Google 的全力支持钩骇。Google 分出了超過(guò) 30 多位開發(fā)人員,來(lái)開發(fā)這個(gè)被稱為 Angular.js 精神繼承者的框架铝量。

新框架的范圍遠(yuǎn)遠(yuǎn)大于 Angular.js倘屹。Angular 團(tuán)隊(duì)將新框架稱為平臺(tái),因?yàn)樗麄冇?jì)劃提供專業(yè)開發(fā)人員構(gòu)建 Web 應(yīng)用所需的一切慢叨。像 Ember 和 React 一樣纽匙,Angular 使用基于組件的架構(gòu),但它是使 TypeScript 成為其默認(rèn)編程語(yǔ)言的第一個(gè)框架拍谐。

具有 TypeScript 的?Angular 組件 ——?https://github.com/johnpapa/angular-tour-of-heroes/blob/master/src/app/heroes.component.ts
TypeScript 提供類烛缔、模塊和接口。它支持可選的靜態(tài)類型檢查赠尾,它對(duì) Java 和 C# 的開發(fā)人員來(lái)說(shuō)是一個(gè)非常棒的語(yǔ)言力穗。具有 Visual Studio Code 編輯器對(duì) TypeScript 代碼提供了很棒的智能支持功能。

對(duì) Angular Apps?的智能支持 ——?原文:http://rafaelaudy.github.io/simple-angular-2-app/

Angular 是高度結(jié)構(gòu)化和以公共標(biāo)準(zhǔn)為基礎(chǔ)的气嫁,然而仍然存在配置機(jī)制的問題当窗。它有一個(gè)強(qiáng)大的路由器。Angular 團(tuán)隊(duì)正在努力為 Google 開發(fā)人員從專業(yè)開發(fā)環(huán)境的角度提供一個(gè)全新的框架寸宵。對(duì)完整性的關(guān)注對(duì)整個(gè) Angular 社區(qū)都非常有好處崖面。

在 2017 年 5 月,Polymer 2.0 改進(jìn)了綁定系統(tǒng)梯影,減少了對(duì) heavy polyfills 的依賴巫员,并與最新的 JavaScript 標(biāo)準(zhǔn)保持一致。新版本引入了一些突破性變化甲棍,并為用戶升級(jí)到新版本提供了詳細(xì)的計(jì)劃简识。新的 Polymer 配備了一個(gè)命令行工具來(lái)幫助構(gòu)建和部署 Polymer 項(xiàng)目。

截至 2017 年 6 月感猛,所有頂級(jí)框架都將組件架構(gòu)作為開發(fā)范例七扰。每個(gè)框架都提供路由作為將應(yīng)用分解為邏輯塊的一種手段。所有框架都可以使用像 Redux 這樣的狀態(tài)管理技術(shù)陪白。React颈走、Ember 和 Angular 都允許服務(wù)器端渲染 SEO 和快速初始啟動(dòng)。

那么你怎么知道用什么工具來(lái)構(gòu)建一個(gè)現(xiàn)代的 Web 應(yīng)用呢咱士?我建議你看看各個(gè)組織的人口統(tǒng)計(jì)數(shù)據(jù)立由,以確定哪個(gè)框架最適合轧钓。

React 是一個(gè)類似于一大張拼圖中的一塊的庫(kù)。React 提供一個(gè)輕量級(jí)的視圖層锐膜,并將其留給開發(fā)人員選擇其余的架構(gòu)毕箍。盒子里沒有任何東西,所以你的團(tuán)隊(duì)可以完全控制你使用的一切枣耀。如果你有一個(gè)經(jīng)驗(yàn)豐富的 JavaScript 開發(fā)人員團(tuán)隊(duì)霉晕,他們對(duì)于功能編程和不可變數(shù)據(jù)結(jié)構(gòu)都很滿意,那么 React 是一個(gè)不錯(cuò)的選擇 React 社區(qū)在使用 Web 技術(shù)方面處于創(chuàng)新的前沿捞奕。如果你的組織需要使用相同的代碼庫(kù)來(lái)跨平臺(tái)牺堰,那么你應(yīng)該知道 React 允許你使用 React Native 編寫本地的 Web,使用 ReactVR 編寫 VR 設(shè)備颅围。

Angular 是一個(gè)非常適合有 Java 或 C# 背景的企業(yè)開發(fā)人員的平臺(tái)伟葫。TypeScript 和 Intellisense 的支持將使這些開發(fā)人員感覺到非常熟悉。雖然 Angular 是新的院促,但它已經(jīng)有很多第三方組件庫(kù)了筏养,公司可以立即購(gòu)買并立即開始使用。Angular 團(tuán)隊(duì)承諾要快速迭代框架常拓,使之更好渐溶,且不會(huì)再次破壞向后兼容性。Angular 可用于使用 NativeScript 構(gòu)建高性能原生應(yīng)用弄抬。

Ember.js 是一個(gè)優(yōu)化小團(tuán)隊(duì)和技能水平較高的獨(dú)立開發(fā)者的生產(chǎn)力框架茎辐。其對(duì)配置上的約定,為新開發(fā)人員和組織長(zhǎng)期維護(hù)大型項(xiàng)目提供了極好的起點(diǎn)掂恕。承諾的“穩(wěn)定無(wú)停滯”已被證明是維護(hù)大型應(yīng)用的有效方法拖陆,而不需要在最佳實(shí)踐改變時(shí)進(jìn)行重寫。穩(wěn)定性懊亡、成熟度和致力于創(chuàng)造共享代碼依啰,促生了一個(gè)生態(tài)系統(tǒng),這個(gè)生態(tài)系統(tǒng)使得大多數(shù)開發(fā)的簡(jiǎn)易程度讓人驚訝店枣。如果您正在尋找一個(gè)長(zhǎng)期項(xiàng)目的可靠框架速警,Ember 是一個(gè)很好的選擇。

Polymer 是一個(gè)對(duì)于希望創(chuàng)建單一樣式指南鸯两,和要在整個(gè)組織中使用的組件集合的大型組織而言特別適合的框架坏瞄。該框架提供可比較的開發(fā)工具。如果你想將一些現(xiàn)代化的功能應(yīng)用在你的程序上甩卓,而不需要編寫大量 JavaScript,那么 Polymer 是你們很不錯(cuò)的選擇蕉斜。

我們正在了解如何為瀏覽器構(gòu)建應(yīng)用逾柿,并匯集好的想法缀棍。 所有框架的制作者都非常關(guān)心使用他們的庫(kù)的人。 問題是哪個(gè)社區(qū)和生態(tài)系統(tǒng)是你的組織和用例的最佳選擇机错。

我希望這篇文章有助于揭示現(xiàn)代網(wǎng)絡(luò)生態(tài)系統(tǒng)的發(fā)展爬范,并幫助您構(gòu)建下一代現(xiàn)代 Web 應(yīng)用。

在評(píng)論區(qū)留下你的看法吧弱匪。


歡迎大家關(guān)注知乎專欄:全棧成長(zhǎng)之路

文章保質(zhì)保量 (づ ̄3 ̄)づ╭?~

也歡迎大家加入學(xué)習(xí)交流QQ群:637481811

本文首發(fā)于我的 個(gè)人網(wǎng)站 LeviDing 青瀑,更多內(nèi)容歡迎關(guān)注我的個(gè)人網(wǎng)站。
歡迎掃描上方二維碼關(guān)注 公眾號(hào): LeviDing 訂閱實(shí)時(shí)動(dòng)態(tài)萧诫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斥难,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帘饶,更是在濱河造成了極大的恐慌哑诊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件及刻,死亡現(xiàn)場(chǎng)離奇詭異镀裤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缴饭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門暑劝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颗搂,你說(shuō)我怎么就攤上這事担猛。” “怎么了峭火?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵毁习,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我卖丸,道長(zhǎng)纺且,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任稍浆,我火速辦了婚禮载碌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衅枫。我一直安慰自己嫁艇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布弦撩。 她就那樣靜靜地躺著步咪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪益楼。 梳的紋絲不亂的頭發(fā)上猾漫,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天点晴,我揣著相機(jī)與錄音,去河邊找鬼悯周。 笑死粒督,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禽翼。 我是一名探鬼主播屠橄,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼闰挡!你這毒婦竟也來(lái)了锐墙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤解总,失蹤者是張志新(化名)和其女友劉穎贮匕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體花枫,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刻盐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劳翰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦锌。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖佳簸,靈堂內(nèi)的尸體忽然破棺而出乙墙,到底是詐尸還是另有隱情,我是刑警寧澤生均,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布听想,位于F島的核電站,受9級(jí)特大地震影響马胧,放射性物質(zhì)發(fā)生泄漏汉买。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一佩脊、第九天 我趴在偏房一處隱蔽的房頂上張望蛙粘。 院中可真熱鬧,春花似錦威彰、人聲如沸出牧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舔痕。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赵讯,已是汗流浹背盈咳。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留边翼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓鸣剪,卻偏偏與公主長(zhǎng)得像组底,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筐骇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文來(lái)自于:葡萄城控件技術(shù)團(tuán)隊(duì)博客 相比于JavaScript開發(fā)人員的數(shù)量,目前JavaScript框架告唆、類庫(kù)和...
    zenmshuo_2919閱讀 624評(píng)論 0 2
  • Vue對(duì)比其他框架 這個(gè)頁(yè)面無(wú)疑是最難編寫的棺弊,但我們認(rèn)為它也是非常重要的∏苄或許你曾遇到了一些問題并且已經(jīng)用其他的框...
    伊滴墨閱讀 1,806評(píng)論 0 15
  • Gitbook Repo 撰寫本文的時(shí)候筆者閱讀了以下文章模她,不可避免的會(huì)借鑒或者引用其中的一些觀點(diǎn)與文字,若有冒犯...
    王下邀月熊閱讀 1,080評(píng)論 1 9
  • 文/以琳_ 天荒地老花飛去懂牧,滾滾紅塵絮侈净。 夏開瀚海灑霜銀,不落玉容料峭北風(fēng)茵僧凤。 青春一季人生短畜侦,未使韶華倦。...
    以琳_閱讀 1,759評(píng)論 21 29
  • 279期排三預(yù)測(cè) 獨(dú)膽2 雙膽82 五碼24578(注25.47不組合) 主殺碼0139=0 形態(tài):組六 主殺尾1...
    9f150733f60a閱讀 260評(píng)論 0 2