(点击上方公众号,可快速关注)

编译:伯乐在线/飞哥的咖啡 

如有好文章投稿,请点击 → 这里了解详情


Progressive Web App,用 service worker 缓存 html 与静态资源,reactjs + redux,用 ES2015。优化在网络状况不好的场景的使用。

我们是如何构建 Twitter Lite 的

我们很高兴向大家介绍 Twitter Lite,它是一款突破性的网络应用程序(Web App),可通过 mobile.twitter.com 下载获取。Twitter Lite 反应迅速、使用更少的数据、占用更少的存储空间、并支持在现代浏览器中推送通知和离线使用。轻量级应用程序允许用户按需访问,无冲突安装(install without friction),并支持渐进式更新,而网络正在成为一个此类应用的平台。在过去的一年中,我们采用了全新的开放式网络 API,显著提升了性能,增强了用户体验。

架构概述

Twitter Lite 是一个客户端 JavaScript 应用程序,也是一个简单的轻量级 Node.js 服务器。服务器处理用户身份验证,构建应用程序的初始状态,并渲染初始的 HTML 应用程序 shell。一旦加载到浏览器中,应用程序将直接从 Twitter API 请求数据。这种基础架构的简单性能帮助我们大规模地提供可靠又高效的出众服务,而且,Twitter Lite 比我们的服务器渲染的桌面网站要便宜得多。

客户端 JavaScript 应用程序的开发、构建和测试基于众多开源库,其中包括 React、Redux、Normalizr、Globalize,Babel、Webpack、Jest、WebdriverIO 和 Yarn。依赖已构建(完成)的开源软件,我们可以将更多的时间花在改善用户体验、提高迭代速度、以及处理 Twitter 特有的问题上,比如处理和操作 Timeline 和 Tweet 数据。

我们编写了现代的 JavaScript(ES2015 及更高版本),由 Babel 编译并和 Webpack 捆绑。API 响应数据首先由 Normalizr 处理,它允许我们删除重复数据,并将数据转换为更高效的表单,然后发送到各个 Redux 模块,它们的作用是获取、存储和检索远程和本地数据。该 UI 由数百个 React 组件实现,它们可以实现包括文本渲染、管理虚拟列表、延迟加载(lazy load)模块和延迟渲染等方方面面的功能。Twitter Lite 一共支持 42 种语言,我们使用 Globalize 来提供本地化的数字、日期和消息。

性能设计

每月有数亿人访问 mobile.twitter.com。当你的网络连接(速度)缓慢、(方式)不可靠、(渠道)有限或(资费)昂贵时,我们希望 Twitter Lite 能成为你使用 Twitter 的最佳方式。通过一系列的增量性能改进(称为 PRPL 模式 ),以及使用 Android 现代浏览器(例如 Google Chrome)上的新功能,包括页面守护者(Service Worker)、IndexedDB、网络应用安装提示条和网络推送通知,我们能够获得高速和可靠的网络连接。

实用性

Twitter Lite 具有网络弹性。为了覆盖地球上的每一个人,我们同样需要顾及那些所处网络环境缓慢且不可靠的人群。网络可用时,我们使用 Service Worker 以便在重复访问时,启用临时脱机浏览和即时加载,而不必考虑网络条件。Service Worker 对 HTML 应用程序 shell、静态资源以及一些流行的表情符号进行缓存。当脚本或数据无法加载时,我们提供“重试”按钮,帮助用户从故障中恢复。总之,所有这些改进提高了网络的可靠性,并有助于在重复访问时,大大加快加载和启动时间。

逐步加载

