谷歌Mobile Web Specialist证书备考指南

2017年8月,谷歌发布了专门针对web开发人员的Mobile Web Specialist考试,考试形式为四个小时的在线编程和结尾的在线面试,考试费用为99美元,考试通过后会在45天内收到电子证书。详细考试信息和报名地址见Google Mobile Web Specialist考试官网。
官方文档介绍此考试是为具有3至4年前端开发经验的程序员设计的,谷歌官方为考试内容划定了复习范围。本文主要参考资料为考试官网的Study Guide。
目录
- 网站布局和样式基础
- 前端网络
- 无障碍
- 渐进式web应用
- 性能优化与缓存
- 测试与调试
- ES2015概念和语法
- 移动网页表单
一、网站布局和样式基础
无论使用何种设备,用户都希望看到具有响应式和视觉吸引力的网站。网络应用的布局和样式必须响应现有的显示,并且持续提供直观的功能。你将按照要求使用HTML、CSS和JavaScript来建造包括以下几项的响应式布局和样式:
- 使用原生JavaScript来访问和操作DOM元素;
- 恰当的document type声明和viewpoint标签;
- 响应式的CSS grid布局;
- 使用媒体查询来提供不同屏幕尺寸的流体断点;
- 使用多媒体标签来显示视频或播放音频;
- 通过移动设备尺寸和分辨率进行调整的响应式图片;
- 任意平台上的包含大量点击目标的触摸和鼠标事件;
学习资料(官方):
- responsive Web Design
- A Complete Guide to Flexbox
- Using medea queries
- Video and audio content
- Responsive Images by Google
- Supporting both TouchEvent and MouseEvent
- Touch events
二、前端网络
由于用户互动是基于可信赖的高效网络请求,你将被要求证明自己会通过以下方式使用JavaScript来建立可靠的前端网络协议:
- 使用fetch()请求数据;
- 检查响应参数,并将数据解析成可用的格式;
- 将响应的数据渲染成页面;
- 使用method和body参数配置POST请求到数据库;
- 根据服务器的响应头,使用正确配置的跨域资源分享协议(CORS)的fetch请求;
- 使用promise链来处理fetch()请求错误;
- 使用调试和开发者工具诊断网络问题;
学习资料(官方):
- Introduction to fetch()
- Using Fetch()
- David Walsh’s blog on fetch
- Jake Archibald’s blog on fetch
- JavaScrip Promise: an Introduction
- HTTP access control(CORS)
三、无障碍
网页和网络应用应该为所有人提供无障碍访问,包括那些具有视力、行动、听力和认知障碍的人。使用HTML、CSS、Javascript,你会被要求展示你可以使用如下方式在你的网页和应用中做出无障碍访问的最佳实践:
- 使用具有逻辑的tab顺序来进行tab导航
- 使用跳过导航链接绕过导航栏和旁边
- 避免页面上隐藏的内容阻挡导航栏
- 使用能够提供页面逻辑结构的头部标签
- 使用可视化内容的替代文本,比如alt,
- 在所有元素上应用对比色,并遵守最佳的无障碍实践
- 有紧急信息时候使用aria-live来及时提醒用户
- 使用语义标记在适当时保持内容和表示分离
学习资料(官方):
- Web Fundamentals – Accessibility
- Web Accessibility
- Mobile Accessibility
- Using tabindex
- Focus
- Skip Navigation Links
- ARIA
四、渐进式web应用
用户希望原生应用程序可脱机使用,并提供可以从他们的主页启动的功能丰富的体验。 你会被要求显示你可以通过以下方式使用service worker(服务工作线程),HTML和JavaScript构建类似于渐进式Web应用程序的功能原生应用程序:
- 开发一个可以离线使用的web应用,并通过service worker来缓存元素
- 存储默认显示方向、主题颜色、显示图标(添加到主屏幕)和Web应用程序清单中的启动画面(或使用元标记)
- 将关键应用程序功能和UI分离到可以独立于内容加载的应用程序shell中
学习资料(官方):
- Progressive Web Apps
- Progressive Web Apps Training
- Web Fundamentals - The App Shell Model
- Your First Progressive Web App
- Using Service Workers
五、性能优化与缓存
尽管网络信号很差甚至缺失,用户仍然要求移动页面能够瞬间加载。因为很多用户都会面临高昂的流量费用,你必须减小应用的数据流量从而尽可能加快网页加载时间。你将被要求证明自己可以通过如下方式来处理网页性能审计的问题来减小页面加载时间以及维护一个响应式的用户体验。
- 使用专用的Web worker来防止主线程阻塞
- 通过以下方式来提供一个优化过的关键渲染路径:
- 使用压缩或缩小过的JavaScript、HTML和CSS来减少渲染阻塞
- 在必要的页面使用行内CSS样式,按需求使用异步的方式加载额外的样式
- 仅在必要的时候使用行内JavaScript来初始化页面
- 有秩序的加载其余关键性资源,提前下载全部关键性资产来缩短关键路径长度
- 减少DOM层级来最小化浏览器布局/回流时间
- 使用浏览器的开发者工具来诊断网页在移动设备上的性能问题
- 当资源准备就绪时,提前获取可加载的文件,为有意义的互动腾出时间
- 提供适合Web应用程序数据持久性的客户端存储需求
- session状态管理
- 基于其加载时间和离线功能的影响来管理文件缓存
- 使用IndexedDB 来储存离线模式下的动态内容
学习资料(官方):
- Offline Web Applications by Google
- Web Fundamentals - Performance
- The Offline Cookbook
- Cache -MDN
- Storage
- Local Storage And How To Use It On Websites
- IndexedDB API
- Get Started with Analyzing Network Performance in Chrome DevTools
六、测试与调试
开发人员通常在高度迭代的部署环境中工作,依靠广泛的测试和调试以保持功能和代码完整性。你将会被要求证明你可以通过以下方法验证预期的行为并诊断常见的web应用程序bug:
- 编写单元测试,首先验证一个功能的预期行为,然后迭代修改其代码,直到它通过这些测试
- 在复杂的功能中设置断点来确定与预期功能不符合的地方
- 使用console logs来输出相关的调试信息
- 根据用户报告的问题复现并修复bug
学习资料(官方):
- Get Started with Debugging JavaScript in Chrome DevTools
- Diagnose and Log to Console
- Debugging Service Workers
七、ES2015概念和语法
Web开发人员必须掌握让代码更简单更易读的JavaScript最新的功能。 因为可以使用polyfill来实现在不受支持的浏览器中编写 JavaScript ES2015的代码,开发人员开始使用新的功能和语法具有了更强大的动机。 您将被要求通过以下方式表明您理解并可以编写ES2015JavaScript代码:
- 使用promise语法来创建异步功能并集成优雅的错误处理功能
- 使用let、var、const来建立具有块级、函数级和一成不变的变量
- 包含字符串插值和多行字符串的字符串文字
- 使用箭头函数来创建同步功能并使用无限制的this
- 使用函数默认参数来为没有参数的函数初始化默认值
- 在each函数中使用可以遍历任意对象的for…of循环
- 使用允许任意键值对的maps,包括可循环且包含非字符串键值的键值对
- 仅设置唯一的、可降低性能的迭代元素
学习资料(官方):
- JavaScript Promises: an Introduction
- Promise
- Tempate literals
- Arrow Functions
- Default parameters
- For…of
- Map
- set
八、移动网页表单
填写在线表单,尤其是在移动设备上,可能很困难。 为了改善用户体验,您将被要求证明您可以通过以下方式使用基本的HTML5,JavaScript和HTML5 Constraint Validation API,来设计高效且安全的HTML Web表单:
- 与input相关的合适的label标签
- 设置恰当的input属性,包括type、name和autocomplete
- 为移动表单设置的具有大面积触摸目标的input
- 使用datalist元素来为用户提供具有提示内容的input
- input和DOM元素的前端验证,包括:
- 使用input的伪类来实时的验证表单错误
- 提交前的表单验证(Constraint Validation API)
学习资料(官方):