整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          冰與火之歌:JavaScript 的困境與挑戰

          近幾年以來,伴隨著各個端平臺的迅猛發展,以 TypeScript、Swift、Kotlin 和 Dart 為代表的新一代應用編程語言紛紛浮現。群雄環伺之下,JavaScript 也在不斷演進。在今天正在深圳召開的 GMTC2019 全球大前端技術大會上,360 高級前端架構師賀師俊發表《JavaScript 的困境與挑戰》的主題演講,分析 JavaScript 目前面對的問題以及下一步的發展趨勢。

          JavaScript 的時代變遷

          我從 1998 年就開始寫 JavaScript 了,那時候做的是 IE4,在座很多人可能沒有用過這個東西。所以我經歷了整個時代的變化。

          • 1995 年到 1999 年,是前 ES3 的時代;
          • 2000 年到 2010 年,是 ES3 的時代,我們在整個開發當中使用的都是 ES3 的版本;
          • 2008 年到 2016 年,是 Harmony 時代,今天我們基于 JavaScript 的開發,主要工具也好、方式也好,都是在 Harmony 時代積累下來的;
          • 2014 年到 2020 年,就已經進入了 ES6/Babel 的時代,Babel 在里面扮演了非常重要的角色,使我們可以在生產環境里面去使用 ES6 的特性;
          • 最后一個是我個人的預期:我認為我們下面新的時代,可能就是 TS、JS 共同構成的生態新時代。

          在過去十多年里面,我經常出來講 JavaScript 的內容,2010 年我就講過 ES5 的話題,我當時對 JavaScript 的發展做了判斷:發展方向可能有三個:API 的擴展和標準化;通用化;還有適應于 PITL(programming-in-the-large)。

          2014 年我也做過演講,當時對 ES6 做了一些總結:

          • Module 使得 JS 生態系統能重新統一;
          • Module / Class 等讓 JS 更適合大型編程;
          • Promise 等將最佳實踐標準化;
          • Generator / Proxy 等提供了現代語言所需的重要設施;
          • Arrow function / Destructring 等不僅是語法糖,而且填了長期以來的一些坑。

          在 2015 年到 2017 年,我做過一個演講,題目叫做《JS——世界第一程式設計語言》。在這個演講里面,我特別提到:根據當時在推特上的統計,有 33% 的人直接在生產環境使用 Babel stage0/1 presets。

          傳統上 JavaScript 是一個非常難以升級的語言,因為要保持線上兼容性,但是有了 Babel 之后,就變成了永遠在使用最新特性。從生態上來講,JavaScript 有瀏覽器,有非常多的大公司一起在這個委員會里,有世界上最大的開發者生態。

          為什么會覺得 JavaScript 學不動了?

          我為什么把這個拿出來說一下呢?之前的演講,我覺得其實比較樂觀,某種意義上是立了 flag。但當時 JS 已經有一些隱憂浮現了,最直接的體現是什么呢?就是所謂 js fatigue——”學不動了“。不單單包括語言,框架、工具也不斷地改變,我們會覺得要學的東西很多。

          當然如果大家看最近一兩年會發現框架也好、工具也好,整個演進已經變慢了,已經穩定了、成熟了,如果今天我還說學不動的話,很多情況下可能會指語言本身。比如 JavaScript 一直在加新語言特性,2015 年之后,每一年都會發一個新的帶年份版本的標準,每一年大概會加六到八個新的提案。包括 ES2020 也已經定了,大概會增八到九個新特性。所以這個并沒有慢下來。

          那為什么我們會有所謂的 JavaScript 學不動的感覺?我理解這個事情是一個邊際效用下降。原本你學一個東西馬上會給你帶來非常大的收益,但是現在你好像每學一個新的框架,或者學一個新的語言特性,在收益上可能要打一個問號。

          如果你學的東西并不能給你直接帶來一個非常強的收益,包括你在生產環境里面,你覺得也不是很多地方能用到它,那么它的整個性價比可能就會下降,所以你就會發出一個好像學不動的感嘆。

          2020:JavaScript 的困境與挑戰

          所以我今天的內容,其實就是在反思,經過狂飆后,我們停下來看一看我們眼前所遇到的問題。在今年 6 月份,也就是在北京站的 GMTC 上我做過演講,叫做《前端開發編程語言的過去、現在和未來》,講了 TS、JS 未來面臨的挑戰。簡單來講就是兩句話:TS 背著 JS 的包袱;JS 背著歷史的包袱。

          很多人認為我只要 TypeScript 就好了,但是大家要理解,TypeScript 在設計目標上要全兼容,所以如果 JavaScript 有什么問題的話,TypeScript 也跑不了。

          JavaScript 的新包袱和歷史包袱

          JavaScript 大家知道,背著歷史包袱。歷史包袱不僅指老的問題,今天也改不掉,而且更重要的是,因為 JavaScript 的歷史包袱導致它有一些新的設計,仍然會增加新的包袱:

          第一個,JavaScript 的應用場景非常多,導致 JavaScript 的開發者社區非常復雜,有非常巨大的差異性。當我們要去對 JS 進行改進或者要加入新東西的時候,不同社區的想法、需求可能會不一樣。怎么做 tradeoff?非常困難。

          另外,還有像委員會語言的弊病,這個不用諱言比如 C++ 就是明顯的委員會的語言,委員會的語言因為參與的人多,不像很多由公司主導的語言,本身的發展比較有秩序。

          歷史包袱我們可以展開講一下,歷史包袱簡單來講,最基本的就是,因為 JavaScript 用了這么多年,不能破壞它的兼容性,而且在所有語言里面是最沒有辦法改的——我們有那么多的網站跑到線上,加了任何東西都不能把原本的網站搞掛了,所以只能增加特性解決以前的問題。

          比如箭頭函數,它加了之后解決了很多以前 ES3 時代的函數里面的問題,也就是增加了一個所謂的 Lexical this,但是不可避免的是使 this 的語義變得更加復雜。

          另外一個例子,因為我們這么多年以來,整個 JavaScript 的發展,使得我們在真正的工程當中,會存在幾種不同的東西:一個叫工程方案;第二個叫事實標準;第三個才叫真的標準。這三個東西會長期共存,所以使得整個生態里面會有些復雜的問題。

          對于歷史包袱,我們現在的解決方法是 Polyfill 的方案。Polyfill 有廣義 Polyfill 和狹義 Polyfill,到底什么叫 Polyfill?Polyfill 是已經成為了標準了,然后我們把它做出來,在沒有實現的瀏覽器上可以用,這才叫 Polyfill。如果你是一個實驗性的實現,你就不應該去修改 global 和 prototype 上的東西,因為它其實會造成很多潛在的問題。但是如果已經是一個標準了,那么去改并沒有什么錯。但是這個問題就是,很多開發者并不能區分這個,而且在我們的日常當中,當我們講 Polyfill 的時候也沒有刻意區分,但就會在生態中造成這樣一個非常嚴重的問題。

          Babel 帶來的挑戰

          接下來講 Babel,Babel 是對生態非常重要的東西。大家知道我們之前都用 presets,在 v7 的時候被取消了。主要問題是我們會無意中在 Production 中使用了 unstable features,當它發生改變,如果你在生產環節里用的話,對你本身來講就會是非常大的挑戰,對于標準本身來講也會有很大的挑戰。甚至到 stage3 都會有這樣的問題。但這個事情是雙刃劍,有很多東西你只有在真正的生產環境里面才能得到真的反饋,不是說光寫一些 demo 就可以看出來什么問題。

          第二個問題是,很多人說我今天寫的不是 JavaScript,而是 BabelScript,這些特性是自己定制的語法特性。這里面有個特別的例子,是 babel-plugin-macros,這個插件非常好,原本要單獨寫插件,現在可以用 macros 去寫,它相對是更顯性的方式,明確的知道我這里用了自定義的東西。但是本質上,當你導入一個像函數的東西,它其實并不是函數。這個仍然存在一個挑戰,對很多開發者來講,是否理解是函數和不是函數的差異?

          再看下 TypeScript,TypeScript 的設計原則是只有到 Stage3 才可以,TypeScript 是從 2012 年就誕生了,2012 年 ES6 還沒有定案,所以 TypeScript 當年的很多特性都是 ES6 還沒有定案的。如果我們看一下,這是當年 TypeScript 增加的東西,本質上 TypeScript 只是加了類型,但是在當年,因為 2012 年 ES6 還沒有定案,除了類型之外,這些東西是加進去的東西。

          這些東西稍微看一下,arrow function、class 沒有什么問題,es module 就有問題了。它的語法不一樣,這已經開始有坑了。decorator 也有問題,這是現在的提案,和 TypeScript 的提案非常不一樣,所以 TypeScript 需要一個編譯開關才能使用,這也是 decorator 不太好的狀態。包括最后這兩個,private property 和 public property 語法語義和現在的 stage3 的 class fields 完全不一樣,對 TypeScript 來說非常痛苦。

          然后我們再來看一個例子,叫做 ESLint。它采用的方針更加保守了,它只是在 Stage4 的時候才會做跟這些新特性有關的新規則。這種方式也避免了前面很多問題。

          ESLint 會導致兩個問題:第一個我們很多人已經在做更早的 Stage3 的東西,但 Stage3 的東西也需要保護,而且更需要保護;第二個問題就是,在制訂標準的時候,缺乏 lint 社區的反饋。

          有一個有趣的事情是,在整個 ES6 的發展當中,很多的提案是遵循一個叫做 Maximally Minimal 的設計哲學,最大化的最小化,我們只加那些最最重要的東西,如果翻譯過來的話叫先解決溫飽再考慮小康,所以 ES6 很多東西確實解決痛點,但很多時候 ES6 的東西并不能完全滿足你的所有需要。

          比如 ES6 加了 Map 和 Set,但這兩 API 只能滿足你最基本的需求。所以這也是一個雙刃劍,好的地方是,我們只有通過這樣的設計,才能在當時那么快的把 ES6 做出來,否則可能永遠都做不出來。到底怎么樣才是真正滿足所有人需求?這個事情定義不清楚。

          今天來講,我們會發現,很多時候我們溫飽都已經解決了,現在大家討論的都是小康問題。怎么讓特性用得更好更爽。但這個問題就是前面講的,因為開發者社區非常復雜,每個人的需求都不一樣,最大的問題是誰能代表開發者?這其實一個非常難以回答的問題。

          舉個例子——Map.prototype.upsert(),看名字猜得出來嗎?估計猜不太出來。我個人認為只有非常有經驗的開發者,才可能比較需要這個東西。一般的開發者其實是不是真的需要,要打個問號。同時對新手來講,理解的成本也比較高。所以這里有個問題,我們怎么衡量成本和收益?其實是非常困難的。

          最后,我講一下有爭議的事,比如說我們現在對 Top-level Await、Class fields 這兩個提案都不太滿意,當然我們技術上可以有很多的討論,但實際上這個事情一句話講就是改革進入深水區,就是好做的都做完了,剩下的都是難搞的。這兩個其實都是 ES6 時代遺留至今的問題。

          最后再舉一個例子——Pipeline Operator?,F在 Pipeline 有兩種不同的競爭提案,第一種叫 F# Style,另外一種方式叫 Smart style。所以這其實是兩難選擇,我們是希望更符合 FP 的主流還是更普適現有整個 JavaScript 的生態,這是非常難做的選擇。

          還有 Binary AST,也是一個提案,它相當于字節碼,它有個很大的好處就是整個加載速度會非??斓奶嵘?。所以這樣一個提案肯定是我們所有人都很喜歡的,特別是做 Web 的人會非常喜歡。但是這個現在也處于一個比較難推進的狀態,為什么呢?講一個很簡單的原因就是,當你有了 Binary AST 之后,所有語言特性都得考慮,在這里面怎么把它加進去,字節碼里面怎么把它加進去,所以困難程度直接翻番了。

          大家看到很多問題都是有兩面性,這是改革進入深水區遇到的很多問題。包括不同平臺的需求,比如 Web 和 Node 的平臺,這兩個平臺的需求不一樣。

          還有性能和動態性的矛盾,我們做一個東西既希望性能好,又希望符合 JavaScript 的傳統,這里面最簡單的例子就是 decorator。所以會遇到非常多的矛盾問題。

          JavaScript 的轉折點:未來何去何從?

          講了這么多,可能最重要的問題就是:到底我們整個發展有沒有 Roadmap?答案是沒有。這就是委員會里面的一個問題,進一步來講,它也沒有明確的主導者,如果沒有 Roadmap,全局上怎么解決這個事情就不好說了。

          所以我們今天進展到這樣一個地步——JavaScript 是非常成功的語言,但到現在是一個轉折點,我們要停下來看一看:它再往下怎么樣發展才會更好?

          嘉賓介紹:

          賀師?。ňW名 Hax),360 高級前端架構師,十多年來一直活躍在前端和 JavaScript 社區。對多項 Web 標準有微小貢獻,對 Groovy 語言并間接對 Swift 語言有微小貢獻,近年來參與了諸多 ECMAScript 新草案的討論。2019 年 7 月起成為 360 的 TC39 代表。

          一篇:股票高手必修課程和過程(六):不看一日漲跌,研究關鍵位置洗盤

          有一些人特別喜歡漲停板,以每天追逐漲停板為能事。而且提出了一大堆的方法、技巧。比如說什么“首板”,“二板三板”之類不一而足。

          我并不反對追求漲停板。畢竟這是一個來錢快的活兒。但是如果不知道漲停板的真正意義和原因,就是盲目的去看板就追,則這種專做漲停板,一定是快速自殺技。

          沒有無緣無故的愛也沒有無緣無故的恨。

          同樣的股票也是,沒有無緣無故的漲,也沒有無緣無故的跌。

          出現漲停板你得知道為什么。

          漲停板從意義上就分為四種:一、見底。陰陽發生轉換了。跌到頭了就以漲停板為標志,說明到了超跌區域,出現逆轉確認了。二、快速震蕩洗盤。三、建倉完畢、開始拉升。四、出貨。

          第一種,是當出現一段超長、超跌的走勢后,物極必反,跌不動了。這種漲停板后期不會有大動作,最大可能是出現相當一段時間的橫盤走勢。但是也不排除之前就是一大段橫盤后,開始拉升。

          比如600238的11月1日的首板。000838的11月15日的首板。

          第二種是莊家正處于建倉階段。出現漲停板是為了抬高成本。這樣的漲停板出來后,后面走勢基本上就是開始了震蕩。比如600636的10月14日。

          第三種就是建倉完畢,開始走出一波拉升了。比如

          002789的4月27日。

          第四種就很簡單了。為了出貨。

          圖就不上了。最明顯的例子就是600051的11月29日的漲停板。

          既然我把漲停板出現點的理論做了歸類,那么你應該知道在什么位置出現漲停板,結果是怎么樣的了吧。

          那么你究竟要選擇什么位置的漲停板,應該做到心中有數了吧。

          出現漲停板我們一定要仔細的去研判它。首先就要定義出它目前所處的位置。是建倉階段?還是洗盤后的突破?或者是快速出貨?看清楚了它的位置,再去說其他的。

          我想你如果讀懂了這篇文章,那么就應該不會輕易的陷于一追就跌的窘境了。

          {本文為理想論壇博主「善變十字星」的帖子,轉載請注明出處。

          原文鏈接: https://www.55188.com/thread-10385601-1-1.html}

          下一篇:股票高手必修課程和過程之(八):長線賺大錢但是你得會選(1)

          多網友都說自己的手機很容易自動關機,一有這情況就埋怨是手機的質量、或品牌差。其實,手機自

          動關機有時并不“一定”是你的手機質量出現了問題,而是其它的一些原因,我們一起來看看是什么導

          致了手機自動關機。

          一般自動關機究其原因可能有以下幾種可能:

          1.鋰電內的保護電路作用過度靈敏,因此電流一大就斷電。

          2.電池本身已老化。

          3.電池接觸位的金屬片有污物,造成電源接觸不良。

          4.電池與手機之間的接合位容易松動。

          5.自己設置了自動關機,到設置里自己查看下。

          假如檢查后,發現是前兩項問題,那么一定要送到專門維修店去修理。假若是后兩項問題,只是電池金

          屬片臟污氧化所致,只要用膠棒將之拭擦清潔,情況將會得到改善。在電池與手機之間墊上紙皮或膠片

          ,也可以解決電池松動引起的接觸不良的問題。

          其他原因分析參考資料:

          http://jingyan.baidu.com/article/ed2a5d1f3ad9de09f6be17d0.html

          1、系統固件兼容性問題

          手機是硬件,而系統固件是系統軟件,系統軟件負責調度硬件運行,并提供和用戶的人機交互。我們知道蘋果的ios系統是封閉的,有的人喜歡破解掉ios系統的限制而進行越獄,可以下載免費的破解APP應用軟件和蘋果公司禁止的應用軟件。由于ios系統固件的部分功能被改寫,影響了原有系統固件與手機硬件的兼容性,越獄后的系統固件導致蘋果手機發生自動關機的可能性是存在的。這類情況的解決辦法,要么重新刷機越獄,要么刷會蘋果官方的系統固件。

          2、應用軟件插件兼容性問題

          上面也提到蘋果的IOS系統是封閉的,所有在IOS系統運行的APP應用軟件,必須經過蘋果官方的認證測試,只有測試通過后的APP應用軟件才能在蘋果的APPstore中供其他用戶下載安裝使用。一些影響蘋果系統或用戶安全性的APP應用軟件,蘋果公司禁止上線。而越獄過的蘋果手機缺可以安裝這些APP應用軟件,比如說:界面美化類,通訊錄管理工具,短信管理工具,文件管理工具等APP應用插件。由于這些插件沒有經過第三方的嚴格測試,可能會導致系統出現兼容性問題,而引起蘋果手機自動關機。這類情況的解決辦法,把最近安裝的APP應用插件卸載掉。

          3、硬件問題電池漏電

          iphone手機的充電器是電壓5V,充電電流是1A,而ipad的充電器電壓也是5V,充電電流是2A,長期使用ipad充電器給iphone手機充電,會損傷iphone手機的電池。如果用非原裝的充電器,充電電壓和充電電流控制的不嚴格的話,也會損傷iphone手機的電池,這樣iphone手機的電池耐用度會比較差,電量消耗很快,明明看著有電呢,一會兒電量就消耗光了,遇到這種情況,采用DFU模式啟動手機當然是無法啟動,只能更換蘋果手機的電池。

          4、硬件問題主板電源IC

          電源IC是主板上一個用于蘋果手機供電用電的邏輯控制單元。如果邏輯控制單元出現計算錯誤,明明手機電池有電了,在主板電源IC這層缺認為手機電池沒有電量了,而自動關閉手機。這種情形,可以采用DFU硬啟動模式,重新啟動手機。當手機用了一段時間,主板電源IC又出現計算錯誤的情況,則再次自動關機。遇到類似的情況,如果在質保服務期內,找官方售后免費進行整機更換,如果已經過了質保服務期,只能找維修站進行維修。


          主站蜘蛛池模板: 日韩一区二区视频| 国产人妖视频一区在线观看| 日韩亚洲AV无码一区二区不卡| 无码少妇丰满熟妇一区二区 | 久久99精品免费一区二区| 久久精品国产一区| 国产aⅴ一区二区三区| 亚洲另类无码一区二区三区| 国产成人无码一区二区三区 | 精品一区二区三区在线视频观看| 国产高清在线精品一区| 久久精品亚洲一区二区| 亚洲日韩激情无码一区| 国产福利一区二区在线视频 | 精品视频一区二区三区| 日本一区二区三区不卡视频中文字幕 | 国产剧情国产精品一区| 一区二区三区视频免费观看| 国产裸体舞一区二区三区| 国产乱码精品一区二区三区香蕉 | 国产一区二区中文字幕| 伊人精品视频一区二区三区| 日本精品一区二区三区在线视频 | 一区二区三区无码视频免费福利| 天码av无码一区二区三区四区| 国产精品一区不卡| 国产成人一区二区三区电影网站 | 国产情侣一区二区| 久久中文字幕无码一区二区| 丰满爆乳无码一区二区三区| 色国产在线视频一区| 国产在线无码视频一区| 亚洲国产一区二区视频网站| 成人一区二区免费视频| 国偷自产一区二区免费视频| 青青青国产精品一区二区| 91精品福利一区二区| 国产成人精品一区二三区| 精品人妻一区二区三区毛片 | 欧美日韩精品一区二区在线观看| 无码日韩人妻av一区免费|