阅读更多

0顶
0踩

移动开发

原创新闻 盘点2016年的移动Web发展

2016-12-16 10:36 by 副主编 mengyidan1988 评论(0) 有5496人浏览
引用

作者简介:黄峰达,ThoughtWorks 软件开发工程师,CSDN 博客专家。长期活跃于 GitHub,专注于物联网和前端领域。出版著作《自己动手设计物联网》,以及《Growth:全栈增长工程师指南》等六本电子书,并译有《物联网实战指南》。
本文为《程序员》2016年12月期原创文章,未经允许请勿转载,更多精彩文章请订阅2017年《程序员》
技术之路,共同进步,欢迎投稿、约稿、给文章纠错,请发送邮件至mobile@csdn.net。

在即将过去一年,我经历了两个项目:一个是基于 React 与响应式设计的房地产搜索网站;一个则是基于 Angular.js 与 Ionic 1 的金融混合应用。而这两个不同的项目,正好可以代表移动 Web 的两个方向。在这一年里,一些前端框架已经趋于稳定,我们可以看到诸如 React 这样的框架在一些大型项目中的采用。除了这些常规的移动 Web 应用,在今年九月底微信小程序的火热,也开启了移动 Web 的一扇新门;Google 推出的 PWA 也让越来越多的开发者看到了移动 Web 的更多可能性。

面临的问题及考验
尽管网络速度正在变得越来越快,但是移动 Web 页面的体积也越来越大。单页面应用的体积在首次加载时,仍然值得我们好好研究——如何更快展示用户需要的内容,而不是让用户在页面加载的过程中等待着让他们离开。除了使用服务端渲染来优化初次体验,我们还需要设置缓存,使用一些技术策略来加快用户打开的速度。

然而,我们仍然还面临着一堆亟需解决的问题。比如在服务端采用微服务架构来加速开发,当我们需要在一个页面里请求大量 API 时,微服务架构就会成为一个新的问题。当用户在请求过程中切换页面时,就需要中断大量Promise请求。因此就需要使用 GraphQL或Falcor这样的API框架来减少客户端API请求。

安全
除去上面这些内部因素,移动 Web 应用还饱受外部因素困扰。在2016年,我们发现越来越多的移动站点正深受运营商劫持的影响,由于 HTTP 协议是明文的,而流量都要经过运营商,因此运营商可以轻而易举地在页面中植入广告。这时,解决问题的有效办法就是全站 HTTPS。与此同时,对于安全的考虑也仍然值得注意。我们意外地发现一些移动 Web 网站只在前台做了数据校验,而缺少后台的数据检验,这会带来相当大的安全隐患。

臃肿的前端代码
前端项目正在变得越来越臃肿,体积让人难以接受。在缺乏单元测试的项目里,维护这样的一个前端项目正在变得举步维艰。当后台走向微服务的同时,前端走向微前端也变得可以接受。一个应用程序可将基本需求分解为不同的几个前端页面,如面向用户、面向管理员。

尽管已经有了如 React 这样的 CSS in JS 的框架,维护 UI 组件仍然是一个相当大的考验。移动 Web 对于屏幕大小有更高的要求,响应式设计会带来更多代码。样式代码数量的增加,对于前端的样式架构有了更大挑战。如我们所见 SCSS 或 SASS 这样的 CSS 预编译器可以带来更少的代码,而对于项目中的新人来说,仍然是个问题——在项目进行过程中,我们往往关注于如何更快地交付功能。

相似地,我们也可以在社区开发的开源库上看到一些“微前端”趋势。借助于 ES6 的模块化功能,我们可以在项目中只 import 所需的函数,在使用 webpack 打包的过程中也会删去那些不需要的模块。过去我们使用一个库的某个方法时,可能就会考虑直接创建一个类似的库,而不是引入——原因是这个库对于应用来说太大了。

框架及工具
从传统 Web 网站到单页面应用迁移的第一个难题是:是否真的需要单页面应用?单页面应用更多的是带来用户体验的提升,然而很多网站并不需要这种变化,大部分网站只需要支持更好的响应式设计。