Twitter Lite 在大多数设备上,处于 3G 网络环境下,完成交互不超过 5 秒。世界上大多数国家都在使用 2G 或 3G 网络,所以快速的初始体验很关键。在过去的 3 个月内,我们的平均负载时间缩短超过 30%,第 99 个百分位的交互延迟时间缩短超过 25%。为了实现这一点,应用程序将初始的 HTML 响应发送给浏览器,发送指令来预先加载关键资源,而服务器同时构建初始的应用程序状态。通过使用 Webpack,应用程序的脚本被打散成颗粒碎片按需加载,这意味着初始加载只要求载入可见屏幕所需的资源。(有条件时,Service Worker 会预先缓存额外资源,并允许对其他屏幕进行即时未来导航(instant future navigations)。)这些改进允许我们逐步加载应用,可以让人们更快地阅读和创建 Tweet。

渲染

Twitter Lite 颠覆了昂贵的渲染工作。尽管我们已经注意优化组件的渲染,Tweet 仍是一个复杂的复合组件,并且渲染无穷列表的 Tweet 需要考虑额外的性能。我们实现了自己的虚拟化列表组件,它只会在 Viewport 视图中显示内容,使用 requestAnimationFrame API 以递增的方式渲染多个框架,并在屏幕上保留滚动位置。通过使用 requestIdleCallback API,将非关键的渲染延迟到空闲时间进行,从而进一步提高感知性能。

数据使用

Twitter Lite 在默认情况下减少了数据使用,提供较小的媒体资源,并(主要)依赖已缓存数据。我们已经对图像进行了优化,以减少其对数据使用的影响:当你滚动一个 Timeline 时,数据使用的影响降低多达 40%。“数据节流”模式进一步减少了数据使用,它用一个小小的模糊预览来替代 Twitter 上的 Tweet 和直接消息(Direct Messages)。这个图像的 HEAD 请求帮助我们在按钮旁显示其大小,以便按需加载。Twitter Lite 只占用很小的设备存储空间,对比我们的原生应用,它只有其 1-3% 的体积。

设计系统和迭代速度

增强快速迭代能力可以帮助我们保证高质量的用户体验。我们严重依赖 Flexbox 进行布局规划,以及较小且固定数量的颜色、字体大小和长度。Twitter Lite 是由基于组件的响应设计系统构建的,它可以让应用程序适应任何的形状参数。使用 UI 组件帮助我们在设计(学)和工程(学)之间建立一个共通的词汇表,更利于快速迭代和重新使用现有构造块。一些非常复杂的产品特性,比如与内容混合的 Timeline,可以由精简至 30 行的代码创建,以配置一个 Redux 模块并将其与 React 组件相连。

展望未来

在这么大的规模上构建一个快速的网络应用程序,并保持其高速稳定的运行,(不得不说),是对 Twitter 的设计、产品和工程等多个团队/部门的一次重大挑战。我们对现阶段取得的进展感到兴奋,并对 HTTP/2、GraphQL 和其他压缩格式进行了试验,以进一步减少加载时间和数据消耗。在接下来的几个月内,我们将对 Twitter Lite 的可访问性、安全性、设计、功能和性能进行更多的改进。

觉得本文对你有帮助?请分享给更多人

关注「前端大全」,提升前端技能

