设计稿上的尺寸如何转化
rem 单位
使用rem为元素设定字体大小时,相对的只是HTML根元素
举个例子:
如果设计稿是 1080px ,7.5*144 = 1080
7.5是自定义的,确保7.5144=1080(设计稿尺寸)完成屏幕的适配 ,如果屏幕变成了360,7.5不变,144px会变成48px(487.5=1080)
也可以将7.5设成10.8,144设成100,也能达到一样的效果
// 响应式rem适配方案 -------适用于设计稿为1080px
$rem: 1rem / 144;
@function rem($px) {
@return $px * $rem;
}
function detectOrient () {
var width = document.documentElement.clientWidth || window.innerWidth
var height = document.documentElement.clientHeight || window.innerHeight
// 竖屏
if (width <= height) {
if (width >= 1200) {
width = 1200
}
if (width <= 320) {
width = 320
}
// 设置html 根元素的字体大小
document.documentElement.style.fontSize = (width / 7.5) + 'px'
return false
} else {
// 横屏
if (height >= 1200) {
height = 1200
}
if (height <= 320) {
height = 320
}
document.getElementsByTagName('html')[0].style.fontSize = height / 7.5 + 'px'
return false
}
}
detectOrient()
window.onresize = function () {
detectOrient()
}
暗黑模式是怎么实现的
手机系统有一个暗黑模式,切换的时候,要求h5随之变化。
几种方案:
-
使用cookie,将cookie dark=1 设置到 .xxx.com 下,拿到cookie值得知此时的模式
-
整俩页面,一个黑一个白,让他们自己切换url (哪个小天才想出来的)
-
本次是什么实现的?如果cookie 获取不到,安卓又不愿意改,那就没办法了。比如本次需求,使用的方式是,前一页面获取到了cookie,再将下一个页面url带上dark=1的查询参数,那我们实际上要做的就是带有dark=1的这个页面,获取后即可判断。 为下一页调取了安卓提供的方法 —— loading加载动画,并获取cookie为下一页设置可判断暗黑模式的根据
存在的问题
每次切换模式,都会退出当前页面,需要重新进入,这样再次进入,就会切换黑白模式
首次进入列表页时,需要调用关闭loading,因为上一页给设置了
防抖&节流
本来想着不用监听input查询,后来经过某些人的离奇之手,让我想到也有这么一些有毒的人,致力于要搞垮你的系统,开足马力狂点回车,就要给你玩坏,所以我想了想,又做了一个限制。
防抖:
指触发事件后 n 秒后才执行函数,如果在 n 秒内又触发了事件,则会重新计算函数执行时间
节流:
连续触发事件但是在 n 秒中只执行一次函数
浏览器渲染机制
发生了什么?
切换暗黑模式的时候,会有白色背景闪烁,主要是css的引入时机问题
Webview打开H5加载流程
初始化Webview -> 请求页面 -> 下载数据 -> 解析HTML -> 请求 js/css 资源 ->DOM 渲染 -> 解析 JS 执行 -> JS 请求数据 -> 解析渲染 -> 下载渲染图片-> 页面完整展示
DOM渲染之前耗时主要在两部分:初始化Webview 和 数据请求,一般Webview首次初始化在400ms这个量级,二次加载能少一个量级。
数据请求依赖网络,网络请求一般经过:DNS查询、TCP 连接、HTTP 请求和响应。数据包括HTML、JS和CSS资源,这些都是在webview在loadRequest 之后做的,这一阶段,用户所见到的都是白屏
H5页面渲染
-
处理 HTML 标记并构建 DOM 树
-
处理 CSS 标记并构建 CSSOM(CSS Object Model) 树
-
将 DOM 与 CSSOM 合并成一个渲染树
-
根据渲染树来布局,以计算每个节点的几何信息
-
将各个节点绘制到屏幕上
这五个步骤并不一定一次性顺序完成。如果 DOM 或 CSSOM 被修改,以上过程需要重复执行,这样才能计算出哪些像素需要在屏幕上进行重新渲染。实际页面中,CSS 与 JavaScript 往往会多次修改 DOM 和 CSSOM
H5页面加载度量
-
白屏时间(first paint time):地址栏输入网址后回车 到 浏览器出现第一个元素(网络、服务端性能,前端页面结构设计)
-
可操作时间(dom Interactive):地址栏输入网址后回车 到 用户可以进行正常的点击、输入等操作,默认可以统计domready时间,因为通常会在这时候绑定事件操作
-
首屏时间:地址栏输入网址后回车 - 浏览器第一屏渲染完成(白屏时间,资源下载执行时间等)
-
总下载时间:页面所有资源都加载完成并呈现出来所花的时间,即页面 onload 的时间;
-
加载时间:页面所有元素加载完成;
-
在App中打开H5页面,还需要统计WebView的初始化时间
Load 和 DOMContentLoaded 区别
-
Load 事件触发代表页面中的 DOM,CSS,JS,图片已经全部加载完毕
-
DOMContentLoaded 事件触发代表初始的 HTML 被完全加载和解析,不需要等待 CSS,JS,图片加载
参考资料
(其他的文章关的太快找不到了,后面再补充)