[Day 1] 據說你沒來 JSConf 2017?

上海 2017 JSConf 大會已經結束,整理的兩天大會實錄以下:javascript

首先是開場演講,主要介紹了 JSConf 的一些往年活動以及所取得的成就,JSConf 在中國已經舉辦了 6 年,80 多個講師參與。前端

第一場 Programming the Universal Future with next.js

簡短的介紹以後,第一場主講就開始啦。第一場講的是 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 開發

這一場演講乾貨滿滿,做者想要表達的內容也不少,總結了 web 開發領域的早期模式以及現代開發的趨勢。感興趣的同窗能夠直接查看做者的 幻燈片

第三場 後 ES6 時代的 JavaScript 語言

Hax ,一個寫了 20 年 JS 的人,有不少演講。並調侃了明年的演講計劃

支持度

對比了各個瀏覽器和 babel 之間對 ES6 的支持程度以及演進時間過程。到 2016 年 3 月份,chrome 幾乎所有實現了全部標準,形勢一片大好。

只有 proper tail calls 尚未支持。其餘廠商沒有支持的緣由是對這一特性有其餘意見,並提出了新想法 STC。

Array.prototype.values() 方法已經實現了,只是沒有默認開啓,緣由是在舊應用中可能存在兼容性問題。

ES7+

已經幾乎所有支持。

ES6 已落地,ES7+ ready

以前的語言規範像是憋大招,五年半憋出了一個大版本,廠商集中實現特性。

如今的策略是細水長流,根據提案推動實現,每一年 6 月份左右發新版本,並將版本號按年份命名。

從 stage 0 => 4,主要過程以下:

Strawman => Proposal => Draft => Candidate => Finished

核心是 正式版本發佈前至少有兩個實現

ES7+ 特性

** 乘方

Array.prototype.includes()

tips:

[NaN].indexOf(NaN) // -1
[NaN].includes(NaN) // true複製代碼

尾逗號

函數傳參和調用時支持尾逗號,在參數比較複雜時很是好用。

f(
    a,
    b,
    c,
)複製代碼

object.values() && object.entries()

String.prototype.padStart() && String.prototype.padEnd()

回想起了 left-pad 事件,如今有標準支持啦。

Async function

Shared memory and atomices

Worker 之間是經過消息進行通訊,如今能夠共享內存了。

Async / Await

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。

ESM: ES 模塊規範

目前的使用方式是經過 babel 等方式編譯爲 script 而後運行的。

HTML 規範已經加入了 <script type="module"> 用於支持 ESM 實現。還可使用 nomodule 作兼容處理。 Safari 10.一、Chrome 6一、Edge 15+、 已經支持。

引伸出 ESM 在 Node 中實現時面臨的一些問題。

  1. 若是區分
  2. 模塊相互加載間的問題
  3. dirname && filename 變量問題

將來新特性

import()

動態加載

數組和對象的展開運算符

正則表達式的一些特性

global 變量

Class 特性擴展

支持私有屬性

上週新提出的提案:Pattern Match

WebAssembly:web 上的彙編語言

第四場 前端工程中的編譯時優化

編譯的目的:爲了讓代碼變得更小。

從源代碼如何到目標代碼:

源代碼 - 抽象語法樹 - 編譯 - 壓縮 - 目標代碼

常見的壓縮器:

  • colsure compilder
  • uglifyJS
  • babili
  • butternut

早期,文件拼接 + 文件壓縮
bundlers: 拆分模塊進行打包,打包之後會產生新問題,難以壓縮。

介紹了 rollup 的解決方案。

編譯也會讓代碼變得更快。

以 React 爲例舉例說明在編譯階段的模板優化。 babel-react-optimize

  • Svelte 框架,徹底依賴於編譯的框架。
  • Relay Modern: pre-compile GraphQL Queries & Schemas。
  • Prepack: 將編譯時優化推動一個新高度。
  • Rakt:在應用層面進行編譯時優化