在上一个项目里,我们使用了 React 来替换之前的桌面及移动站点。除了代码老旧之外,还有部分原因:业务变更时需要修改三份代码。旧有的旧面网站代码可以追溯到2010以前,难以维护;移动站点是在2013年底创建的,使用当时流行的 Backbone + Mustache + Require.js 技术栈;与此同时还有手机 App。

当我们决定做一个移动单页面应用时,就需要开发考虑对于技术方案的选择。

框架选型
而在这一年里,开发人员在做技术选型时,发生了一些有趣的变化。首先是 React 对于大部分的开发人员来说,存在学习曲线比较陡峭的问题,JSX、虚拟 DOM、组件化、同构等,使其无法成为短期项目的首选;其次是 Angular 2.0 的跳崖性升级,使得相当多的开发人员无法选择 Angular.js 1.x 的版本,而2.0在接近年底才完成,且周边的组件还有待完善;因此,我们发现 Vue.js 由于其简单并且容易上手,在今年显得特别受欢迎。

幸运的是:上述三个框架,都有对于混合应用的应对方案。这使得我们在设计系统架构的时候,更容易复用代码。



2016年里,在移动和桌面 Web 使用 Angular.js,移动端使用基于 Angular.js 的 Ionic 框架是非常不错的技术选型。Ionic 拥有相当多设计优美的 UI 组件,这些组件可以让我们轻轻松松地做出移动应用。并且,我们也可以和 Web 端共用 filter、directives、services 等的内容。相信在2017年,Angular 2.0 搭配基于 Angular 2.0 的 Ionic 仍然是好选择。

我们也可以使用 React 框架来做类似的事。尽管有相当多的开发者选择使用了 React Native,但是这不意味着我们需要在移动端使用它。在移动端使用 Cordova + React 也是一个不错的选择——既然可以使用 React 做响应式设计来匹配不同的屏幕大小,那么也可以很轻松地使用 Cordova + React 来达到同样的目的。

同理于Vue.js,尽管 Weex 还不是很成熟,但是使用 Cordova + Vue.js 也仍然不错。

开发工具越来越完善
在这一年里,我们发现能选择的开发工具越来越多。不同的开发商都在不断创造开发工具,这些工具可以帮助我们编写出更好的代码,开发出符合用户需求的软件。
现在市面上的主流前端开发工具都已经可以支持 ES6、TypeScript,并且不同的浏览器对于 ES6 的支持力度也在提高,Edge、Firefox、Chrome 对于 ES6 特性的支持度均在90%以上,而 Safari 浏览器则达到了100%。这也意味着对于面向 iOS 的移动 Web 应用,可以很随意地在这些设备上使用 ES6 语言了。

并且各浏览器对于移动设备的调试能力都在不断提高。在开发移动 Web 页面时,我们使用 Chrome 浏览器来匹配移动设备。而在新版本的 Safari 里也提供了“进入响应式设计模式”的功能,它可以模拟常见 iPad、iPhone 显示网页,甚至可以模拟 iPhone 横屏。

Adobe 在今年推出了 UX 工具 Experience Design(官方缩写XD),可以为 UX 设计师快速创建出用于移动设备的网站或者应用程序。这个工具除了具备响应式设计能力,还可以实现简单的 App Demo,如在桌面上点击某个页面跳转,并具备有页面间跳转的效果。这可以让开发者更容易理解产品的设计原型,创建出更符合需求的产品。

提供更好的用户体验
对于在早期已经采用单页面应用的团队来说,他们面临的一项新挑战是:如何提供更好的用户体验。

更好的用户交互
相当有意思的一点是,我们发现业务人员对于移动 Web 的要求更高了,他们希望有着类似于移动应用的用户体验。过去,在移动 Web 领域使用 Tap 事件来代替 Click 事件只是一个开始——使用 FastClick 这样的库来规避 Click 事件的延迟。

手势交互:下拉时刷新在移动 Web 上已经不是新鲜的事,我们还要类似于微信的左右滑动切换不同的页面,除此还会有旋转、缩放等功能。

