2016年前端開發者深度調研,看看別人使用什麼技術體系翻譯自The State of Front-End Tooling 2016 - Results。本文從屬於筆者的Web 前端入門與最佳實踐,若是你但願瞭解更多關於本文說起的各類框架庫的信息,能夠參考筆者的Web前端從入門菜鳥到實踐老司機所須要的資料與指南合集。前端
大概一個月以前,我啓動了2016 Front-End Tooling Survey,截止到今天,共有4715名開發者參與了該調查,這裏要鄭重感謝下全部參與的同志。與上一年的調查類似,本調查目的爲發現前端開發者們到底在他們的技術體系中使用怎樣的技術,最終對於整個前端社區的潮流風向有一個總覽體現。git
第一個問題至關直接,就是你已經在前端技術棧中摸爬滾打了多久?結果以下:github
Answer | Number of Votes | Percentage |
---|---|---|
0-1 Year | 232 | 4.92% |
1-2 Years | 589 | 12.49% |
2-5 Years | 1,508 | 31.98% |
5-10 Years | 1,323 | 28.06% |
10-15 Years | 673 | 14.27% |
Over 15 Years | 390 | 8.27% |
在上表中能夠發現,大部分的參與者表示它們在前端之路上走了2~5年或者5~10年,換言之,超過60%的開發者有2~10年的經驗。另外,能夠發現5年以內的開發者與5年之上的開發者各佔一半,這一點代表本調查的對象分佈較爲平均。web
第二個問題是關於參與者們如何估算他們本身的CSS技能熟練度,這個問題仍是挺主觀的,不只依賴於參與者自己所處的技術氛圍,還受到自身謙虛程度的影響。原問題是:你如何給本身的CSS以及相關技能評分?結果以下:編程
Level | Number of Votes | Percentage |
---|---|---|
Beginner | 78 | 1.65% |
Novice (between Beginner and Intermediate) | 424 | 8.99% |
Intermediate | 1,243 | 26.36% |
Advanced (between Intermediate and Expert) | 2,203 | 46.72% |
Expert | 767 | 16.27% |
表中結果能夠看出,大概89.36%(4213)的參與則以爲他們對於CSS的掌握長度在中級及以上。這個結果能夠從多個維度解析,一方面能夠看出雖然很多開發者在前端上涉足時間很少,可是他們以爲對於CSS已經可以較好的掌握。另外一方面這也反映了相較於JavaScript與HTML,CSS會更易於掌握一點。不過我以爲也頗有可能很多的開發者尚不能真正理解CSS的紛繁複雜之處,或者受不能分清其語法與咱們真實應用中的方法論之間存在的必定差別。segmentfault
本問題爲你使用哪一個CSS處理工具,咱們在去年也問過這個問題,當時Sass是最著名的CSS處理工具,其在今年仍然獨佔鰲頭,遙遙領先。而與之相對的,使用Less的開發者數量有了較大的回落。在今年的統計中咱們加入了PostCSS,大概有8.31%的開發者會使用PostCSS相關的技術,這個比咱們預期的略低,不過估計是由於不少人將其與其餘處理工具混合使用而忽略了它的存在。另外,在下面的結果中咱們能夠看出,不使用任何CSS處理工具的開發者數量也在逐年減小,說明掌握合適的CSS處理工具的用法已經日漸成爲現代前端開發者的必備技能之一。app
Preprocessor | Number of Votes | Percentage | % Diff (to 2015) |
---|---|---|---|
Sass | 2,989 | 63.39% | -0.56% |
Less | 478 | 10.14% | -5.05% |
Stylus | 137 | 2.91% | -0.84% |
PostCSS | 392 | 8.31% | N/A |
Rework | 3 | 0.06% | N/A |
No Preprocessor | 643 | 13.64% | -1.4% |
Other | 73 | 1.55% | -0.52% |
本題是Q3的一個延伸,主要關注於開發者對於各類CSS處理工具的使用體驗。框架
Never Heard of | Heard of/Read About | Used a little | Feel Comfortable Using | |
---|---|---|---|---|
Sass – Standard or SCSS syntax | 0.57% (27) | 11.11% (524) | 17.16% (809) | 71.16% (3,355) |
Less | 0.81% (38) | 30.86% (1,455) | 33.32% (1,571) | 35.02% (1,651) |
Stylus | 24.22% (1,142) | 57.26% (2,700) | 11.11% (524) | 7.40% (349) |
PostCSS | 21.76% (1,026) | 45.37% (2,139) | 18.73% (883) | 14.15% (667) |
Rework | 78.43% (3,698) | 20.17% (951) | 0.91% (43) | 0.49% (23) |
該統計結果與Q3相去不大,Sass仍然擁有最多的使用者,而且得到了最高的使用滿意度。frontend
下一個問題是有關於開發者對於CSS命名方案的使用狀況,CSS自己的模塊化與工程化程度不高,我在本身的項目中使用CSS命名方案也有數年之久,不過我也很好奇其餘前端開發者是如何看待這件事的。Q5的原問題爲你是否使用過某個譬如BEM或者SUIT這樣的CSS命名方案?模塊化
Answer | Number of Votes | Percentage |
---|---|---|
Yes | 2,170 | 46.02% |
No – I’ve heard of CSS naming schemes but don’t use one | 1,731 | 36.71% |
No – I’ve never heard of CSS naming schemes | 814 | 17.26% |
結果仍是讓我有點震驚的,使用過某種命名方案的與從未用過的差很少一半對一半,不過仍是有超過80%的開發者是據說過CSS命名方案及其相關概念的。不過若是咱們與上面的統計結果結合起來看,在Advanced及以上級別的CSS開發者中使用CSS命名方案的開發者大概佔了56.94%,而Intermediate及如下開發者中使用比只有27.47%。我本身是以爲CSS命名方案會日益受到歡迎,我也會在將來的調查中跟蹤該指數。
Q6-CSS Linting
Q6是關於CSS樣式檢查的,原問題爲你是否使用過工具來檢查過你的CSS代碼樣式風格,結果以下:
Answer | Number of Votes | Percentage |
---|---|---|
Yes | 2,232 | 47.34% |
No – I don’t lint my CSS | 2,483 | 52.66% |
與上一個問題相似,使用過樣式檢查工具的開發者與未使用過的差很少也是一半對一半,而且CSS技能等級越高的開發者越會選擇使用某個Lint工具。CSS Linting在工具與使用上可能還是個較新的概念,目前人們可能更習慣於JavaScript Linting。不過我仍是比較看好像Stylelint這樣的樣式檢查工具會日漸爲開發者所使用。
下面三個問題都是關於CSS工具與常見方法論的使用體驗,本題的原題目爲請指明你對於下述CSS工具的使用體驗:
Never Heard of | Heard of/Read About | Used a little | Feel Comfortable Using | |
---|---|---|---|---|
Autoprefixer | 18.28% (862) | 17.18% (810) | 15.93% (751) | 48.61% (2,292) |
Susy | 55.02% (2,594) | 29.78% (1,404) | 9.69% (457) | 5.51% (260) |
Modernizr | 6.64% (313) | 22.93% (1,081) | 37.96% (1,790) | 32.47% (1,531) |
Stylelint | 54.68% (2,578) | 24.35% (1,148) | 10.39% (490) | 10.58% (499) |
從上表中能夠看出,Autoprefixer以48.61%成爲體驗最好的CSS工具之一,不過當咱們僅考慮某個工具在使用過的人羣中的滿意度時,Modernizr以70.43%的比例高居榜首,Autoprefixer以64.54%位居第二。而在上述的這些工具中,大概55%的開發者尚不知道Stylelint與Susy。這一點也能看出不管是哪一個等級的開發者,要想隨時保持對全部工具的掌握也幾乎是不可能的。
下一個問題是關注開發者對於下列全部的CSS常見方法論與命名空間的使用體驗:
Never Heard of | Heard of/Read About | Used a little | Feel Comfortable Using | |
---|---|---|---|---|
SMACSS | 40.57% (1,913) | 33.91% (1,599) | 14.74% (695) | 10.77% (508) |
Object Oriented CSS (OOCSS) | 28.27% (1,333) | 41.80% (1,971) | 17.77% (838) | 12.15% (573) |
Atomic Design | 41.53% (1,958) | 33.74% (1,591) | 14.34% (676) | 10.39% (490) |
ITCSS | 68.34% (3,222) | 22.38% (1,055) | 4.50% (212) | 4.79% (226) |
CSS Modules | 27.42% (1,293) | 44.77% (2,111) | 15.95% (752) | 11.86% (559) |
BEM | 24.90% (1,174) | 23.52% (1,109) | 18.49% (872) | 33.09% (1,560) |
SUIT CSS | 69.42% (3,273) | 24.14% (1,138) | 3.90% (184) | 2.55% (120) |
在上表能夠看出,BEM算是目前最受歡迎,也是使用體驗最好的CSS命名方案之一,基本上在真實的使用者中超過了50%的人表示很滿意。不過令我震驚的是,對於OOCSS等常見的CSS方法論有所瞭解的開發者數量佔比僅有不到30%,即便在那些Advanced或者Expert級別的開發者中,沒有任何一項方法論的使用度超過了20%。
這是關於CSS部分的最後一個問題了,它是關於開發者目前在其項目中使用過哪些CSS方法論或者工具:
Tool/Methodology | Number of Votes | Percentage |
---|---|---|
SMACSS | 613 | 13.00% |
Object Oriented CSS (OOCSS) | 696 | 14.76% |
Atomic Design | 680 | 14.42% |
ITCSS | 248 | 5.26% |
CSS Modules | 740 | 15.69% |
BEM | 1905 | 40.40% |
SUIT CSS | 111 | 2.35% |
Autoprefixer | 2,414 | 51.20% |
Susy | 237 | 5.03% |
Modernizr | 1,828 | 38.77% |
Stylelint | 682 | 14.46% |
I don’t use any of these approaches or tools | 1,095 | 23.22% |
根據參與者的反饋信息,咱們能夠發現Autoprefixer、BEM以及Modernizr算是最爲流行的CSS開發中的輔助工具。另外,儘管在上一個問題的調查中單個CSS方法論的使用度不高,可是整體來看有超過40%的開發者在他們的項目中使用了SMACSS、OOCSS、Atomic Design、ITCSS或者CSS Modules中的一項。這裏令我比較驚訝的是對於CSS模塊化框架的使用度遠高於其餘類型的框架,結合以上幾個關於CSS問題的答案,不難發現目前開發者對於CSS的寫法仍是很普遍的,並無造成一套被社區普遍任何的統一方案。另外,咱們也會發現有很大一部分自認爲熟手的CSS開發者不滿意於如今流行的CSS方法論與工具。
最後,筆者仍是想強調,儘管CSS時一個很是簡單的語言,可是想要完全的掌握與理解仍是具備必定難度的,千萬不能由於其易於上手就忽視其複雜度。
本問卷第二部分是有關於參與者的JavaScript技能,第一個問題與CSS相似,就是你是如何給本身的JavaScript技能評級?
Knowledge | Number of Votes | Percentage |
---|---|---|
Beginner | 78 | 4.18% |
Novice (between Beginner and Intermediate) | 424 | 11.73% |
Intermediate | 1,243 | 32.98% |
Advanced (between Intermediate and Expert) | 2,203 | 35.72% |
Expert | 767 | 15.40% |
開發者對於本身JavaScript技能評級的分佈於CSS的評級相似,不過相較於CSS,更少的人認爲本身達到了中等或以上水準。
2015年裏Task Runner
Task Runner | Number of Votes | Percentage | % Diff (to 2015) |
---|---|---|---|
Gulp | 2,060 | 43.69% | -0.1% |
NPM Scripts | 1,223 | 25.94% | +22.78% |
Grunt | 554 | 11.75% | -15.81% |
Make | 54 | 1.15% | N/A |
GUI Application (i.e. Codekit) | 93 | 1.97% | N/A |
Other (please specify) | 214 | 4.54% | -0.34% |
I don’t use a task runner | 517 | 10.97% | -8.56% |
在上面的統計表中,能夠看出Gulp以超過40%的使用率位居前端Task Runner首位。不過對比2015與2016,咱們能夠看出愈來愈多的開發者選擇NPM做爲其Task Runner工具,這反映了愈來愈多的開發則但願可以簡化他們的編譯任務,從而避免Gulp或者Grunt這樣的工具帶來的抽象漏洞。還有一個比較有趣的,不使用任何Task Runner的開發者數量也有了較大的回落,與前一年相比減小了8.56%,這也表現了在項目中使用某個Task Runner已經是前端開發者的主流選擇之一。
這算是筆者最關心的問題之一,也是2016年前端硝煙四起的主戰場之一。在2015年的調查中,React相較於Angular仍是新人一枚,而如今Angular 2.0的正式版也已發佈,可是又會有多少人願意遷移到Angular 2呢?結果以下:
Never Heard of | Heard of/Read About | Used a little | Feel Comfortable Using | |
---|---|---|---|---|
jQuery | 0.11% (5) | 0.85% (40) | 12.17% (574) | 86.87% (4,096) |
Underscore | 10.22% (482) | 28.12% (1,326) | 24.41% (1,151) | 37.24% (1,756) |
Lodash | 15.89% (749) | 26.70% (1,259) | 19.75% (931) | 37.67% (1,776) |
Backbone | 4.31% (203) | 58.13% (2,741) | 23.01% (1,085) | 14.55% (686) |
Angular 1 | 0.66% (31) | 40.21% (1,896) | 30.43% (1,435) | 28.70% (1,353) |
Angular 2 | 0.89% (42) | 73.59% (3,470) | 20.19% (952) | 5.32% (251) |
Ember | 3.75% (177) | 78.41% (3,697) | 11.71% (552) | 6.13% (289) |
React | 0.76% (36) | 42.29% (1,994) | 28.04% (1,322) | 28.91% (1,363) |
Polymer | 13.55% (639) | 72.68% (3,427) | 11.75% (554) | 2.01% (95) |
Aurelia | 43.71% (2,061) | 50.03% (2,359) | 3.20% (151) | 3.05% (144) |
Vue.js | 14.68% (692) | 66.55% (3,138) | 13.11% (618) | 5.66% (267) |
MeteorJS | 9.59% (452) | 75.91% (3,579) | 11.69% (551) | 2.82% (133) |
Knockout | 16.14% (761) | 66.62% (3,141) | 11.33% (534) | 5.92% (279) |
在今年與去年的調查中,jQuery都以較大優點領先,有接近90%的開發者享受使用jQuery的開發過程,而接近99%的開發者表示都曾經使用過jQuery。而Underscore與Loadash都有接近40%的開發者表示讚揚。當咱們要選擇2016年最使人震撼的JS框架,React社區的迅猛發展成爲很是引人注目的變化。React不只與Angular 1並駕齊驅,還超越了當年Angular 1的滿意度。另外一個有趣的小細節就是Angular 2版本推出的如此之慢,差很少20.19%的開發者表示聽過Angular 2,可是隻有5%左右的開發者表示以爲用起來很爽。雖然可能隨着時間的推移Angular 2的使用者會逐漸增長,可是很難說它還能達到當年Angular 1的盛況。若是咱們從整個MV框架的角度來看,今年有大概62.23%的開發者會選擇使用某個MV框架,與去年相比有12%的增加。就如我去年所述,掌握至少一個框架會是前端開發者的必備技能之一。
直接上結果:
Number of Votes | Percentage | |
---|---|---|
jQuery | 3284 | 69.65% |
Underscore | 714 | 15.14% |
Lodash | 1527 | 32.39% |
Backbone | 301 | 6.38% |
Angular 1 | 1180 | 25.03% |
Angular 2 | 387 | 8.21% |
Ember | 280 | 5.94% |
React | 1776 | 37.67% |
Polymer | 87 | 1.85% |
Aurelia | 154 | 3.27% |
Vue.js | 456 | 9.67% |
MeteorJS | 115 | 2.44% |
Knockout | 156 | 3.31% |
I don’t use any of these approaches or tools | 132 | 2.80% |
筆者在2015:個人前端之路說起從以jQuery爲主的命令式編程到MV*形式的聲明式編程的變遷,可是能夠看出jQuery仍然在前端開發中佔據很是重要的位置。另外一個有趣的就是差很少有37%的開發者表示他們在項目中頻繁使用React,比上一題的統計要多出10%,看來不少開發者雖然表示用了很少,可是仍是很誠實的在他們的項目裏大規模使用了React。還須要注意的是,Vue日漸引發了人們的注意,而且有愈來愈多的開發者願意在他們的項目中使用Vue.js。
本題是上面兩個題目的延伸,但願能挖掘出人們對於JavaScript框架與庫更深層次的見解。
Number of Votes | Percentage | |
---|---|---|
None of them are essential – I feel comfortable using native JavaScript on my projects | 985 | 20.89% |
jQuery | 1468 | 31.13% |
Underscore | 38 | 0.81% |
Lodash | 262 | 5.56% |
Backbone | 38 | 0.81% |
Angular 1 | 386 | 8.19% |
Angular 2 | 129 | 2.74% |
Ember | 178 | 3.78% |
React | 857 | 18.18% |
Polymer | 16 | 0.34% |
Aurelia | 113 | 2.40% |
Vue.js | 148 | 3.14% |
MeteorJS | 8 | 0.17% |
Knockout | 17 | 0.36% |
Other (please specify) | 72 | 1.53% |
當僅容許開發者選擇某個框架的時候,jQuery仍然獨佔鰲頭,佔據了30%多,緊接着就是React,佔據了不到20%。另外還須要注意的是,大概20.89%的開發者並不認爲任何框架都是必須的,我以爲應該是隨着ES6的完善與流行,開發者更傾向使用原生的JavaScript進行開發,從而避免所謂的前端焦慮。2017年裏,jQuery仍然會在前端開發中佔據很是重要的位置,所以對於前端開發者而言,不要輕言完全拋棄jQuery。
在去年的調查中,JavaScript模塊打包工具仍然只有不到50%的開發者會在他們的項目中使用,不過在12個月以後,結果以下:
Module Bundler | Number of Votes | Percentage | % Diff (to 2015) |
---|---|---|---|
I don’t use a module bundler | 1516 | 32.15% | -21.75% |
RequireJS | 359 | 7.61% | -5.85% |
Browserify | 510 | 10.82% | -5.65% |
Webpack | 1962 | 41.61% | +31.11% |
Rollup | 79 | 1.68% | N/A |
JSPM | 108 | 2.29% | +0.07% |
Other (please specify) | 181 | 3.84% | +0.39% |
在上述調查中咱們能夠發現,有接近50%的使用者願意使用Webpack進行模塊打包,逐步蠶食了Browserify與RequireJS的份額。而從整個模塊打包的角度來看,使用模塊打包工具的前端開發者與去年相比已經有了20%的增加。從個人角度來看,使用某個合適的模塊打包工具來處理JavaScript模塊依賴問題是成爲專業JavaScript開發者不可避免的一個技能。
Answer | Number of Votes | Percentage |
---|---|---|
Yes | 2,942 | 62.40% |
No – I’ve heard of these tools, but haven’t used one | 1,443 | 30.60% |
No – I’ve never heard of a JavaScript transpiler | 330 | 7.00% |
超過60%的開發者表示他們正在使用某個JavaScript Transpiler,從一個側面表現出愈來愈多的開發者會傾向於使用ES6乃至更先進的語言特性。
JavaScript Linting也日漸成爲開發工做流中不可或缺的一部分,這個問題就是調查前端開發者對於JavaScript Linting工具的使用狀況:
Tool | Number of Votes | Percentage |
---|---|---|
I don’t use a JavaScript linter | 1,076 | 22.82% |
JSLint | 894 | 18.96% |
JSHint | 657 | 13.93% |
ESLint | 1,927 | 40.87% |
xo | 24 | 0.51% |
Other (please specify) | 137 | 2.91% |
接近80%的開發者表示他們會選擇使用某個Linting工具,而與以前關於CSS Linting的調查,咱們發現有超過29.84%的開發者更願意使用JavaScript Linting工具。而在全部的Linting 工具中,ESLint算是最受歡迎。筆者本身也是使用ESLint做爲主要的Linting工具,也很是推薦在項目中使用某個Linting工具,這對於提高你的代碼質量與樣式風格一致性有很大的意義。
下個題目咱們關注於JavaScript 測試工具的使用狀況,結果以下:
Tool | Number of Votes | Percentage | % Diff (to 2015) |
---|---|---|---|
I don’t use a tool to test my JS | 2,241 | 47.53% | -12.13% |
Jasmine | 802 | 17.01% | +0.64 |
Mocha | 1,061 | 22.50% | +7.46% |
Tape | 69 | 1.46% | -0.02% |
Ava | 84 | 1.78% | N/A |
QUnit | 199 | 4.22% | +0.37% |
Jest | 164 | 3.48% | +2.69% |
Other (please specify) | 95 | 2.01% | +0.33% |
JavaScript工程化程度在逐年增長啊,願意使用某個JavaScript測試工具的開發者也逐年增多。
最後一個問題着眼於截止到目前問卷中還沒有說起的一系列工具的使用狀況及其使用體驗,本題的原問題爲請指出你對於下述前端工具的使用體驗。
Never Heard of | Heard of/Read About | Used a little | Feel Comfortable Using | |
---|---|---|---|---|
Bower | 2.52% (119) | 21.34% (1,006) | 33.96% (1,601) | 42.18% (1,989) |
NPM | 1.76% (83) | 4.01% (189) | 14.15% (667) | 80.08% (3,776) |
Yarn | 21.40% (1,009) | 50.56% (2,384) | 14.32% (675) | 13.72% (647) |
Babel | 7.15% (337) | 29.20% (1,377) | 24.16% (1,139) | 39.49% (1,862) |
Yeoman | 11.56% (545) | 41.53% (1,958) | 33.47% (1,578) | 13.45% (634) |
TypeScript | 6.68% (315) | 60.87% (2,870) | 19.53% (921) | 12.92% (609) |
上述的工具中最爲著名的當屬NPM,差很少80.08%的開發者表示用起來仍是很爽的,而Bower與Babel則不相上下。另外須要注意的是,雖然Yarn推出不過數月,已經有超過78%的開發者表示已經嚐鮮過了。而對於Yeoman, TypeScript 以及 Yarn 這幾個工具的使用滿意度尚不是很高,大概都在12%~14%左右。