美文网首页
三、页面性能优化

三、页面性能优化

作者: 这位网友 | 来源:发表于2017-11-27 16:49 被阅读14次

《指尖上行——移动前端开发进阶之路》学习笔记

第三章:介绍页面性能的优化原理,如如何进行资源优化、加载优化及脚本优化,这可以保证较快的访问速度,可以更好地增加用户体验,减少用户流失。

3.1 优化原理

3.1.1 为什么优化

降低用户浏览门槛和制作成本,为用户提供更好的用户体验。

3.1.2 优化思路
  • 全局观优化
  • 四两拨千斤
  • 主次分明
  • 重用
3.1.3 资源优化
3.2.1 图像
  • 减少使用图像
  • 图像格式的选择
  • 图像压缩及合并
3.2.2 音频
  • 移动端音频格式解析
    推荐MP3格式
  • 音频工具
  • 音频参数及压缩
  • 音频雪碧图
    P162-P166
3.2.3 视频
  • 移动端视频格式解析
  • 视频工具
  • 视频参数及压缩
  • 视频加载
    P166-P167
3.2.4 代码
  • 控制HTML的DOM层级
  • 处理空格
  • 简化命名
  • 把样式表放在头部
  • 把脚本放在最后,必要时延迟加载
  • 合理使用CSS选择器

3.3 加载优化

3.3.1 加载原理
  • HTTP协议
    <1>事务
    <2>报文
    请求报文和响应报文,
    HTTP报文包含:起始行,首部字段,主体。
    对于Web前端开发人员来说,服务器策略会极大影响开发者和用户的部分主要有以下几点: 1. 服务器缓存策略。2. 响应报文主体编码格式。3. 客户端与服务器连接方式。
    <3>连接

  • 加载资源类型
    HTTP协议给每种需要传输的对象都打上数据格式标签,名为MIME类型。
    它是一种文本标记,表示一种对象类型和一个特定的子类型,中间由一条斜杠来分割,如:Content-type:image/jpeg
    <1>HTML文档
    <2>样式表
    <3>JavaScript文档
    <4>图片
    <5>其他资源

3.3.2 浏览器分析
  • 解析及加载原理
    <1>浏览器解析并完成请求的完整过程
    等待加载、阻塞、代理服务器谈判、请求发送、等待服务器响应、内容下载耗时、初始化连接、SLL
    <2>浏览器HTML解析与资源加载顺序
3.3.3 加载优化实战
  • 请求分类原则
    第1种:需要在第一次访问时必须加载的请求
    第2种:在用户触发某些交互行为时加载的请求
    第3种:用户无需知晓,只需在第一类请求全部加载完成后,静默进行加载的请求
  • 优化实现原理

3.4 脚本优化

3.4.1 执行效率
  • 本地变量
    尽量减少使用全局变量,因为全局变量需要搜索更长的作用域链,存在生命周期长,不利于内存释放、过多容易混淆及增加错误可能性等。

  • 对象
    我们可以通过delete来删除键值,从而消除引用。也可以通过将值设为null来消除引用,这种方式不会改变对象结构。

  • 函数
    <1>匿名函数
    我们可以在匿名函数中声明变量,这样就不会造成全局变量污染。
    (function(){函数体})()
    <2>闭包函数

  • 运算、判断
    二进制操作优于Math
    慎用 || : 大量运行 if( x == null ){ x={} } 优于 x = x || {}
    switch:多个 if...else if 使用 switch, 性能优于多个 if..else if..

  • 循环

  • 严格模式
    严格模式是一种将更好的错误检查引入代码中的方法。在使用严格模式的时候,无法使用:隐式声明的变量、将值赋给只读属性或将属性添加到不可扩展的对象等。
    具体内容参考:P186-P188

3.4.2 Web Worker

在HTML5中的多线程是这样一种机制,它允许在Web程序中并发执行多个脚本,成为一个线程,相互独立,并且由浏览器中的JavaScript引擎负责管理。

  • 创建线程
var worker = new Worker("worker.js");
var worker = new Worker(blob);
  • 线程通信

我们可以用以下两种写法来接收数据

Worker.onmessage = function (event) {};
Worker.addEventListener("message", target);

同时可以通过以下两种写法来发送数据

Worker.postmessage(message, taransferList);
Worker.postMessage({
    operation: "list",
    // ArrayBuffer object
    input: buffer,
    threshold: 0.8,
},[buffer]);
  • Worker基本使用
创建新的Worker
var worker = new Worker("worker.js");

传递参数
worker.postMessage("test");

接收消息
worker.onmessage = function (e) {
    var message = e.data;
}

异常处理
worker.onerror = function (e) {
    console.log("Error at" + e.filename + ":" + e.lineno + e.message);
}

结束Worker
worker.terminate();

载入类和工具函数
importScripts("utils/base64.js", "utils/Map.js"...)
需要注意的是,importScripts是同步的方法,一旦importScripts方法返回就可以开始使用载入的脚本,而不需要回调函数。
  • Worker作用域
    当创建一个新的Worker时,该代码会运行在一个全新的JavaScript运行环境中,完全与创建Worker的脚本隔离。

  • 共享线程
    共享线程避免了线程的重复创建和销毁过程,降低了系统性能的消耗,可以同时有多个页面的线程连接。

创建新的Worker
var worker = new SharedWorker("sharedworker.js");

传递参数
worker.port.postMessage("message");

接收消息
worker.port.onmessage = function (e) {
    var message = e.data;
}

可以参考一下:HTML5 Web Worker的使用

相关文章

  • web页面性能优化以及SEO

    web页面性能优化能够提高页面加载速度,提升用户体验度,基于三秒法则,每个网站都极力优化页面性能。 SEO(Sea...

  • iOS性能优化之页面加载速率

    iOS性能优化之页面加载速率 iOS性能优化之页面加载速率

  • 三、页面性能优化

    《指尖上行——移动前端开发进阶之路》学习笔记 第三章:介绍页面性能的优化原理,如如何进行资源优化、加载优化及脚本优...

  • 性能优化

    请说出三种减少页面加载时间和性能优化,文件资源优化的方法?

  • 2020 前端 React 面试

    性能优化 性能优化,永远是面试的重点,性能优化对于 React 更加重要 在页面中使用了setTimout()、a...

  • App页面性能优化 -- Core Animation篇

    写在前面 什么时候需要考虑页面性能问题 如何进行页面性能评估 如何具体实施性能优化 PS: 任何提前优化都是魔鬼 ...

  • 前端性能初步优化

    性能优化有两个方向 优化页面渲染 减小页面体积,提升网络加载 优化页面渲染 对于优化页面渲染可以进行如下方案来进行...

  • 前端性能优化的三个维度

    前端性能优化可以分为三个level:静态资源优化、接口访问优化、页面渲染速度优化,在操控门槛上依次递增,优化效果上...

  • iOS 性能优化

    ios性能优化(一)ios性能优化(二)ios性能优化(三)

  • web前端开发编码规范及性能优化

    代码优化 这个部分仅仅将代码优化本身,不考虑性能,关于代码部分的性能优化在 页面渲染 部分 代码优化 中 HTML...

网友评论

      本文标题:三、页面性能优化

      本文链接:https://www.haomeiwen.com/subject/rmjdbxtx.html