前端開發周報:PWA 將與安卓原生平起平坐

GenieKaawir 7年前發布 | 15K 次閱讀 前端開發 前端技術

前端開發周報:PWA 將與安卓原生平起平坐、V8 團隊致力于提高 ES2015 特性性能 為InfoQ中文站特供稿件,首發地址為 這里 ;如需轉載,請與InfoQ中文站聯系。從屬于筆者的 Web 前端入門與工程實踐

新聞熱點

前端領域最新動態

  • 《PWA 將與安卓原生平起平坐》 :自從谷歌提出PWA概念之后,它就持續受到移動開發界的關注。由于其可靠、快速、融入的特性,大大提升了網頁應用的用戶友好性。近日官方博客更進一步宣布將使PWA應用獲得和原生應用同等的待遇與權限。

  • 《React Studio Public Beta 2 發布》 :React Studio Public Beta 2 發布啦,React Studio 是能夠基于類似于 React JS 這樣的組件化庫進行交互式 UI 設計的專業工具,能夠同時滿足設計師與開發者的需求。對于設計師而言,React Studio 徹底遵循了響應式與移動優先的原則,設計師能夠方便地將組件設計與應用流導出為 ReactJS 風格的 HTML/JavaScript 代碼。對于開發者而言,React Studio 是一個基于 create-react-app 模板創建的前端項目,它僅集成了必須的代碼,并且遵循了現代的開發流程,能夠輔助開發者快速構建 SPA 項目或者其他獨立組件。

  • 《ECMAScript 中可選鏈提案》 :相信每個 JavaScript 開發者都不會陌生于 Uncaught TypeError: Cannot read property 'property' of null 這個錯誤,對于空指針的檢測,特別是對象嵌套屬性的空檢測成為了不可或缺的部分,譬如: var street = user.address && user.address.street 。

  • 《V8 團隊致力于提高 ES2015 特性性能》 :最近幾個月以來 V8 團隊一直致力于提升 ES2015 新特性的性能表現 。目前現代 Web 開發中通行的做法時候用 Babel 這樣的編譯器將那些引擎尚不支持的語法編譯為傳統的 ES5 語法,譬如經常使用的擴展操作符會被 Babel 編譯為 Object.assign 形式的語法組成,這樣不可避免的會帶來性能損耗與包體體積增大。傳統的 Crankshaft 編譯器難以直接優化 for...of 這樣的語法特性,而最新的 TurboFan 編譯流則從設計上就能夠支持控制流、異常處理以及解構賦值這些特性。包括之前 Crankshaft 雖然支持但是尚未優化的生成器等等特性也都得到了優化,最后的結果表明整體的語法性能提升了兩倍多。

  • 《推ter 宣布移動 Web 技術棧遷移到 Node.js,Express,React PWA》 :近日,推ter 工程師 Nicolas 宣布 推ter 幾乎所有的移動流量遷移到了以 Node.js 為基礎的服務中(Today we moved all of 推ter's mobile web traffic (that's like, a lot) to our new web stack – Node.js, Express, React PWA.)。在過去的兩年中,推ter 移動 Web 技術棧主要是基于 Scala,Google Closure Templates 以及少量的 JavaScript。后來 CharlieCroom 開始嘗試將登出服務遷移到 JavaScript 技術棧中,并且進行了約 9 個月的線上測試,效果尚可,因此 推ter 決定全部遷移到 JavaScript 技術棧中。同時,推ter Web APP 還支持所謂的 PRPL 范式:主動推送首屏關鍵資源、僅渲染初始路由、預存其他路由、按需懶加載與創建剩余路由。

開發教程

步步為營,掌握基礎技能

  • 《HTMLReference:在案例中學習 HTML》htmlreference.io 是免費的 HTML 學習指南,它以實例的方式講述各種元素的屬性與用法,適合于入門級開發人員學習 HTML 的基本語法。

  • 《2017 前端開發手冊》Front-End Developer Handbook 2017Cody Lindley 編寫,面向每一個希望學習前端的開發者。該手冊概括地討論了前端工程化的相關實踐:在 2017 年中我們應該使用哪些前端工具以及如何學習去使用這些數據。該手冊的內容包含了 Web 技術的基礎:HTML、CSS、DOM 以及 JavaScript,以及基于這些技術構建的優秀開源項目。

  • 《基于 Vue 與 DeepStream 構建實時 CRUD 應用》 :Vue 是專注于 JavaScript UI 的漸進式庫,它提供了開發現代 Web 應用的各種先進的特性。而隨著移動互聯網的發展,實時技術也愈發重要;各種各樣的提供抽象接口的實時服務器扮演著越發重要的作用,其中 DeepStream 就是開源的、免費的并且性能表現相當優秀的實時服務器。而本文就利用 Vue 與 DeepStream 這兩個開源工具構建實時交互的應用。

  • 《現代 JavaScript 概念縱覽》 :現代 JavaScript 開發在過去幾年中經歷了迅猛的變遷,并且這種變化的勢頭毫無停滯的預兆。對于很多前端開發者而言可能還不是很熟悉那些 JS 博客或者文檔中提及的時興的概念。此文討論了很多起到媒介作用以及高級的概念,和這些概念是如何被適用于現代 JavaScript 開發中的。本文我們會討論 Statefulness 與 Statelessness、Immutability 與 Mutability、Imperative 與 Declarative Programming、Higher-order Functions、Observables、以及 FP、RP、FPR 編程范式。

  • 《一系列優秀的 Angular 2 組件集錦》Angular 2 是非常不錯的前端開發框架,而本倉庫則是一系列開源的 Angular 2 組件的集錦。這些組件包括浮層、通知、氣泡、菜單、加載指示、表格、樹、時間、圖表、地圖、無限滾動、音視頻、SVG、PDF 以及各種各樣會在表單中用到的組件。