Vue 中的編譯時優化

  • Hoisting Static Trees
  • Skipping Static bindings
  • Skipping Children Array Normalization
  • SSR: optimizing Virtual DOM render functions into string concat.
  • SSR: inferring async shunks: 分別作 client build 和 server build
  • SSR: inlining Critical CSS

一些新想法:

  • 在 Vue 編譯時分析 APP 中沒有用到的部分
  • 編譯時分析 CSS 並處理爲原子類 Atomic CSS

目前在編譯時優化只是一個起步階段,還大有發展空間。

第五場 學習 React Native 你須要知道的一切

簡要的介紹了歷史以及目前的狀態

RN 爲何這麼流行:

  • 熱更新
  • 使用現代 web 技術開發移動端
  • 跨平臺

缺點:

  • Breaking changes 太多
  • 文檔不易理解,致使學習成本高
  • Navigation:導航組件問題校對

Keep improving:

  • 安卓性能
  • Nodes
  • FaltList / SectionList
  • yoga, metro-bundler
  • Road map, Monthly meeting

原生動畫

目前大可能是基於 requestAnimationFrame + setState 實現的,官方提供了一個性能更好的 Animated 庫,是基於 requestAnimation + setNativeProps 實現。

社區提供了更好的解決方案 Native Animated:

使用 useNativeDriver: true 直接啓用 Native Animated。

缺陷:
只支持 transform, opacity, 不支持 flex, position 等屬性

解決方案:

  • layout -> transform

導航的問題,社區目前已有的解決方案

調試工具

  • Chrome Dev Tools
  • React Dev Tools
  • React Native Debugger
  • Visual Testing

State 管理

  • Built-in state
  • Redux
  • Mobx
  • Mobx State Tree
  • dva

建議

第六場 TypeScript, Angular 和移動端的跨品臺開發

什麼是 TypeScript

TypeScript 類型系統

  • 編譯器
    • 基於 tsconfig.json 配置文件
    • 靜態類型檢查和代碼重構

特性

幾個重要的特性介紹

TypeScript interfaces 接口

TypeScript Typing

  • --strictNullChecks
  • any:任何類型

還支持裝飾器和註解。

TypeScript 在國外已經很是流行了

爲何使用 Angular

Angular 已經不是一個框架,而是一個平臺。

三個支柱:

  • 核心模塊
  • 程序庫
  • 工具

Angular 的核心

Angular 變化檢測

Immutability & Observable

Angular 周邊庫

  • Angular Router
  • Angular Animation
  • Angular Material
  • Angular Tooling
  • Angular Universal

Angular 的將來

更小、更快、更方便的去使用

移動端的實現

簡單介紹了 Ionic Framework。

NativeScript 簡介和原理

NativeScript 跨平臺原理以下:

第七場 Ruff 應用開發

Ruff 是一個支持 JavaScript 開發應用的物聯網操做系統。

直接現場演示 Demo。

(就問你這些代碼像不像 jQuery? )

在作 Ruff 時的一些思考

開發高效,而非執行高效。

不會插板子?

Ruff 提供了很方便的 UI 界面,手把手教你怎麼鏈接電路。

現代程序設計語言

  • 程序設計語言:JavaScript
  • 內存管理:垃圾回收
  • 測試:自動化測試框架
  • 包管理:Ruff 軟件倉庫

面向應用的抽象

傳統方式:

須要瞭解 GPIO 等一系列硬件基礎知識

GPIO.output(11, GPIO.HIGT)複製代碼

Ruff

$('#light').turnOn()複製代碼

抽象級別

提供生產支持

  • 設備寶 Ruff PI

從生產視角拆分紅了三層:

  • code
  • Layout
  • Hardware

Ruff 2.0

聽完 Ruff 的演講,終於能夠用 jQuery 給孩子寫玩具了!

本系列筆記是現場記錄的,比較倉促,有些地方會存在誤差或理解錯誤,還請關注官方後續發佈的講師 PPT 和大會視頻。

JSConf 第一天的內容就這麼多了,想要了解更多次日的乾貨,請持續保持關注喲。

次日筆記連接

整理者 @根號三@一縷殤流化隱半邊冰霜

相關文章
相關標籤/搜索