Twitter 是如何做新版手机网站的相关推荐

  1. 新手站长如何做一个手机网站?

    随着电脑网站站长群体的没落,移动互联网的兴盛,很多建站爱好者开始将目光投放在了手机网站建设上面,并且第一批吃螃蟹的移动站长已经赚到了第一桶金,所以很多个人站长就想做一个手机网站.制作手机站对于很多人来 ...

  2. 支付宝手机网站支付出现系统繁忙,请稍后再试

    今日在做一个文件搞定支付宝系列时,其中在做支付宝手机网站兼容微信浏览器时,遇到了不少坑,这里详细记录一下. 1.验签出错 按照支付宝提供的demo(alipay_in_weixin_demo),里面只 ...

  3. html5适应手机比例,HTML5 如何让手机网站自适应设备屏幕宽度

    手机或平板设备屏幕大小差距大,因此打开网页时宽度也不同,新做的手机网站如何能够自适应网页宽度,就有了一些难度,还好程序猿们想到了这一点,在代码里面做了如此设置,下面简单讲解一下. 方法:在网页头部加上 ...

  4. 建一个手机网站到底需要多少钱

    小编根据多年的实践经验总结出了一些关于手机网站建设的问题.随着移动互联网的普及,用户对它的依赖性越来越强.却来越多的企业也开始意识到建设手机网站的重要性,但是面对市场上繁多的手机网站的时候,很多企业顿 ...

  5. (转)手机网站前端开发经验总结

    导读:国内手机网站目前还算是个新鲜事物,相应的手机网站前端开发也并不是特别成熟,对于一个网页设计师来说要做一个手机网站还是会碰到许多问题,本文转载自淘宝 UED,分享如何开发进行手机网站的前端卡发. ...

  6. 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络

    目前,手机已经占据了人们大多数的闲暇时间,互联网的流量开始逐渐向移动端倾斜,重视移动端的用户体验,就可以给客户端增加很多意想不到的功能.但是还是有很多公司和站长不知道手机网站应该怎么建才能符合用户的使 ...

  7. 那么手机网站关键词优化排名该怎样做?

    现今移动端流量的增长,这让越来越多的企业逐渐重视起移动端网站的用户流量,做好移动SEO排名优化效果已是刻不容缓的.但移动端网站推广的方式和技巧有很大的差异,如用PC端的优化方式来做手机网站关键词排名, ...

  8. html5手机排名,手机网站排名怎么做?移动端手机站SEO排名的13个要点

    手机网站最重要的就是不同机型的完美适配,现在大大小小尺寸的手机那么多,如果你的网站可以做到不管任何尺寸的手机都很好适配的话,那想做手机网站的排名工作已经赢在第一步了! 1:百度官方意见:使用合理的di ...

  9. 手机网站建设怎么做?【手机网站制作】

    对于很多公司企业来说,做网站建设都是优先考虑PC端的网站建设,但是某些公司企业可能对于PC端网站的需求不高,倒是更有需要做移动端网站,也就是我们常说的手机网站.那么关于手机网站建设又是怎么做的呢?本文 ...

最新文章

  1. 疫情期间,为什么Snapchat比Pinterest更赚钱
  2. Fedora9安装中文输入法
  3. 大端模式小端模式、主机序网络序、入栈地址高低问题
  4. 【转】Vector与ArrayList区别
  5. HDFS上传文件命令报错org.apache.hadoop.ipc.RemoteException(java.io.IOException)
  6. readfile函数使用方法_1分钟学会LOOKUP函数,有网友说使用这个方法,初学者秒变大神...
  7. android 存储私有文件,是否可以只在Android应用程序的私有目录中保存图像,而不是设备的内部或任何外部存储?...
  8. python I/O原理
  9. UVA10735 Euler Circuit题解
  10. 转Linux多线程条件下的计数器 2011-11-15 00:00中国IT实验室佚名
  11. 数据包接收系列 — NAPI的原理和实现
  12. 不会做抖音网红快闪PPT?这个插件可以免费一键生成快闪PPT!
  13. 【锟斤拷】的故事:谈谈汉字编码和常用字符集
  14. python plot画柱状图_matplotlib使用:画柱状图
  15. 元核云赋能银行业,智能双录产品助力银保业务合规高效响应
  16. video的基本使用
  17. Eclipse(二)如何给 eclipse 设置快捷键
  18. Android调用系统原生分享组件
  19. Intel MKL FATAL ERROR: Cannot load libmkl_avx512.so or libmkl_def.so.
  20. 计算机插入的图片怎么改成线条格式,电脑把CAD转化为JPG格式后图片不清晰怎么办...

热门文章

  1. transform三大属性之rotate(旋转)
  2. rotateimage
  3. MacPro连接wifi经常无故断网
  4. Activity生命周期学习总结
  5. 仓库选址问题.Python实例操作
  6. 天池龙珠计划训练营——python3
  7. 以可靠性为中心的维修(RCM)
  8. 搜索结果【高亮显示】
  9. C#中string.format用法详解 格式字符串
  10. 使用twig来组装数据使数据结构可视化