工程實踐

立足實踐,提示實際水平

  • 《來自 MuseFinder 的 React 組件編寫實踐》 :該指南來源于 MuseFind 在多年的產品開發中總結而來的 React 實踐經驗,其包含了對于組件聲明方式、樣式類的使用、初始狀態聲明、Props 聲明、方法聲明、Props 結構、裝飾器的使用、函數式組件的聲明等等多個方面。

  • 《Vue.js 組件樣式指南》 :該樣式指南提供了一種統一架構 Vue.js 代碼的建議,其目標是達成易于開發者與團隊成員理解以及尋找東西、易于 IDE 來審查代碼并且提供幫助、易于重用開發構建工具、易于獨立地緩存與使用代碼塊。該指南借鑒了 RiotJS 樣式指南,主要還包含了以下幾個部分: 基于模塊開發Vue 組件命名 ,等等。

  • 《關于Node.js存在反序列化遠程代碼執行漏洞的安全公告》 :近日,國家信息安全漏洞共享平臺(CNVD)收錄了Node.js反序列化遠程代碼執行漏洞(CNVD-2017-01206,對應 CVE-2017-594)。攻利用漏洞執行遠程執行操作系統指令,獲得服務器權限。由于目前驗證代碼已經公開,極有可能誘發大規模網站攻擊。Node.js反序列化模塊node-serialize庫中的unserialize()函數未做安全處理,該漏洞通過傳遞調用JavaScript IIFE函數表達式的方式實現遠程任意代碼執行的效果。攻擊者可通過遠程攻擊獲得當前服務器運行環境權限,由于實際部署中node.js運行環境較多為操作系統root權限,因此可完全控制服務器主機。CNVD對該漏洞的綜合評級為“高危”。目前,相關利用方式已經在互聯網上公開,近期出現攻擊嘗試爆發的可能。不過根據 原作者表述 ,實際上這個庫在 GitHub 上一共只有 20 個 star,還有幾個是漏洞文章發布后引來的,而且下載量也是非常少。如果想要避免此類安全問題,需要解決的就是確保用戶輸入的安全。方法比如通過安全傳輸方式(內網 & 加密)傳輸序列化字符串、使用如 RSA 等簽名算法對字符串進行完整化校驗。

  • 《一次一個微優化,改進Node.js應用的吞吐量》 :本文是多個提高 Node.js 應用吞吐量的小優化技巧介紹,包括盡可能地使用聚合 IO 操作,以批量寫的方式來最小化系統調用的次數、需要將發布的開銷考慮進內,清除應用中不同的定時器、CPU 分析器能夠給你提高一些有用信息,但是并不能完整地反饋整個流程、謹慎使用 ECMAScript 高級語法,特別是你還未使用最新的 JavaScript 引擎或者類似于 Babel 這樣的轉換器的時候、要洞察你的依賴樹的組成并且對你使用的依賴進行適當的性能評測。當我們希望去優化某個包含了 IO 功能的應用性能時,我們需要對于應用耗費的 CPU 周期以及那些妨礙到應用并行化執行的因素了如指掌。本文則是分享作者在提升 Apache Cassandra 項目中的 DataStax Node.js 驅動時的一些思考與總結出的導致應用吞吐量降級的關鍵因素。

  • 《Web APP 實現水平滑頁翻頁交互效果的要點解析》 :本文是張鑫旭老師分享的起點中文網支持水平滑頁閱讀效果的實踐,其核心是利用 CSS3 column 分欄布局。CSS3 column多欄布局是支持比較早的CSS3布局方式,目前IE10+以及其他所有現代瀏覽器都支持,IE瀏覽器不需要私有前綴,FireFox和Chrome雖然現在也不需要,但是,考慮到移動端以及可能一些用戶瀏覽器升級不及時的現狀,因此,-webkit-以及-moz-前綴目前還不能省略。

深度閱讀

