819跑到廣州參加了第四屆的FEDAY,有不少乾貨也有不少安利,趁熱打鐵整理一下筆記。 如下內容既是記錄,又是我的的一些小想法,有不一樣的見解歡迎隨時討論~javascript
每次FEDAY基本上是網紅們的聚會,本次見到了hax(賀師俊),CatChen(陳廣琛),張克軍,Aimingoo(周愛民),還有各業務線的負責人,Uber數據可視化團隊的何珊,京東商城的謝曉立,阿里雲的杜石,還有特邀嘉賓微軟和webpack的開發者Sean Thomas Larkin。下面是個人記錄整理,完整的內容以後大會官網會放出完整的視頻和ppt。html
PPT地址前端
先拋結論:類繼承的原理就是原型繼承java
什麼是類?類的簡單定義就是:有一個過程,在這個過程能產生一個對象的實例,這個過程就是一個類。react
但討論繼承,在JS裏最簡單的繼承方式就是原型繼承。在JS1.1中,官方定義了原型繼承的方式。原型繼承是經過對象上的原型屬性指向別的實例,達到鏈式訪問的繼承方式。以下的方式:webpack
// 父類
function Base(name) {
this.name = name;
}
Base.prototype.getName = function(){
console.log(this.name);
}
// 子類
function PriBase(name, type) {
Base.call(this,name,type)
this.type = type;
}
PriBase.prototype = new Base()
複製代碼
到了ES5以後,引入了多個對object的屬性定義的方法,經過這些對屬性的增刪改查的方法,能夠說明幾個觀點:git
在ES6中,定義了類的繼承方式。github
class PriBase extends Base {
constructor() {
..
// super();
}
static foo() {
..
}
more(){
..
}
}
複製代碼
其中嘉賓說到一個點,在ES6進行對象函數屬性的定義時,他會標記名爲HomeObject
的內部屬性指向代表方法的歸屬對象。這個HomeObject
的指向是可變的,在類的繼承中,會調用super方法,而super方法是根據HomeObject
決定指向的對象。web
homeObj = Method[[HomeObject]];
super = Object.getPrototypeOf(homeObj)
複製代碼
因此類繼承的核心原理,就是依賴於無類繼承這一特性而實現的。算法
而後接下來引出了原子對象的概念,下面是一個理論,衍生出了元系統的概念。
ECMAScript中只有兩處說起到「Meta」這個概念,一處是說明ECMAScript的規範類型(a specification type)是用於描述和實現語言類型(language types)的元值(meta-values),另外一處則是惟一被稱爲「元屬性(Meta Property)」的
new.target
。
在介紹這個理論以前須要定義一下原子
,來構建完整的元系統。
定義:原子是JavaScript中的對象的最小單元,它是對象但不繼承自Object();以原子爲原型的對象也會被稱爲原子對象。
如上所述,JS中的對象就是一個屬性包,那麼若是爲空集時,便是最小的形態。一個沒有圓形,切自有屬性集爲空的對象,就是一個原子。
原子是能夠被建立出來的,以下面所示:
var atom = Object.create(null);
var atom = Object.setPrototypeOf(new Object, null);
複製代碼
能夠有一個方法來判斷一個元素是否爲原子,根據原子的定義不繼承自Object
:
function isAtom(x) {
switch (typeof x) {
case 'object':
case 'function': return !(x instanceof Object);
}
return false;
}
複製代碼
當有了原子,能夠繼續衍生各類其餘的概念,如元、元類型等等:
元:能產生原子(atom)的一個過程稱爲元(meta). 元類型:全部元(meta)的類型稱爲元類型(Meta types). 元類類型:元類是一個產生類(class)的過程.
今後能夠不斷引伸,建立出一套元類型系統。
感興趣的同窗能夠繼續關注周老師關於元系統的blog文章:
還有開源項目metameta
本主題是從JS中的繼承的原理出發,逐步引伸出了元類型這個概念,再逐步的擴充到整個元系統。這個思路很值得借鑑。
實話實說這部分尚未太搞懂,很期待周老師後續的blog。
做者何珊是Uber數據可視化團隊的創始人。題目顧名思義,kepler.gl是做者及團隊開源的一套數據可視化的地圖圖表,對大量地圖定位數據提供了多種圖表進行展示。
嘉賓由自身經歷出發對數據可視化的觀點進行了闡述:她認爲數據可視化分爲了四個部分:設計
,統計
,代碼
和講故事
。用數據結合一些設計手法講故事,獲得可行性的方案。
數據是冰冷的理性的,圖表是生動的感性的,將理性的數據感性化,增長動態的表現同時才能增長視覺的感覺力。從需求出發,尋找數據之間的差別化,將數據分層,來轉化爲不一樣的類型,如點圖
,熱力圖
,密度圖
等等。
同時,運用技術的手段進行框架性能的優化。由於要承載大量地圖數據,所以要從效率的角度優化框架。在CPU計算的同時,採起GPU計算輔助加強性能,例如如下幾個方面
同時把graph(圖形渲染)和reducer(數據處理)分開,對框架的擴展性有了更好的支持。
另外提出了利用GLSL Shaders
對GPU進行編程的思路。
不一樣的圖表的使用場景不一樣。一樣的數據選擇對的圖表能夠透露更多的信息。另外可視化和數據並不衝突,在目前互聯網公司的節奏,數據和可視化視圖應該同時結合,以直觀並讓人信服的方式展示數據。例如一樣是二維,若是能增長表示濃度或者時間的第三維,能夠得到不少的額外信息。
結合業務來講,這適用於積累大量數據的應用場景,好比說打車的應用場景,能夠利用當前積累的數據,作更多有效分析和轉化進行處理。
嘉賓的我的經歷頗有意思。建築設計出身,作了設計師以後發現技術老是實現不了本身設計的成果,所以又學習CS,將專業交叉拓展,並應用於數據可視化這方面,以後提煉工具開源框架,整個過程當中都很明確本身的目標,並能爲目標不斷的努力。
京東的凹凸實驗室,仍是挺有名的。再加上前一段時間推得react轉微信小程序的taro,所以對這部分期待很高。可是整體感受來講只是講了個大概和思路,並無深刻的分析這麼架構的根本緣由,我的以爲心路歷程不夠飽滿。感受更像是集團框架的一個大致介紹,下面簡單記錄下:
首先介紹了下京東商城複雜業務邏輯的背景,如PC、手Q、小程序等等業務涉及多端多平臺,須要在工具迭代
和流程優化
兩個方面去作建設。
工具迭代爲了解決兩個問題:1. 優化開發體驗。2. 進行性能優化。 所以作了前端工程化和靜態資源管理兩個方面的工做。
爲了提高開發體驗,作了如下幾點:
在性能優化方面,作了一下幾點:
而後還有造輪子的過程,例如爲了考慮兼容IE8,作了類React的前端框架Nerv。一樣爲了適應小程序的節奏,爲了適應React的開發模式,作了Taro框架。結合前端流程工具Athena最終造成如下的技術選型:
在流程迭代方面,首先是梳理原始的研發流程,作了如下方面的建設:
系統多了,業務複雜就容易出現浪費資源的狀況,須要將各個項目高效整合,他們主要是系統化
和自動化
的思路來對鏈路進行整合。
總結,統一的開發工具加通用的開發流程,覆蓋了從項目建立到上線監控的完總體系。大體介紹了京東的前端框架的進化,複雜業務的統一研發。
嘉賓講的比較寬泛,並且我的感受從角度方面略有些問題。前半部分感受是爲了完成上級KPI完成的框架的構想,例如知足各方面的兼容以及強行造輪子。能夠從目前現有結構出發,結合業務實際來聊一下如此架構的緣由及思路。以及大體介紹下不一樣解決方案的原理和解決的場景。
比較能夠借鑑的是他們對前端開發流程的抽象思路。例如業務場景很是複雜時,如何進行流程上的抽象,在每個具體的步驟如何利用現成的框架,現成不知足的時候,又如何進行造輪子的分析,是不斷擴展前端工程化方面的工做。
每一個團隊應該都是相似的解決思路,圍繞本身的業務場景提煉出一套開發流程,像京東這種大前端的框架思路,還須要集中資源去強化落地。
要是想詳細瞭解京東前端解決方案,能夠看這篇文章咱們是如何作好前端工程化和靜態資源管理。
這個主題更多的像是職業規劃方面的分享。你們的職業規劃講座聽得也比較多了,我就只羅列其中的重點吧。
首先要肯定你的興趣更多的在哪一塊。嘉賓大體分紅了三個部分:
至於前端、後端、和全棧的考慮,有一個參考標準,就是選擇你願意主動付出努力的一條路。職業道路的規劃,對職業生涯的前期有幫助,越到後期越須要全面的瞭解。
選擇對頭幾年有興趣的點出發去考慮這個問題。
嘉賓一言不合就開車。以開車爲例將職業發展劃分爲了幾個階段:
student
:明確本身的興趣,喜不喜歡駕駛體驗
new driver
:開始上手,虛心向老司機學習
experienced driver
:可以自信駕駛
courier
:以此爲生,能明確的瞭解如何從A點到達B點
trip organizer
:能解決一些額外的基礎框架問題
expedition
:不知足於現狀,有着更多的發現
這是一個頗有意思的模型,看得出嘉賓但願你們不要侷限於自身的技術領域,而能有更多的拓展。
其實職業規劃的能力,就是一個工程師成長的路程。須要不斷從專業能力出發成長,再逐步去進化產出產品和運營的sence,來去管理孵化更大的團隊。
一樣是較expedition
級別來講,須要對領導力有着更多的要求。同時,在大公司和小公司要求也不一樣。大公司不用太爲團隊所困擾,專一目標方向,戰略層面須要由縱深的眼光。小公司則要求更加全面化,從招人、找錢,到產品的不斷打磨,都是一個逐步進化的過程。
顧名思義,Hax本次的主要內容是講Javascript中跟時間有關的API。主要的內容,大體介紹了JS中Date對象的起源,以及如今常用的時間庫,以及將來最新的temporal提案。
ppt很是簡約化,下面是大體的內容介紹:
JS當時內建的Date對象是直接照搬了JAVA1.0中的java.util.Date的設計。可是這是一個有錯誤的API,在JAVA1.1中被廢棄。可是JS的Date卻一直保留下來並沿用至今。
根據各地遵循的立法不一樣,日期表達方式不一樣,會在時區方面,存在着不一樣時區秒和微妙之間的差異。
現有的Date仍有一些問題存在:
toXXXString()
的api,可是不支持自定義格式相似的問題還有一些使用上的,不符合常規認知的,好比說下面的代碼
new Date(2018, 4, 16)
// 2018-05-15T16:00:00.000Z
複製代碼
月份傳入4,生成的是五月,是由於月份從0計算的等等問題。
這是提到的時間提案,引入了CivilDate的概念,不進行任什麼時候間和時區的轉換。
hour
,minute
等屬性進行了封裝。還有其餘的新特性有待發掘。
該分享是專一於某一個特性深挖,818歷史起源和目前的發展,以及關注下一代的發展趨勢。
平常常常會使用Date,也確實吃過客服端服務端日期不一致的坑,但卻沒想過深挖一下Date的起源和現狀的緣由。這確實是一個不錯的視角。