title
、description
、keywords
:搜索对着三项的权重逐个减少,title
值强调重点便可,重要关键词出现不要超过2次,并且要靠前,不一样页面title
要有所不一样;description
把页面内容高度归纳,长度合适,不可过度堆砌关键词,不一样页面description
有所不一样;keywords
列举出重要关键词便可HTML
代码,符合W3C规范:语义化代码让搜引擎容易理解网页HTML
代码放在最前:搜索引擎抓取HTML
顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容必定会被抓取js
输出:爬虫不会执行js
获取的内容iframe
:搜索引擎不会抓取iframe
中的内容alt
<img>
的title
和alt
有什么区别title
属性当鼠标滑动到元素上时显示内容alt
是<img>
的特有属性,是图片内容的等价描述,用于图片没法加载时显示、读屏器阅读图片。可提升图片可访问i性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析GET
方法javascript
POST
方法css
PUT
方法html
HEAD
方法前端
DELETE
方法html5
OPTIONS
方法java
TRACE
方法node
CONNECT
方法android
URL
交给DNS
域名解析,找到真实IP
,向服务器发送请求;HTML、JS、CSS
、图像等);HTML、JS、CSS
等)进行语法解析,创建相应的内部数据结构,如(HTML
的DOM
);将域名解析为ip地址css3
走缓存git
浏览器DNS缓存
本机DNS缓存
路由器DNS缓存
网络运营商服务器DNS缓存 (80%的DNS解析在这完成的)
递归查询 www.a.b.com.cn
发送请求
返回响应
解析报文,渲染页面
先预解析(将须要发送请求的标签的请求发出去)
从上到下解析html文件
遇到HTML标签,调用html解析器将其解析DOM树
遇到css标记,调用css解析器将其解析CSSOM树
link 阻塞 - 为了解决闪屏,全部解决闪屏的样式
style 非阻塞,与闪屏的样式不相关的
将DOM树和CSSOM树结合在一块儿,造成render树
layout布局 render渲染
遇到script标签,阻塞,调用js解析器解析js代码,可能会修改DOM树,也可能会修改CSSOM树,
将DOM树和CSSOM树结合在一块儿,造成render树
layout布局 render渲染(重排重绘)
script标签的属性
script标签放在body下,放置屡次重排重绘,可以操做dom
TCP四次挥手(浏览器挥手两次,服务器挥手两次。 断开请求须要两次挥手, 断开响应须要两次挥手)
第一次挥手:浏览器发送服务器,告诉服务器,我东西(请求报文)发完了,服务器准备关闭
第二次挥手:服务器发送浏览器,告诉浏览器,我东西接受完了,我准备关闭,你也准备关闭
第三次挥手:服务器发送浏览器,告诉浏览器,我东西(响应报文)发完了,浏览器准备关闭
第四次挥手:浏览器发送服务器,告诉服务器,我东西接受完了,我准备关闭,你也准备关闭
content
方面
HTTP
请求:合并文件、CSS
精灵、inline Image
DNS
查询:DNS
缓存、将资源分布到恰当数量的主机名DOM
元素数量Server
方面
CDN
ETag
Gzip
压缩Cookie
方面
cookie
大小css
方面
CSS
表达式<link>
不使用@import
javascript
方面
javascritpt
和css
从外部引入javascript
和css
DOM
访问css
精灵HTML
中拉伸图片1xx
:信息状态码
100 Continue
继续,通常在发送post
请求时,已发送了http header
以后服务端将返回此信息,表示确认,以后发送具体参数信息2xx
:成功状态码
200 ok
正常返回信息201 Created
请求成功而且服务器建立了新的资源202 Accepted
服务器已接受请求,但还没有处理3xx
: 重定向
301 Move Permanently
请求的网页已永久移动到新网址,搜索引擎抓新网址内容和新网址302 Found
临时重定向,资源临时被转移到新网址,搜索引擎抓新网址内容和旧网址303 See Other
临时性重定向,且老是使用 GET 请求新的 URI。304 Not Modified
资源重定向浏览器缓存中 自从上次请求后,请求的网页未被修改过4xx
:客户端错误
400 Bad Requset
服务为其没法理解请求的格式,客户端不该当尝试再次使用相同的内容发起请求401 Unauthorized
请求未受权。403 Forbidden
禁止访问404 Not Found
找不到如何与URI
相匹配的资源。输入网址有误5xx
:服务器错误
500 Internal Server Error
最多见的服务器端错误。503 Service Unavailable
服务器端暂时没法处理请求(多是过载或维护)。HTML
语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析。css
样式状况下也以一种文档格式显示,而且使容易阅读的。SEO
。layout engineer
或Rendering Engine
)和JS
引擎HTML
、XML
、图像等等)、整理讯息(例如加入CSS
),以及计算网页的显式方式,而后会输出至显式器或打印机。浏览器的内核的不一样对于网页的语法解释会有不用,因此渲染效果也不相同。全部网页浏览器、电子邮件客户端以及其余须要编辑、显式网络内容的应用程序都须要内核JS
引擎:解析和执行JavaScript
来实现网页的动态效果JS
引擎并无区分的很明确,后来JS
引擎愈来愈独立,内核就倾向于只指渲染引擎.有一个网页标准计划小组制做了一个 ACID 来测试引擎的兼容性和性能。内核的种类不少,如加上没什么人使用的非商业的免费内核,可能会有10多种,可是常见的浏览器内核能够分这四种:Trident
、Gecko
、Blink
、Webkit
。
Trident(IE内核)
:国内不少的双核浏览器的其中一核即是 Trident,美其名曰 "兼容模式"。表明: IE、傲游、世界之窗浏览器、Avant、腾讯TT、猎豹安全浏览器、360极速浏览器、百度浏览器等。Window10 发布后,IE 将其内置浏览器命名为 Edge,Edge 最显著的特色就是新内核 EdgeHTML。Gecko(firefox)
: Mozilla FireFox(火狐浏览器) 采用该内核,Gecko 的特色是代码彻底公开,所以,其可开发程度很高,全世界的程序员均可觉得其编写代码,增长功能。 惋惜这几年已经没落了, 好比 打开速度慢、升级频繁、猪同样的队友flash、神同样的对手chrome。webkit(Safari)
:Safari 是苹果公司开发的浏览器,所用浏览器内核的名称是大名鼎鼎的 WebKit。如今不少人错误地把 webkit 叫作 chrome内核(即便 chrome内核已是 blink 了),苹果感受像被别人抢了媳妇,都哭晕再厕所里面了。表明浏览器:傲游浏览器三、 Apple Safari (Win/Mac/iPhone/iPad)、Symbian手机浏览器、Android 默认浏览器Chromium/Bink(chrome)
在 Chromium 项目中研发 Blink 渲染引擎(即浏览器核心),内置于 Chrome 浏览器之中。Blink 实际上是 WebKit 的分支。大部分国产浏览器最新版都采用Blink内核。Presto(Opera)
:Presto 是挪威产浏览器 opera 的 "前任" 内核,为什么说是 "前任",由于最新的 opera 浏览器早已将之抛弃从而投入到了谷歌怀抱了。html5
如今已经不是SGML
的子集,主要是关于图像,位置,存储,多任务等功能的增长
canvas
video
和audio
localStorage
长期存储数据,浏览器关闭后数据不丢失sessionStorage
的数据在浏览器关闭后自动删除article
、footer
、header
、nav
、section
calendar
、date
、time
、email
、url
、search
webworker
、webscket
、Geolocation
basefont
、big
、center
、font
、s
、strike
、tt
、u
frame
、frameset
、noframes
HTML5
新标签
IE8/IE7/IE6
支持经过document.createElement
方法产生的标签html5
新标签html5shim
HTML5
的离线存储怎么使用,工做原理能不能解释一下?html5
的离线存储是一个基于新建的.appcache
文件的缓存机制(不是存储技术),经过这个文件上的解析清单离线存储资源,这些资源就会想cookie
同样被存储从了下来。以后当网络在处于离线状态下时,浏览器会经过被离线存储技的数据进行页面展现mainfest
的属性。cache.mainfest
文件中编写离线存储的资源。window.applicationCache
进行需求实现html5
的离线存储资源进行管理和加载的呢?html
头部有mainfest
属性,它会请求mainfest
文件,若是是第一次访问app
,那么浏览器就会根据mainfest
文件的内容下载相应的资源而且进行离线存储。若是已经访问过app或网页
而且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,而后浏览器会对比新的mainfest
文件与旧的mainfest
文件,若是文件没有发生改变,就不作任何操做,若是文件改变了,那么就会从新下载文件中的资源并进行离线存储。cookie
,sessionStorage
,和localStorage
的区别?cookie
是网站为了标示用户身份而存储在用户本地终端(Client Side
)上的数据(一般通过加密)cookie
数据始终在同源的http
请求中携带(即便不须要),就会在浏览器和服务器间来回传递sessionStorage
和localStorage
不会自动把数据发给服务器,仅保存在本地cookie
数据大小不能超过4ksessionStorage
和localStorage
虽然也有存储大小的限制,但比cookie
大得多能够达到5M或者更大localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据sessionStorage
数据在当前浏览器窗口关闭后自动删除cookie
设置的cookie
过时时间以前一直有效,即便窗口或浏览器关闭iframe
有哪些缺点iframe
会阻塞主页面的Onload
事件SEO
iframe
和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载iframe
以前须要考虑这两个缺点。若是须要使用iframe
,最好是经过JavaScript
动态给iframe
添加src
属性值,这样能够绕开以上两个问题CSS
和JS
、结构行为表现的分离<!DOCTYPE>
声明位于文档中的最前面,处于 <html>
标签以前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档JS
运做模式是 以该浏览器支持的最高标准运行Doctype
不存在或格式不正确会致使文档以混杂模式呈现a
b
span
img
input
select
strong
div
ul
ol
li
dl
dd
h1~h6
p
<br>
<hr>
<img>
<input>
<link>
<meta>
margin
和padding
属性,行内元素只有margin-left
、margin-right
、padding-left
、padding-right
起做用class
:为元素设置类标识data-
: 为元素增长自定义属性draggable
: 设置元素是否可拖拽id
: 元素id,文档内惟一lang
: 元素内容的的语言svg
绘制出来的每个图形的元素都是独立的DOM
节点,可以方便的绑定事件或用来修改。canvas
输出的是一整幅画布svg
输出的图形是矢量图形,后期能够修改参数来自由放大缩小,不会失真和锯齿。而canvas
输出标量画布,就像一张图片同样,放大会失真或者锯齿HTML5
不基于 SGML
,所以不须要对DTD
进行引用,可是须要doctype
来规范浏览器的行为HTML4.01
基于SGML
,因此须要对DTD
进行引用,才能告知浏览器文档所使用的文档类型svg
border-radius
js
实现须要一个点在不在圆上的简单算法、获取鼠标坐标等等<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
// width 设置viewport宽度,为一个正整数,或字符串‘device-width’
// device-width 设备宽度
// height 设置viewport高度,通常设置了宽度,会自动解析出高度,能够不用设置
// initial-scale 默认缩放比例(初始缩放比例),为一个数字,能够带小数
// minimum-scale 容许用户最小缩放比例,为一个数字,能够带小数
// maximum-scale 容许用户最大缩放比例,为一个数字,能够带小数
// user-scalable 是否容许手动缩放
复制代码
延伸提问
mate标签中的viewport属性,initial-scale设置为1
rem按照设计稿标准走,外加利用transform的scale(0.5)缩小一倍便可;
全局处理
iframe
(阻塞父文档onload
事件)
iframe
会阻塞主页面的onload
事件SEO
iframe
和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载iframe
,最好是经过javascript
动态给iframe
添加src
属性值,这样能够绕开以上两个问题<style></style>
<script></script>
会阻塞页面,(由于renderer
进程中JS
线程和渲染线程是互斥的)href
和src
会阻塞页面其余资源的加载(阻塞下载进程)gzip
,CDN
托管,data
缓存,图片服务器HTML
标签致使的带宽浪费,前端用变量保存ajax
请求结果,每次操做本地变量,不用请求,减小请求次数innerHTML
代替DOM
操做,减小DOM
操做次数,优化JavaScript
性能<!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=”author” content=”name, email@gmail.com”/> <!--网页做者-->
<meta name=”robots” content=”index,follow”/> <!--搜索引擎抓取-->
<meta name=”viewport” content=”initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no”> <!--为移动设备添加 viewport-->
<meta name=”apple-mobile-web-app-title” content=”标题”> <!--iOS 设备 begin-->
<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=”apple-mobile-web-app-status-bar-style” content=”black”/>
<meta name=”format-detection” content=”telphone=no, email=no”/> <!--设置苹果工具栏颜色-->
<meta name=”renderer” content=”webkit”> <!-- 启用360浏览器的极速模式(webkit)-->
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”> <!--避免IE使用兼容模式-->
<meta http-equiv=”Cache-Control” content=”no-siteapp” /> <!--不让百度转码-->
<meta name=”HandheldFriendly” content=”true”> <!--针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,好比黑莓-->
<meta name=”MobileOptimized” content=”320″> <!--微软的老式浏览器-->
<meta name=”screen-orientation” content=”portrait”> <!--uc强制竖屏-->
<meta name=”x5-orientation” content=”portrait”> <!--QQ强制竖屏-->
<meta name=”full-screen” content=”yes”> <!--UC强制全屏-->
<meta name=”x5-fullscreen” content=”true”> <!--QQ强制全屏-->
<meta name=”browsermode” content=”application”> <!--UC应用模式-->
<meta name=”x5-page-mode” content=”app”> <!-- QQ应用模式-->
<meta name=”msapplication-tap-highlight” content=”no”> <!--windows phone 点击无高亮
设置页面不缓存-->
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
复制代码
IE
:trident
内核Firefox
:gecko
内核Safari
:webkit
内核Opera
:之前是presto
内核,Opera
现已改用Google - Chrome
的Blink
内核Chrome
:Blink
(基于webkit
,Google
与Opera Software
共同开发)css
文件seo
)搜索引擎更友好,排名更容易靠前alt
(alt text):为不能显示图像、窗体或
applets的用户代理
(UA),
alt属性用来指定替换文字。替换文字的语言由
lang属性指定。(在IE浏览器下会在没有
title时把
alt当成
tool tip`显示)
title(tool tip)
:该属性为设置该属性的元素提供建议性的信息
strong
:粗体强调标签,强调,表示内容的重要性
em
:斜体强调标签,更强烈强调,表示内容的强调点
CDN
缓存更方便cookie
带宽src
用于替换当前元素,href
用于在当前文档和引用资源之间确立联系。src
是source
的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所咋位置,在请求src
资源时会将其指向的资源下载并应用到文档内,例如js
脚本,img
图片和frame
等元素<script src ="js.js"></script> 当浏览器解析到该元素时,会暂停其余资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,相似于将所指向资源嵌入当前标签内。这也是为何将js脚本放在底部而不是头部
复制代码
href
是Hypertext Reference
的缩写,指向网络资源所在位置,创建和当前元素(锚点)或当前文档(连接)之间的连接,若是咱们在文档中添加png-8
、png-24
、jpeg
、gif
、svg
可是上面的那些都不是面试官想要的最后答案。面试官但愿听到是Webp,Apng
。(是否有关注新技术,新鲜事物)
Webp
:WebP
格式,谷歌(google
)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG
的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay
等知名网站已经开始测试并使用WebP
格式。
在质量相同的状况下,WebP
格式图像的体积要比JPEG
格式图像小40%。
Apng
:全称是“Animated Portable Network Graphics”
, 是PNG
的位图动画扩展,能够实现png
格式的动态图片效果。04年诞生,但一直得不到各大浏览器厂商的支持,直到日前获得 iOS safari 8
的支持,有望代替GIF
成为下一代动态图标准
dns
缓存,cdn
缓存,浏览器缓存,服务器缓存css
图片,可使用CSSsprite
,SVGsprite
,Iconfont
、Base64
等技术。cookie
session
url
重写input
ip
地址Cookie
http
协议无状态问题cookie
,浏览器自动保存下来cookie
,服务器经过解析cookie
,从而判断浏览器以前的行为(是否登陆过),返回给浏览器相应响应cookie
res.cookie(key, value, options)
cookie
app.use(cookieParser());
req.cookies
cookie
res.clearCookie(key)
document.cookie
读写二合一
document.cookie = 'hello=123;expires=' + new Date(Date.now() + 1000 * 3600 * 24);
cookie
的有效期cookie
(浏览器打开到浏览器关闭是一次会话)
cookie
res.cookie('userId', 'sunwukong', {maxAge: 1000 * 3600 * 24 * 7});
7天内生效res.cookie('userId', 'sunwukong', {maxAge: 1000 * 3600 * 24 * 365 * 10});
10年内生效,永久cookie
数量比较多,每次请求时都会自动携带cookie
ession
http
协议无状态问题session
的id
做为cookie
返回给浏览器,浏览器接受后就存起来cookie
,服务器就要解析cookie
获得session_id
,session_id
找到对应session
对象,而后根据session
对象中的内容返回给浏览器相应的响应session
进行持久化储存,就得使用上数据库req.session
读写二合一cookie
和 session
区别cookie
在浏览器端 session
在服务器端cookie
较小 session
无限大cookie
较多 session
只产生一个cookie
,较小cookie
安全更低(保存不是敏感数据) session
安全更高(登录、注册)Webstorage
SessionStorage
和LocalStorage
都是本地存储,不会被发送到服务器上。同时空间比Cookie
大不少,通常支持5-10MWindow.sessionStorage
和Window.localStorage
属性来实现本地存储机制。
Storage.getItem('key')
;
Storage.setItem('key', 'value')
;
Storage.removeItem('key')
;
Storage.clear()
Storage
对象发生变化时(即建立/更新/删除数据项时,重复设置相同的键值不会触发该事件,Storage.clear()
方法至多触发一次该事件)会触发LocalStorage
是浏览器本地持久化存储技术,也叫永久存储SessionStorage
是浏览器本地临时存储技术,也叫会话存储store
库完美兼容全部浏览器IndexDB
和WebSQL
IndexedDB
和 WebSQL
都是用于客户端存储大量结构化数据。API
使用索引来实现对该数据的高性能搜索。IndexedDB
是非关系型,而WebSQL
是关系型。WebSQL
官方不在维护,但兼容性较好,基本不使用。IndexedDB
在维护,兼容性较差localForage
库使用IndexDB
和WebStorage
PWA
Progressive Web Application - PWA
),是一种能够提供相似于原生应用程序(native app)
体验的网络应用程序(web app)
。PWA
能够用来作不少事。其中最重要的是,在离线(offline)
时应用程序可以继续运行功能。这是经过使用名为 Service Workers
的网络技术来实现的。Manifest
Request-Line
包括:请求方法,请求URI
,协议版本,CRLF
general-header
,request-header
或者entity-header
,每一个一行以CRLF结束报文首行
GET http://localhost:3000/test?username=123&password=456 HTTP/1.1
请求方式 请求地址 协议名/版本号 1.0 1.1 2.0
请求方式、请求地址、get请求查询字符串参数
报文头
Host: localhost:3000
主机地址
Connection: keep-alive
保持长链接
Cache-Control: max-age=0
不使用缓存
强缓存 Cache-Control(1.1) expires(1.0)
协商缓存 last-modified etag if-modified-since if-none-match
Upgrade-Insecure-Requests: 1
容许使用https协议
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
用户代理:浏览器内核版本信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
容许接受数据
text/html html文件
application/xhtml+xml xhtml文件
application/xml;q=0.9 xml数据,优先级更低
image/webp,image/apng 图片的格式 webp chrome推出的压缩程度更好的图片,只能在android和chrome使用
*/*;q=0.8 容许接受任意文件/数据,优先级最低
Accept-Encoding: gzip, deflate, br
容许接受的文件压缩格式
Accept-Language: zh-CN,zh;q=0.9
语言
Cookie: Webstorm-129da853=8726c2d8-3b88-48b8-8db0-dd82e62fb79a; _ga=GA1.1.1365509058.1552220281
cookie解决http协议问题。
空行
报文体
复制代码
报文首行
POST http://localhost:3000/test HTTP/1.1
报文头
Host: localhost:3000
Connection: keep-alive
Content-Length: 29
请求体的长度,单位byte
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
Origin: http://localhost:3000
访问服务器的地址
Content-Type: application/x-www-form-urlencoded
application/x-www-form-urlencoded form表单默认值,传输数据是采用urlencoded编码 key=value&key=value
application/json 传输数据是json
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost:63342/class1128/01.nodejs/day03/index.html?_ijt=vdq7mfcge1jbednt6is99tah4c
请求来源的地址: 广告计费、防盗链
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Webstorm-129da853=8726c2d8-3b88-48b8-8db0-dd82e62fb79a; _ga=GA1.1.1365509058.1552220281
报文空行
报文体
username=admin&password=admin
post请求请求参数
复制代码
HTTP
版本,状态码,状态描述,后面跟一个CRLF
响应首行
HTTP/1.1 200 OK
响应状态码
* 响应头
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
响应体类型
Content-Length: 46
ETag: W/"2e-E6oVGh8rOKZ0GZBtPMn6O0HzO+s"
Date: Tue, 12 Mar 2019 07:27:03 GMT
Connection: keep-alive
* 空行
* 响应体
<h1>这是express服务器返回的响应</h1>
汉字占3字节 普通占1字节
复制代码