深度思考,升華開發智慧

  • 《Google 是如何構建 Web 框架的?》 :眾所周知 Google 使用單一倉庫來存放與共享代碼,其中存放了超過 20 億行的代碼,并且其使用了基于 Trunk 的開發范式。對于很多其他公司的開發者而言,這一點可能非常不可思議,而本文即是以構建著名的 AngularDart 項目為例,介紹 Google 是如何構建大型開源的 Web 框架的。

  • 《并發與并行:理解 Node.js 中 IO 底層機制》 :本系列希望能幫助開發者深入了解開發并發應用的相關知識,而本文則是著眼于相對基礎的操作系統級別的調度、應用的 IO 這些知識。

  • 《JavaScript 啟動性能瓶頸分析與解決方案》 :隨著現代 Web 技術的發展與用戶交互復雜度的增加,我們的網站變得日益臃腫,也要求著我們不斷地優化網站性能以保證友好的用戶體驗。本文作者則著眼于 JavaScript 啟動階段優化,首先以大量的數據分析闡述了語法分析、編譯等步驟耗時占比過多是很多網站的性能瓶頸之一。然后作者提供了一系列用于在現代瀏覽器中進行性能評測的工具,還分別從開發者工程實踐與 JavaScript 引擎內部實現的角度闡述了應當如何提高解析與編譯速度。

  • 《驗證碼工作原理》 :相信每一個 Web 開發者都對于驗證碼(CAPTCHA)的概念不陌生,它是卡內基梅隆大學提出的全自動公開的區分人類和計算機的圖靈測試技術,全稱為 Completely Automated Public Turing Test to Tell Computers and Humans Apart。而本文則是先介紹了驗證碼存在的價值與實際案例,繼而介紹了近年來常見的驗證碼的形式,從原始的數字、文字到最新的交互式驗證碼等等。同時也介紹了 Google 最新的自動行為檢測機制,有助于更加智能地進行人機區分檢測。

開源項目

樂于分享,共推前端發展

  • 《svgo:基于 NodeJS 的 SVG 向量圖優化工具》 :SVG Optimizer 是基于 NodeJS 的 SVG 文件優化工具,其允許用戶選擇需要的插件來進行相關的文件優化操作。SVG 文件,特別是那些經過協同編輯的文件,往往會包含大量冗余的無用信息,譬如編輯器元數據、注釋、隱藏元素、默認值等等;這些冗余信息會占用額外的空間,而 SVGO 就是將這些冗余信息移除。

  • 《FuseBox:下一代模塊打包工具》 :FuseBox 是一個集成了 Webpack、JSPM 與 SystemJS 優勢的新一代打包工具。它的最大優勢在于其速度非常快,基本上只要 50~100 毫秒進行重打包,從而對于開發者非常友好。并且對于 babel-core 這樣常用的工具 FuseBox 都集成在內,對于開發者而言直接零配置就可以使用了。FuseBox 并且內置支持 TypeScript 而不需要任何的其他配置,它能夠在數秒內就將你的代碼編譯打包完畢,并且提供了豐富的 Loader API 支持。

  • 《Jasonette:基于 JSON 標記快速構建跨平臺移動應用》 :Jasonette 是一個新型的構建原生 iOS 與 Android 應用的方式,它允許使用簡單的 JSON 標記來聲明完整的原生應用。我們可以通過遠程修改 JSON 的方式來動態地實時修改應用,而整個應用的邏輯并不需要再硬編碼寫入到設備中。任何時刻你在服務端更新完 JSON 之后再次打開應用的時候,整個應用就會和服務端的聲明保持同步。

  • 《GraphicsJS:輕量級繪圖庫》 :目前 Web 開發中最常用的創建交互式圖片的技術選型當屬 SVG 與 Canvas,傳統的 Flash 與 Silverlight 已經慢慢淡出歷史的舞臺。而對于 SVG 與 Canvas 的對比也顯示,如果是想創建與操作簡單的交互性圖片,那么 SVG 當屬首選。SVG 本身是基于 XML 的向量圖,任何通過 svg 標簽載入的圖片都會成為 SVG DOM 中可操作的對象。而 GraphicsJS 正是基于 SVG 的簡單易用的 JavaScript 繪圖庫。

  • 《redux-query:React/Redux 中查詢與管理網絡狀態的庫》 :對于很多開發者而言,同步本地狀態與網絡狀態會是一件很麻煩的事情。其中需要太多的妥協與考量,甚至于面對不同的問題需要使用不同的技術棧。而 redux-query 即是 AmplitudeEng 的工程師在實踐中的總結與應用,它可以被當做基于 React/Redux 以及 RESTful API 的應用的很好的輔助工具。它允許將網絡狀態鏈入到當前的 Redux Store 中,并且提供了刪除、樂觀更新、響應緩存、刪除重復等等優秀的功能。

巔峰人生

一覽眾山,聆聽巔峰故事

 

 

來自:InfoQ

 

 本文由用戶 GenieKaawir 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!