上海 2017 JSConf 大會已經結束,整理的兩天大會實錄以下:javascript
首先是開場演講,主要介紹了 JSConf 的一些往年活動以及所取得的成就,JSConf 在中國已經舉辦了 6 年,80 多個講師參與。前端
簡短的介紹以後,第一場主講就開始啦。第一場講的是 Programming the Universal Future with next.js。vue
首先一個大新聞就是 next.js 3.0 發佈啦!!!java
先介紹了 now,一行命令搞定你的部署。一個很是不錯的工具。node
now 支持 static projects、package.json(node 項目)、Dockerfile 項目配置部署。react
提出一系列開發中會遇到的需求:自定義 URL,服務端渲染、實時日誌。es6
咱們能用一個命令來解決這些需求嗎?答案是是的,那就是 nextweb
1.安裝正則表達式
2.建立一個頁面chrome
3.使用 next
命令啓動,直接搞定手工。
啓動以後無需配置直接具備如下功能:
現場代碼演示,用了一個很酷的終端 —— Hyper,也是他們團隊作的喲。
並提供了一個新的 API —— getInitialProps 用於異步加載數據。
現場展現了使用 next.js 開發的一個在線案例 —— next-news.now.sh
next.js 中提供了一個很是有用 head 組件。你能夠在這個組件內寫任何你須要添加的東西,好比是 link 一個樣式,控制頁面的 Title 。
典型的開發流程是:加載代碼 —— 加載數據 —— 渲染頁面。
有了 next.js 就能夠很輕鬆的作服務端渲染,進一步提高頁面體驗。
服務器端渲染能夠實現首屏秒開,而且能夠函數式的懶加載代碼。
想要了解更多信息能夠查看如下連接喲:
這一場演講乾貨滿滿,做者想要表達的內容也不少,總結了 web 開發領域的早期模式以及現代開發的趨勢。感興趣的同窗能夠直接查看做者的 幻燈片。
Hax ,一個寫了 20 年 JS 的人,有不少演講。並調侃了明年的演講計劃
對比了各個瀏覽器和 babel 之間對 ES6 的支持程度以及演進時間過程。到 2016 年 3 月份,chrome 幾乎所有實現了全部標準,形勢一片大好。
只有 proper tail calls 尚未支持。其餘廠商沒有支持的緣由是對這一特性有其餘意見,並提出了新想法 STC。
Array.prototype.values() 方法已經實現了,只是沒有默認開啓,緣由是在舊應用中可能存在兼容性問題。
已經幾乎所有支持。
ES6 已落地,ES7+ ready
以前的語言規範像是憋大招,五年半憋出了一個大版本,廠商集中實現特性。
如今的策略是細水長流,根據提案推動實現,每一年 6 月份左右發新版本,並將版本號按年份命名。
從 stage 0 => 4,主要過程以下:
Strawman => Proposal => Draft => Candidate => Finished
核心是 正式版本發佈前至少有兩個實現
**
乘方tips:
[NaN].indexOf(NaN) // -1
[NaN].includes(NaN) // true複製代碼
函數傳參和調用時支持尾逗號,在參數比較複雜時很是好用。
f(
a,
b,
c,
)複製代碼
回想起了 left-pad 事件,如今有標準支持啦。
Worker 之間是經過消息進行通訊,如今能夠共享內存了。
Worker 其實就是相似線程。Worker 的通訊是消息傳遞的,message事件傳遞的。通常多線程編程裏面是共享內存。
RTC ,run to completion,JS函數從頭運行到底,通常都不會被打斷的。JS 是使用 run to completion 語意的語言。在增長 Async/Await 打破了run to completion 語意,可是仍是可控的,只在標識了 Async/Await 的地方可能會有變量的改變,其餘沒有標識的地方還都是 run to completion 可控的。SharedArrayBuffer 也同理。在 JS 中默認全部變量都是『線程安全』的,只有在 await 或建立 SharedArrayBuffer 的地方不是。
node.js 沒有 worker,不過node.js開發組已經考慮會加入相關的 API。
目前的使用方式是經過 babel 等方式編譯爲 script 而後運行的。
HTML 規範已經加入了 <script type="module">
用於支持 ESM 實現。還可使用 nomodule
作兼容處理。 Safari 10.一、Chrome 6一、Edge 15+、 已經支持。
引伸出 ESM 在 Node 中實現時面臨的一些問題。
動態加載
支持私有屬性
上週新提出的提案:Pattern Match
WebAssembly:web 上的彙編語言
編譯的目的:爲了讓代碼變得更小。
從源代碼如何到目標代碼:
源代碼 - 抽象語法樹 - 編譯 - 壓縮 - 目標代碼
常見的壓縮器:
早期,文件拼接 + 文件壓縮
bundlers: 拆分模塊進行打包,打包之後會產生新問題,難以壓縮。
介紹了 rollup 的解決方案。
編譯也會讓代碼變得更快。
以 React 爲例舉例說明在編譯階段的模板優化。 babel-react-optimize
目前在編譯時優化只是一個起步階段,還大有發展空間。
簡要的介紹了歷史以及目前的狀態
目前大可能是基於 requestAnimationFrame + setState 實現的,官方提供了一個性能更好的 Animated 庫,是基於 requestAnimation + setNativeProps 實現。
社區提供了更好的解決方案 Native Animated:
使用 useNativeDriver: true 直接啓用 Native Animated。
缺陷:
只支持 transform, opacity, 不支持 flex, position 等屬性
解決方案:
導航的問題,社區目前已有的解決方案
幾個重要的特性介紹
還支持裝飾器和註解。
爲何使用 Angular
Angular 已經不是一個框架,而是一個平臺。
三個支柱:
Angular 的核心
Angular 變化檢測
Immutability & Observable
Angular 周邊庫
更小、更快、更方便的去使用
簡單介紹了 Ionic Framework。
NativeScript 跨平臺原理以下:
Ruff 是一個支持 JavaScript 開發應用的物聯網操做系統。
直接現場演示 Demo。
(就問你這些代碼像不像 jQuery? )
開發高效,而非執行高效。
Ruff 提供了很方便的 UI 界面,手把手教你怎麼鏈接電路。
傳統方式:
須要瞭解 GPIO 等一系列硬件基礎知識
GPIO.output(11, GPIO.HIGT)複製代碼
Ruff
$('#light').turnOn()複製代碼
從生產視角拆分紅了三層:
聽完 Ruff 的演講,終於能夠用 jQuery 給孩子寫玩具了!
本系列筆記是現場記錄的,比較倉促,有些地方會存在誤差或理解錯誤,還請關注官方後續發佈的講師 PPT 和大會視頻。
JSConf 第一天的內容就這麼多了,想要了解更多次日的乾貨,請持續保持關注喲。
整理者 @根號三、@一縷殤流化隱半邊冰霜