移动端相关
1. 移动端兼容适配
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- rem, em, 百分比
- 框架的栅格布局
- media query 媒体查询
- 手淘团队的一套 flexible.js, 自动判断 dpr 进行整个布局视口的放缩
2. flexible 如何实现自动判断 dpr
判断机型, 找出样本机型去适配. 比如 iphone 以 6 为样本, 宽度 375px, dpr 是 2
3. 为什么以 iPhone6 为标准的设计稿的尺寸是以 750px 宽度来设计的呢?
iPhone6 的满屏宽度是 375px,而 iPhone6 采用的视网膜屏的物理像素是满屏宽度的 2 倍,也就是 dpr(设备像素比)为 2, 并且设计师所用的 PS 设计软件分辨率和像素关系是 1:1。所以为了做出的清晰的页面,设计师一般给出 750px 的设计图,我们再根据需求对元素的尺寸设计和压缩。
4. 如何处理异形屏 iphone X
safe area
: 默认放置在安全区域以避免遮挡, 但会压缩- 在 meta 中添加
viewport-fit=cover
: 告诉浏览器要讲整个页面渲染到浏览器中,不管设备是圆角与否,这个时候会造成页面的元素被圆角遮挡 padding: constant(env)
: 解决遮挡问题
5. 移动端首屏优化
- 采用服务器渲染 ssr
- 按需加载配合webpack 分块打包, 通过 entry 和 commonChunkPlugin
- 很有必要将 script 标签 ➕ 异步
- 有轮播图 最好给个默认 另外要处理图片懒加载
- 打包线上也要注意去掉 map 文件
- 组件, 路由懒加载
- webpack 的一切配置 肯定是必须的
- 压缩图片 https://tinypng.com/
- 建议还是用 webpack 的图片压缩插件
- 骨架屏
- Loading 页面
6. PWA 全称 Progressive Web App,即渐进式 WEB 应用
一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用. 随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线等功能 解决了哪些问题?
- 可以添加至主屏幕,点击主屏幕图标可以实现启动动画以及隐藏地址栏
- 实现离线缓存功能,即使用户手机没有网络,依然可以使用一些离线功能
- 实现了消息推送 它解决了上述提到的问题,这些特性将使得 Web 应用渐进式接近原生 App。
7. 离线包方案
现在 web 页面在移动端的地位越来越高,大部分主流 App 采用 native + webview 的 hybrid 模式,加载远程页面受限于网络,本地 webview 引擎,经常会出现渲染慢导致的白屏现象,体验很差,于是离线包方案应运而生。动态下载的离线包可以使得我们不需要走完整的 App 审核发布流程就完成了版本的更新
8. 自适应和响应式布局的区别
自适应布局通过检测视口分辨率,来判断当前访问的设备是:pc 端、平板、手机,从而请求服务层,返回不同的页面;响应式布局通过检测视口分辨率,针对不同客户端在客户端做代码处理,来展现不同的布局和内容。
自适应布局需要开发多套界面,而响应式布局只需要开发一套界面就可以了。
自适应对页面做的屏幕适配是在一定范围:比如 pc 端一般要大于 1024 像素,手机端要小于 768 像素。而响应式布局是一套页面全部适应。
自适应布局如果屏幕太小会发生内容过于拥挤。而响应式布局正是为了解决这个问题而衍生出的概念,它可以自动识别屏幕宽度并做出相应调整的网页设计。
插件及工具相关
1. babel 和 polyfill
Babel
: Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码。注意:Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 APIPolyfill
: Polyfill 的准确意思为,用于实现浏览器并不支持的原生 API 的代码。
2. jpg, jpeg 和 png 区别
- jpg 是 jpeg 的缩写, 二者一致
- PNG 就是为取代 GIF 而生的, 无损压缩, 占用内存多
- jpg 牺牲图片质量, 有损, 占用内存小
- PNG 格式可编辑。如图片中有字体等,可利用 PS 再做更改。JPG 格式不可编辑
3. git rebase 和 merge 区别
前端性能优化
- 减少 HTTP 请求(合并 css、js,雪碧图/base64 图片)
- 压缩(css、js、图片皆可压缩,使用 webpack uglify 和 svg)
- 样式表放头部,脚本放底部
- 使用 CDN(这部分,不少前端都不用考虑,负责发布的兄弟可能会负责搞好)
- http 缓存
- bosify 图片压缩: 根据具体情况修改图片后缀或格式 后端根据格式来判断存储原图还是缩略图
- 懒加载, 预加载
- 替代方案: 骨架屏, SSR
- webpack 优化
原生通信
JSBridge 通信原理, 有哪几种实现的方式?
JsBridge 给 JavaScript 提供了调用 Native 功能,Native 也能够操控 JavaScript。这样前端部分就可以方便使用地理位置、摄像头以及登录支付等 Native 能力啦。JSBridge 构建 Native 和非 Native 间消息通信的通道,而且是 双向通信的通道。
- JS 向 Native 发送消息 : 调用相关功能、通知 Native 当前 JS 的相关状态等。
- Native 向 JS 发送消息 : 回溯调用结果、消息推送、通知 JS 当前 Native 的状态等。
TIP
实现一个简单的 JSBridge,设计思路?