12.1

前端每周清单第42期:V8的执行流与优化,PinterestPWA实践,RustWebAssembly应用

作者:王下邀月熊 编辑:徐川

前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点,开发教程,工程实践,深度阅读,开源项目,巅峰人生等栏目。欢迎关注【前端之巅】微信公众号(ID : frontshow),及时获取前端每周清单。

新闻热点

国内国外,前端最新动态

  • Rust默认可以编译为WebAssembly:随着 Pull Request 46115: “rustbuild: Enable WebAssembly backend by default” 被合入master分支,Rust现在可以不依赖于其他工具而直接将代码编译为WebAssembly格式;而Browserify也支持在JavaScript代码中直接插入Rust代码,我们在前一期的清单中也介绍过使用Rust开发Node.js原生模块,拭目以待未来JavaScriptRust能够更好地协同构建强大的应用。

  • Kotlin 1.2发布:本周Kotlin 1.2正式发布,继续了Kotlin走向跨平台现代应用开发的步伐。Kotlin 1.1加入了对JavaScript的支持,可以将Kotlin代码编译为JavaScript并且在浏览器中运行。而该版本中,Kotlin提供了在JVMJavaScript之间复用代码的能力,允许开发者编写一次业务代码,然后运行在从服务端,到浏览器,到Android等跨平台的应用服务中。

  • React 16.2.0发布: React 16.2提升了对于Fragments的支持,即允许在某个组件的render方法中返回多个子元素。在React 16中允许开发者以数组方式返回多个子元素,但是这种写法却与标准的JSX产生轻微混淆;而Fragment可以看做对于数组的透明封装,同时其也支持传入key属性,以在重渲染时进行判断。除此之外,该版本还为React.Children工具函数添加了实验性的Call/Return类型,修复了React DOM,React Test Render中的一系列问题。

  • IPV6要来啦:新华社北京1126日电:近日,中共中央办公厅,国务院办公厅印发了《推进互联网协议第六版(IPv6 )规模部署行动计划,并发出通知,要求各地区各部门结合实际认真贯彻落实。下一代互联网国家工程中心也宣布由该中心牵头发起的 “ 雪人计划 ” 已在全球完成25IPV6根服务器架设。其中,中国部署了4台,打破了过去没有根服务器的困境。与此同时,下一代互联网国家工程中心正式宣布推出IPv6公共DNS:240c::6666。通过免费提供性能优异的公共DNS服务,为广大IPv6互联网用户打造安全,稳定,高速,智能的上网体验,助力《推进互联网协议第六版( IPv6 )规模部署行动计划》全面落实。

开发教程

步步为营,掌握基础技能

  • 使用Node.js构建区块链:本教程将会从零开始介绍如何构建BrewChain,一个简单的Node.js区块链实现。本文首先会介绍BlockBlockchain的概念,然后讨论如何构建运行在成员机器上的单结点程序,其会监听创建新块的广播消息,并且将其继续广播给其他结点,从而更新整个区块链网络。BrewChain还会包含用于管理与监控的HTTP服务器,用于与Brew事件交互,查看日志日期等内容。

  • 重思:最佳的请求策略,就是没有请求:鉴于浏览器的并发请求数与网络带宽的限制,Web性能优化的一条策略就是尽量减少请求的数目;我们习惯将资源文件打包到少数的包体中。不过随着HTTP/2的普及,其多路复用的特性允许我们能够更高效地传递文件,本文就着重讨论了在HTTP/2的背景之下是否还应该一味地减少请求数目。本文首先讨论了HTTP/2的特性,然后讨论了HTTP/1.1中的打包压缩,缓存策略等在HTTP/2中的实践技巧变更;更多Web性能优化相关资料参考这里

  • Web应用中的常见安全问题: 上期清单中笔者推荐了多篇网站应用渗透相关的文章,而本系列文章则是对于常见的Web应用安全问题进行介绍与分析。本文首先讨论了密码哈希存放的问题,作者认为应该使用BCrypt来替代MD5或者SHA512等传统哈希算法;然后介绍了XSS的基本概念与防御手段,最后讨论了Session存放于安全相关的问题。更多Web安全资料索引参考这里

工程实践