适配屏幕大小:对于移动设备来说,屏幕是个大问题,应用既要支持 iPhone 这样的小屏幕,还要匹配上 iPad 这样的设备。可以使用媒体查询来解决,但设置合适的字体还是问题。px、em 已经很难满足要求了,我们还需要 rem 这样可以根据网页的根元素来设置字体大小的单位。

更流畅的体验
过去,我们关注的移动 Web 流畅度主要集中于缓存。当缓存已经成为了业界的通用模式时,人们便开始寻求更多的解决方案。如对于流量来自 Google 的网站来说,他们可以使用 Accelerated Mobile Pages(AMP)技术来加快网页的加载,这可以为新闻和博客网站带来更快的访问速度。

与桌面相比,移动 Web 页面对流畅度有着更高的要求,这主要是受限于移动设备。尽管新 iPhone 提供了相当快的处理能力,各大 Android 设备生产商在竞争中也在不断提高设备的处理能力,但是仍然有相当多的用户使用旧版移动设备。

在移动网页上,除了采用支持 Virtual DOM 的框架来提高性能,还可以采用 Virtual Scroll 机制——只渲染足够填充 Viewport 大小的数据集,页面滚动时再渲染新数据,以此改善移动端列表页面数据过多的问题。

除了对于页面本身的优化,还有相当多的内容是对于资源和 API 优化。Facebook 创建了 GraphQL 来减少 API 的请求,一次请求多个需要的 API;Netflix 创建了 Falcor 来合并多个数据源。这些都可以加快移动应用的响应速度,除此我们还注意到 Service worker 开始受到开发者追棒。

Service worker是在Web应用和浏览器与网络之间的代理服务器,旨在创建更好的离线体验。并且可以依据当前网络是否可用、服务器是否有内容更新来采取合适的策略。同时它还支持通知推送及后台API。

2017年移动Web展望
在这一年里,我们也看到了一些新东西正在展露头角,Google 推出了 Progressive Web Apps(PWA),微信也推出了小程序。

微信小程序
如微信小程序官方介绍所说:
引用
微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

用户只需要在微信客户端下载相应的小程序,就可以直接使用,用完即可离开。由于微信本身的封闭属性,小程序的运营和推广上仍然会有相当多的难点,同时也造成了一些传播上的难题。

不过微信自带了 WebView,开发者在开发时只需要针对不同操作系统的设备开发软件即可,不容易再遇到不同版本上的浏览器差异。同时微信小程序使用自己的 Web 框架,开发者需要重新上手这个框架,由于小程序还处于测试版,仍然还有相当多的 Bug。

PWA
PWA 是 Google 在 Google I/O 2016 大会上强调的移动 Web 应用程序方向,我们可以翻译为“渐进式应用”。它结合了 Web 和原生应用程序的优势,提供了更好的用户体验:
  • 应用程序不需要安装;
  • 不依赖网络连接,可以支持离线使用;
  • 提供类原生应用的体验;
  • 自带响应式用户界面;
  • 持续更新,通过 Service worker 让应用程序保持在最新的状态;
  • 可安装在桌面等。

它为开发混合应用的开发者提供了一个新方向,虽然受限于国内 Chrome 普及率,但是我们仍然很看好这项技术。

