1. H5应用缓存和浏览器缓存的区别
H5引入了应用缓存的概念,就是离线缓存
提高性能,借助manifest文件实现
使用
- 引入
<html manifest="test.appache">
https://www.w3school.com.cn/html5/html_5_app_cache.asp
- 编写manifest文件
manifest文件
CACHE MANIFEST 文件将在首次下载后进行缓存
NETWORK 文件需要与服务器的连接,且不会被缓存
FALLBACK 文件规定当页面无法访问时的回退页面
window.applicationCache
浏览器实现离线缓存
有网络的情况,html标签设置了manifest属性后,浏览器第一次加载网页,会根据manifest属性访问到.appache结尾的文件,然后根据文件内容进行离线缓存。已经访问过的情况下,浏览器会利用已经离线存储的文件资源加载页面,再对比manifest文件时候改变,如果改变了,重新下载文件中的资源并进行离 线存储。
没有网络的时候 直接使用离线缓存的资源文件
2.H5存储
cookie localstorage sessionstorage
- 作用
- 存储时长
- 存储大小
3. h5文档类型和字符集
H5文档类型:HTML使用的UTF-8
https://www.cnblogs.com/wuqiutong/p/5986191.html
Doctype作用
文件类型定义(DTD)声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。声明必须在 HTML 文档的第一行,这并不是一个 HTML 标签。4. HTML全局属性
https://www.w3school.com.cn/tags/html_ref_standardattributes.asp
5.viewport
一个常用的针对移动网页优化过的页面的 viewport meta 标签
<meta name="viewport" content="width=device-width, initial-scale=1.0">
width 设置viewport宽度 device-width 设备宽度
height 设置viewport高度 一般设置了宽度,会自动解析出高度
initial-scale 默认缩放比例(初始缩放比例)
minimum-scale 允许用户最小缩放比例
maximum-scale 允许用户最大缩放比例
user-scalable 是否允许手动缩放
6.meta
<DOCTYPE html> <!--H5 标准声明,使用 HTML5 doctype,不区分大小写-->
<head lang=”en”> <!--标准的 lang 属性写法-->
<meta charset=’utf-8ʹ><!--声明文档使用的字符编码-->
<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=”apple-mobile-web-app-title” content=”标题”><!--iOS 设备 begin-->
<meta name=”apple-mobile-web-app-capable” content=”yes”/><!--添加到主屏后的标题(i 是
否启用 WebApp 全屏模式,删除苹果默认的工具栏和菜单栏-->
<meta name=”renderer” content=”webkit”><!-- 启用 360 浏览器的极速模式(webkit)-->
<meta name=”x5-orientation” content=”portrait”> <!--QQ 强制竖屏-->
<!--设置页面不缓存-->
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
7.响应式布局
-
viewport
-
网格视图
*{ box-sizing:border-box; } //将网页划分成12列 100% / 12 列 = 8.33% class="col-"
-
媒体查询
@media only screen and (max-width:457px){ /*浏览器窗口小于457px时的样式*/ }
8.SEO优化
-
title,description,keywords 搜索对着三项的权重逐个减小 每个页面标题合适 描述合适
title:重点,越是关键内容放在越前面
description:页面内容高度概括,长度合适
keywords:列举重要关键词
-
使用语义化HTML标签 让搜索引擎容易理解网页
-
重要内容 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下,有的搜索引擎对抓取长 度有限制,保证重要内容一定会被抓取
-
重要内容不要用 js 输出:爬虫不会执行 js 取内容
-
少用 iframe :搜索引擎不会抓取 iframe 中的内容
-
非装饰性图片必须加 alt
-
提高网站速度:网站速度是搜索引擎排序的一个重要指标
9.渲染优化
-
禁止使用iframe阻塞文档onload事件
-
禁止使用 gif 图片实现 loading 效果(降低 CPU 消耗,提升渲染性能)
-
使用 CSS3 代码代替 JS 动画(尽可能避免重绘重排以及回流)
-
对于一些小图标,可以使用 base64 位编码,以减少网络请求。但不建议大图使用,比较耗费 CPU
-
页面头部的会阻塞页面;(因为Renderer 进程中 JS 线程和渲染线程是互斥的)
-
页面中空的 href 和 src 会阻塞页面其他资源的加载 (阻塞下载进程)
-
前端模板 JS+数据,减少由于 HTML 标签导致的带宽浪费,前端用变量保存 AJAX 请求结果,每次操作本地变量,不用请求,减少请求次数
-
网页 gzip ,CDN 托管,data 缓存 ,图片服务器
-
用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 javascript 性能
-
当需要设置的样式很多时设置 className 而不是直接操作 style
-
少用全局变量、缓存 DOM 节点查找的结果。减少 IO 读取操作
-
图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳
总:尽量向前端优化、减少数据库操作、减少磁盘 IO
10.js引入位置
- body部分 js在页面加载的时候执行
- head部分 js被调用时执行
11. css优先级计算
- 声明元素选择符 :1
- class选择符:10
- id符:100
- !important 优先级最高
- 优先级相同时,选择最后出现的
- 继承的样式优先级最低
12.重绘和回流
什么是重绘和回流
重绘简单的说就是重新绘页面 回流是元素尺寸,布局,或者被隐藏引起的页面重构
回流必定会引起重绘 但重绘不一定会引起回流
触发回流的条件
添加或者删除可见的DOM元素
元素位置改变,元素尺寸改变
边距、填充、边框、宽度和高度,内容改变
浏览器页面初始化
减少重绘和回流
首先浏览器机制会帮助我们,浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理
- 操作样式时使用 cssText className
- 不在布局信息改变时做DOM查询
- 对于多次重排的元素,如动画,使用绝对定位脱离文档流
13.base64的优缺点
优点:可以加密 减少HTTP请求
缺点:需要消耗CPU进行编码
14. PNG /GIF /JPG 的区别及如何选
GIF
8位像素 256色
无损压缩
支持简单动画
支持 boolean 透明
适合简单动画
JPEG
颜色限于 256
有损压缩
可控制压缩质量
支持透明
适合照片
PNG
有 PNG8 和 truecolor PNG
PNG8 类似 GIF 颜色上限为 256 ,文件小,支持 alpha 透明度,无动画
适合图标、背景、按钮
15.浏览器兼容问题
-
兼容性工具
(html5shiv.js , respond.js , css reset, normalize.css , Modernizr)
-
条件判断,CSS Hack , js检测
-
框架库的选择
渐进增强(progressive enhancement)
针对低版本进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果,交互等改进和追加功能达到更好的用户体验
优雅降级(graceful degradation)
一开始先构建完整的功能,然后再针对低版本的浏览器进行兼容
16.前端性能优化
- 减少HTTP请求
- 减少DOM操作
- 避免不必要的重绘和回流
- 优化css选择器
- css、js压缩
- Gzip压缩
- 将css放置顶部,js放置尾部
- 压缩图片以及精灵图的使用(css sprite)
- 使用CDN加速 适当进行文件缓存
- 合理控制cookie大小
17. 如何解决前端安全性问题
XSS
恶意脚本攻击 跨站脚本攻击
web浏览器本身设计不安全 不会判断恶意代码
CSRF
跨域请求伪造