立足实践,提示实际水平

  • V8引擎中的推测优化(Speculative Optimization ):本文是对于V8的优化编译器TurboFan的底层原理的介绍,希望能够帮助开发者了解V8是如何通过信息搜集与Speculative Optimization,来将JavaScript转化为高优化的机器码。本文首先介绍了V8引擎的整体架构,以及其执行管道流中的语法树解析,机器码生成等步骤,然后讨论了何谓Speculative Optimization,及其具体的优化过程;更多V8相关讲解可以阅读《JavaScript-Notes

  • 来自PinterestPWA性能案例:本文是Addy Osmani大神分享的,Pinterest将其移动Web客户端进行PWA改造的案例;本文主要涵盖了如何减少JavaScript包体尺寸以提高加载速度,与使用Service Worker进行网络弹性恢复等内容。本文 首先对比了改造前后Pinterest移动端网站关键指标,以及与原生应用的性能对比;然后介绍了Pinterest的代码构成,使用的Webpack异步分割与优化插件等内容。接下来讨论了React应用的潜在性能痛点与动画优化,最后讨论了如何用Service Workers添加缓存功能与离线支持;更多PWA的使用案例参考这里

  • Service Worker与页面刷新: PWA的目标是为用户提供接近原生的体验,但是这也带来了某个使用场景的不一致性考量:当用户点击浏览器的刷新按钮时,网页自带的Service Worker可能未更新,以至于用户仍旧浏览旧版的网页。作者在首篇文章中以案例展示了Service Workers是如何 “ 破坏 ” 浏览器刷新按钮的功能,在第二篇文章中则讨论了如何避免这种不一致性。更多PWA实践可以阅读 Web应用架构与性能调优

深度阅读

深度思考,升华开发智慧

  • Rust, Stylo, ServoFirefox的重生:数周前Firefox Quantum正式发布,其搭载的Servo浏览器渲染引擎极大地提升了渲染速度与用户体验,本文即是对于Firefox Quantum开发过程中的技术选型进行分享。本文首先分析了现代大型项目开发中的技术考量,C/C++因其设计与历史原因不可避免地会造成潜在的内存问题;而Rust则是现代软件工业的集成者,它借鉴了Apple C++编译器后端,参考了数以百计的研究资料,包含了unsafe等关键字,还提供了便捷的包管理器。笔者接下来还分享了StyloServo的预研开发过程;更多Rust相关资料参考这里

  • 2017 ThoughtWorks技术雷达VOL.17:技术雷达是ThoughtWorks技术顾问委员会(TAB ),基于Thoughtwork s的全球技术战略以及对行业有重大影响的技术趋势总结而来。本期技术雷达的精彩集锦关注了崛起的中国开源软件市场,容器编排首选Kubernetes,成为新常态的云技术以及各方对区块链的信任稳步增强;而在前端相关领域,本期技术雷达还讨论了Headless Chrome, Cypress, Flow, Lighthouse, Rendertron, Yarn, CSS Grid Layout,CSS Modules, Jest,Kotlin, CSS-in-JS, Weex等内容。

  • WebAssembly的应用场景:本文是How JavaScript Works系列文章的第六篇,着眼于介绍WebAssembly相关的内容,分析了其相较于JavaScript在加载时间,执行速度,垃圾回收,内存使用,调试,多线程,可移植性等方面的优势。本文首先介绍了V8引擎的JavaScript解析与执行,以及TurboFan优化的流程,讨论了引入WebAssembly的结合点;然后分析了WebAssembly内存模型等内容,最后以SessionStack中具体的使用案例分析了WebAssembly合适替代现有JavaScript的情景。更多WebAssembly的学习资料参考这里

开源项目

乐于分享,共推前端发展

  • stacks-cli: Wappalyzer已经是非常不错的用于分析网站技术构成的Chrome插件,不过对于那些喜欢使用命令行程序的开发者,stacks-cli是个不错的选择;stacks-cli能够识别反馈CDN,Web服务器,第三方插件,界面框架等内容。

  • Sampling Heap Profiler: Sampling Heap Profiler目前还是实验性的工具,其能够对于V8的堆存储进行随机抽样,来帮助开发者发现到底是什么对象占据了大量的内存。它同样会追踪栈上某个指定对象的内容,从而了解对象的存活性与对应的依赖路径。

  • Joplin: Joplin是免费,开源的笔记与待办事项类应用,其提供了Windows,macOS, Linux,Android以及iOS等不同平台的客户端,从界面应用程序到命令行程序皆有涉及。Joplin使用了React Native开发移动端应用,使用了Electron开发桌面端应用,其源代码还是很值得借鉴阅读;其使用了MIT协议,也方便进行二次开发。

  • Reactopt: Reactopt是用于检测React应用中,不必要的重渲染的命令行工具,其可以看做react-addons-perf的替代工具。在启动Reactopt之后,脚本会自动地在浏览器中打开应用;开发者可以通过输入 done 来结束检测,Reactopt会反馈那些触发不必要的重渲染的事件,并且提示哪些组件能够通过shouldComponentUpdate来优化性能。

前端之巅

前端之巅是InfoQ旗下关注前端技术的垂直社群,加入前端之巅学习群请关注前端之巅公众号后回复 “ 加群 ”。投稿请发邮件到 editors@cn.infoq.com,注明 “ 前端之巅投稿 ”。

前端之巅微信底图-5.jpg

下一页