在这一年里,我们也看到了Google正在推进Web NFC API、Web Bluetooth API、Web USB API 等原生 API 的发展。现在,已经可以在 Chrome 浏览器上通过编写 JavaScript 来开发蓝牙应用,这也使得 PWA 可以制作出更富有质量的移动 Web 应用。
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 盘点2016年的移动 Web 发展

    作者简介: 黄峰达,ThoughtWorks 软件开发工程师,CSDN 博客专家。... 本文为《程序员》2016年12月期原创文章,未经允许请勿转载,更多精彩文章请订阅2017年《程序员》。 技术之路,共同进步,欢迎投稿、约...

  • 移动开发周报 Issue #171:盘点 2016 年移动开发现状及未来展望

    写在前面本期移动开发周刊 Issue#171 期如约而至,聚焦 Android、iOS、VR/AR/MR、直播等前沿移动开发技术,收录一周最热点,解读开发技巧,每周三移动周刊抢先看,我们希望从中能够让你有一些收获,如果你有好的文章...

  • 近几年前端技术盘点以及 2016 年技术发展方向

    Web 发展了几十个春秋,风起云涌,千变万化。我很庆幸自己没有完整地经历过这些年头,而是站在前人的肩膀上行走。...本文会盘点从 09 年开始到 15 年间前端技术的革新,同时也会从多个角度,解读近

  • 前端技术盘点以及 2016 年技术发展方向

    09 年之前,JavaScript 还处于对自身语言的完善过程中,而到了 09年,JavaScript 类库已经颇为成熟,jQuery/Prototype//Dojo等都已经发布了好几个stable版本,各大类库也是相互吸收优点,不断完善并提高自身性能,...

  • 【java毕业设计】智慧社区在线教育平台(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

  • 基于深度强化学习的德州扑克AI算法优化详细文档+全部资料+源码.zip

    【资源说明】 基于深度强化学习的德州扑克AI算法优化详细文档+全部资料+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 无需安装MobaXterm简约版本,远程工具

    无需安装MobaXterm简约版本,远程工具

  • 蓝桥杯Python组的初级到中级选手练习python案例

    这个脚本包含了常见的算法和编程概念,适合蓝桥杯Python组的初级到中级选手练习。通过这些练习,选手可以: 理解递归算法(如斐波那契数列和汉诺塔问题)。 熟悉基本数据结构和操作(如字符串操作、列表处理)。 学习基本的数学算法(如求最大公约数)。 掌握Python语言的基本语法和内置函数的使用。 比赛中可能会遇到更复杂的问题,但这些练习能帮助你打下坚实的基础。在准备蓝桥杯时,还应该关注算法题库,学习更多数据结构(如栈、队列、树、图等)、算法(如动态规划、贪心算法、搜索算法等),并进行大量的代码实践和调试。

  • 【java毕业设计】智慧社区远程办公平台(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

  • 【飞行器】基于matlab线性控制器和广泛可视化四轴飞行器控制系统仿真【含Matlab源码 9910期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

  • JSP企业人事管理系统(源代码+论文)(2024y1).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

  • 【java毕业设计】智慧社区无障碍设施门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

  • 2024级涉外护理7班马天爱劳动实践总结1.docx

    2024级涉外护理7班马天爱劳动实践总结1.docx

  • JSP网上教学资源共享系统(源代码+论文)(2024r7).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

  • LookupError.md

    LookupError

  • 四川采矿场领导带班下井管理制度.docx

    四川采矿场领导带班下井管理制度

  • Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了基于马尔可夫转移场(MTF)、卷积神经网络(CNN)和多头注意力机制的多特征数据分类预测模型。项目旨在处理多维度、多变量、复杂时序数据,通过融合这三种技术,有效提取时序数据中的非线性模式和长期依赖性,提升分类预测的准确性。文章详细描述了模型的构建、训练、评估和实际应用,包括数据预处理、模型架构设计、代码实现、系统架构设计、模型优化和部署等内容。 适合人群:具备一定编程基础,对深度学习和时间序列分析感兴趣的科研人员和工程师。 使用场景及目标:适用于金融预测、气象分析、智能制造、医疗健康等多个领域的多特征数据分类和预测任务。具体目标包括:提升多特征数据分类的精度,增强多维度数据处理能力,解决传统方法在大规模数据处理中的瓶颈,提供应用和实践价值。 其他说明:项目提供了一个完整的开发流程和详细的代码实现,适合用于学习和实际应用。

  • 基于wepy 商城(微店)微信小程序 全部资料+详细文档+源码+高分项目.zip

    【资源说明】 基于wepy 商城(微店)微信小程序 全部资料+详细文档+源码+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 深圳建设工程公司档案管理规定.docx

    深圳建设工程公司档案管理规定

  • 基于CNN算法的验证码识别系统资料齐全+高分项目+文档+源码.zip

    【资源说明】 基于CNN算法的验证码识别系统资料齐全+高分项目+文档+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics