1.HTML&浏览器

原文链接:https://github.com/helloyoucan/knowledge

(1)html相关

1、语义化

根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码;同时让浏览器的爬虫和机器很好地解释。

具体可以这样处理:

  1. 少用无语义的标签div和span。
  2. 语义不明显时可用div和p时,优先用p,p有默认的间距,有利于兼容特殊终端。
  3. 不使用纯样式标签b、font、u等,使用css设置。
  4. 强调文本用strong,斜体用em
  5. 表格标题用caption,表头用thead和th,主体用tbody和td,尾部用tfoot
  6. 表单用fieldset包起来,用legend说明表单用途
  7. input标签用label说明,并设input的id与label对应
  8. 新标签:nav、header、main、article、section、footer、aside、details、dialog、time、progress等等
2、meta viewport相关
# 常用
<!DOCTYPE html>  H5标准声明,使用 HTML5 doctype,不区分大小写
<head lang="en"> 标准的 lang 属性写法
<meta charset="utf-8">    声明文档使用的字符编码
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> 优先使用 IE 最新版本和 Chrome
<meta name="description" content="不超过150个字符"/>       页面描述
<meta name="keywords" content="用英文逗号分隔"/>    页面关键词
<meta name=”viewport” content=”initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no”> 为移动设备添加 viewport
<meta name="renderer" content="webkit">  启用360浏览器的极速模式(webkit)
<meta http-equiv="X-UA-Compatible" content="IE=edge">     避免IE使用兼容模式
设置页面不缓存
<meta http-equiv="pragma" content="no-cache">   向后兼容http1.0,当该属性适用,会忽略下面的cache-control和expires
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">     缓存失效日期

# 不常用
<meta name="author" content="name, email@gmail.com"/>    网页作者
<meta name="robots" content="index,follow"/>      搜索引擎抓取
<meta name="apple-mobile-web-app-title" content="标题"> 添加到主屏后的标题(iOS 6 新增)
<meta name="apple-mobile-web-app-capable" content="yes"/>(iOS 6 新增)是否启用 WebApp 全屏模式,删除苹果默认的工具栏和菜单栏

<meta name=”apple-itunes-app” content=”app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL”> 添加智能 App 广告条 Smart App Banner(iOS 6+ Safari)

<meta name="format-detection" content="telphone=no, email=no"/> 忽略页面中的数字识别为电话,忽略email识别

<meta name="apple-mobile-web-app-status-bar-style" content="black"/> 设置苹果工具栏颜色
<meta name="google" value="notranslate" />  关闭chrome浏览器下  翻译   插件
3、src vs href
href
  • Hypertext Reference,超文本链接引用
  • 用于建立当前元素与文档之间的连接
  • 用link加载css时,不会停止对当前文档的处理,link引用的CSS会同时被加载,按顺序加载
src
  • source,src的内容是页面必不可少的一部分,是引入
  • src指向的内容会嵌入到文档中当前标签所在的位置
  • 浏览器解析到该元素时,会停止浏览器的渲染,直到该资源加载完毕(js放在底部)
4、Doctype
  • 告知浏览器解析器用什么文档标准解析这个文档。
  • 不存在或格式不正确会导致文档以兼容模式呈现。
    • 标准模式:排版和JS运行以浏览器支持的最高标准运行。
    • 兼容模式:页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为防止站点无法工作。
  • HTML5不基于SGML(标准通用标记语言),因此不需要对DTD(文档类型定义)进行引用
    • 需要doctype来规范浏览器的行为。
    • HTML4.01基于SGML,所以需要读DTD进行引用,才能告知文档所使用的的文档类型。
5、HTML5

新特性

  • 绘画canvas
  • 媒介回放video和audio、picture(通过媒体查询,加载不同图片)
  • 本地存储
  • 语义化元素
  • 表单控件:calendar、date、time、email、url、search
  • 新的技术:Worker、WebSocketnavigator.geolocation(地理位置)

移除的元素

  • 纯表现元素:center、font等
  • 对可用性产生负面影响的元素:frame、frameset、noframes
6、页面可见性(Page Visibility API)

document.visibilityState的值如下:

  • hidden #页面不可久见
    • 浏览器最小化
    • 没有最小化,但当前页面切换成了背景页
    • 将要卸载(unload)页面
    • 操作系统触发锁屏屏幕
  • visible #页面至少一部分可见
  • prerender #页面即将或正在渲染,处于不可见状态(需要浏览器支持预渲染,Chrome支持)

document.visibilityState 属性只针对顶层窗口

visibilitychange事件
document.addEventListener('visibilitychange', function () {
  // 用户离开了当前页面
  if (document.visibilityState === 'hidden') {
    document.title = '页面不可见';
  }
  // 用户打开或回到页面
  if (document.visibilityState === 'visible') {
    document.title = '页面可见';
  }
});

(2)浏览器相关

1、从URL到页面加载过程
  1. DNS解析获取IP
  2. 建立TCP连接:三次握手
  3. 发送http请求
  4. 服务器接收请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 关闭连接:TCP4次挥手
2、渲染过程
  • 根据HTML解析DOM树
  • 根据CSS解析生成CSS规则树
  • 结合DOM树和CSS规则树,生成渲染树
  • 根据渲染树计算每一个节点的信息(位置、宽高、等)
  • 根据计算好的信息绘制页面
页面加载事件
  • DOMContentLoaded——文档被完全加载和解析完成,其所属script之前的样式表加载解析完成才会触发
  • load——资源及其依赖源完成加载
  • beforeunload——浏览器窗口关闭或刷新
  • unload——文档或一个子资源正在被卸载
3、Repaint & Reflow (重绘和回流)
Repaint(重绘)

当页面中元素样式改变时(不影响文档流中的位置,如:outline、visibility、color、background-color等),浏览器会将新样式赋予给元素并重新绘制它,这个过程成为重绘。

  • 修改不影响文档流中位置(布局)的css
  • 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘
Reflow (回流)

当Render Tree中部分或者全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。

回流必定会发生重绘,重绘不一定会引发回流。

  • 首次渲染
  • 窗口大小改变
  • 元素内容变化
  • 字体大小变化
  • 添加或删除可见的DOM元素
  • 激活CSS伪类
  • 查询某些属性或者调用某些方法
    • clientWidthclientHeightclientTopclientLeft
    • offsetWidthoffsetHeightoffsetTopoffsetLeft
    • scrollWidthscrollHeightscrollTopscrollLeft
    • scrollIntoView()scrollIntoViewIfNeeded()
    • getComputedStyle()
    • getBoundingClientRect()
    • scrollTo()
如何避免?

CSS

  • 避免使用table布局
  • 尽可能在DOM树的最末端改变class
  • 避免设置多层内联样式
  • 动画效果应用到position属性为absolutefixed的元素上
  • 避免使用css表达式(如calc()
  • 使用transform替代top,使用visibility替代display:none
  • 将频繁重绘或者回流的节点设置为图层,图层能够阻止该节点的渲染行为影响别的节点,例如will-changevideoiframe等标签,浏览器会自动将该节点变为图层。
  • CSS3 硬件加速(GPU加速),使用css3硬件加速,可以让transformopacityfilters这些动画不会引起回流重绘 。

JavaScript

  • 避免频繁操作样式,可一次性重写style或将样式定义为class并以此更改class属性
  • 避免频繁操作DOM,可创建documentFragment,在上面操作DOM,再把它插入到文档中
  • 可先设置元素属性为display:none,操作完再显示
  • 避免频繁读取会引发回流/重绘的属性,如要使用则可以缓存起来
  • 对于复杂动画元素可使用绝对定位,使它脱离文档流
4、width & height

dom.style.width/height 内联样式的宽高
dom.currentStyle.width/height IE支持,渲染后的宽高
window.getComputedStyle(dom).width/height 渲染后的宽高
dom.getBoundingClientRect().width/height 根据元素在视窗的绝对位置获取宽高
dom.offsetWidth/offsetHeight 常用

拓展
屏幕宽高:window.screen.width/height
屏幕去除状态栏的宽高:window.screen.availWidth/availHeight
网页全文宽高:document.body.scrollHeight/Width
滚动条移动的距离:document.body.scrollTop/scrollLeft
网页可见区域不带边框的宽高:document.body.clientHeight/clientWidth
网页可见区域带边框对的宽高:document.body.offsetHeight/offsetWidth

5、缓存
  1. Service Worker
    • 运行于浏览器背后的独立线程
    • 必须使用https
    • 可自由控制缓存内容
    • 步骤:注册Service Worker → 监听install事件后缓存文件 → 下次请求时查询是否有缓存,有则直接返回
  2. Memory Cache
    • 内存中的缓存
    • 读取高效,持续性短,随进程释放而释放
    • 是计算机的内存,容量小
    • 部分缓存资源可能是preloader相关指令(preload(提前加载资源)、prefetch(告知浏览器下一页面可能会用到的资源,优先级低,影响下一页面加载速度))
    • 不关心返回资源http缓存头Cache-Control,可能会对Content-Type、CROS等其它特征做校验
  3. Disk Cache
    • 存储在硬盘中,读取速度慢
    • 覆盖广
    • 根据HTTP Header中的缓存字段判断资源的缓存、是否可直接使用、资源过期需重新请求
    • 可跨站点
  4. Push Cache(推送缓存)
    • HTTP/2
    • 前三种缓存都不命中时,才使用
    • 只在会话中存在,会话结束就释放,缓存时间短(谷歌浏览器5分钟左右)
    • 只能被使用一次
    • 浏览器可以拒绝接受已存在的资源推送
    • 可给其它域名推送资源
6、浏览器内核
  • Trident (IE、360、搜狗)
  • Gecko (火狐)
  • Presto (Opera7以上,现在为Blink内核)
  • Webkit (Safari、Chrome)(Chrome的:Blink,是Webkit的分支)
7、常见兼容
  • css reset
  • 事件对象:IE下的是event.x/event.y,火狐下是event.pageX/event.pageY需要处理(event.x?event.x:event.pageX;)
  • Chrome下最小字体是12px,可以加入css属性:-webkit-text-size-adjust: none;
  • 超链接访问过后hover样式不出现,通过改变css属性排列顺序:a:link {} a:visited {} a:hover {} a:active {}

(3)前端监控

数据埋点(数据上报)

  • 用于前端监控,曝光等
  • 使用1x1像素的透明gif图片
  • 没有跨域问题
  • 不会阻塞页面加载,不影响用户体验,只需要new Image对象
  • 能够完成整个http请求+响应
  • 触发GET请求后不需要获取和处理数据、服务器也不需要发送数据
  • 相比XMLHttpRequest对象发送GET请求,性能上更好
  • GIF的最低合法体积最小

Ajax

  • 不常用
  • 会有跨域问题
  • 可发送POST请求
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容