热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端性能优化1.了解前端性能优化点

1.什么是Web前端web前端本质上是一种GUI软件,本可以直接借鉴其他GUI系统架构设计方法,但是web前端有点特别。1.1传统的GUI软件CS

1.什么是Web前端

web前端本质上是一种G U I软件,本可以直接借鉴其他G U I系统架构设计方法,但是web前端有点特别。

1.1 传统的GUI软件

CS架构GUI软件的开发与部署过程:

这里写图片描述

1.开发
2.将开发好的代码打包到APK软件包,放到应用商场中
3.用户下载应用(即下载了这个安装包),解压,将代码解压到自己的手机上,也就是说,用户的手机上有一个套应用程序的代码,然后再在用户的手机上运行。也就是说用户其实访问的是自己上机上的代码

1.2 web前端的开发与部署过程

前端采用的是BS架构
这里写图片描述
1.开发
2.将开发的代码发布到远程的服务器(webserver以及CDN)
3. 运行时用户在浏览器中输入网址,去服务器请求我们的资源,这时就会动态的增量式的去加载我们的资源
(因为是去服务端请求我们的资源,所以如果能更快更好的在浏览器中加载我们的资源,那么用户体验自然也就更好)

2.浏览器的一个请求从发送到返回都经历了什么?

这里写图片描述

  • 用户在浏览器中输入URL
  • 浏览器对输入的RUL进行解析,将域名发送到DNS服务器中,DNS服务器对该域名查询其所对用的IP地址,并返回给我们的浏览器
  • 然后根据ip地址和端口号去查找服务器
  • 服务端是有mvc架构的
    4.1首先进入controller,进行逻辑处理和分发,然后调用Model
    4.2 进入Model层,该层是负责与数据进行交互的,它会去数据库中读取数据
    4.3 将渲染好的页面听过view层返回给我们的网络
  • 浏览器根据返回的html,css,js进行渲染(这就是浏览器的render),生成DOM树和css树,然后进行整合,然后解析js

3. 请求过程中一些潜在的性能优化点
  • dns是否可以通过缓存减少dns查询时间?
  • 网络请求的过程走最近的网络环境?
  • 相同的静态资源是否可以缓存?
  • 能否减少请求http请求大小?
  • 减少http请求
  • 服务端渲染

3.1DNS解析优化


1、DNS缓存

DNS查询过程大约消耗20毫秒,在DNS查询过程中,浏览器什么都不会做,保持空白。如果DNS查询很多,网页性能会受到很大影响,因此需要用到DNS缓存。
不同浏览器的缓存机制不同: IE对DNS记录默认的缓存时间为30分钟,Firefox对DNS记录默认的缓存时间为1分钟,Chrome对DNS记录默认的缓存时间为1分钟。

缓存时间长:减少DNS的重复查找,节省时间。
缓存时间短:及时检测服务器的IP变化,保证访问的正确性。

2、减少DNS查询次数

DNS查询也消耗响应时间,若网页内容来自各个不同的domain,则客户端首次解析这些domain需要消耗一定的时间,但由于DNS查询结果会缓存在本地系统和浏览器中一段时间,所以DNS查询一般只是对首次访问时的速度有影响。

减少DNS查询次数需要减少来自不同domain的请求的数量,如尽量将外部域的对象下载到本地服务器上等。

3. DNS预解析提升页面速度

遇到请求延时非常严重的情况,DNS解析速度很可能是造成资源延时的最大原因。
页面header中添加了以下代码(用以DNS预解析):

<meta http-equiv&#61;"x-dns-prefetch-control" content&#61;"on" />
<link rel&#61;"dns-prefetch" href&#61;"http://bdimg.share.baidu.com" />
<link rel&#61;"dns-prefetch" href&#61;"http://nsclick.baidu.com" />
<link rel&#61;"dns-prefetch" href&#61;"http://hm.baidu.com" />
<link rel&#61;"dns-prefetch" href&#61;"http://eiv.baidu.com" />

了解&#xff1a;dns-prefetch:

大多数新浏览器已经针对DNS解析进行了优化&#xff0c;典型的一次DNS解析耗费20-120 毫秒&#xff0c;减少DNS解析时间和次数是个很好的优化方式。DNS Prefetching是具有此属性的域名不需要用户点击链接就在后台解析&#xff0c;而域名解析和内容载入是串行的网络操作&#xff0c;所以这个方式能减少用户的等待时间&#xff0c;提升用户体验。

浏览器对网站第一次的域名DNS解析查找流程依次为&#xff1a;

浏览器缓存-系统缓存-路由器缓存-ISP DNS缓存-递归搜索

这里写图片描述

Chrome内置了DNS Prefetching技术, Firefox 3.5 也引入了这一特性&#xff0c;由于Chrome和Firefox 3.5本身对DNS预解析做了相应优化设置&#xff0c;所以设置DNS预解析的不良影响之一就是可能会降低Google Chrome浏览器及火狐Firefox 3.5浏览器的用户体验。

预解析的实现&#xff1a;


  1. 用meta信息来告知浏览器, 当前页面要做DNS预解析:
  2. 在页面header中使用link标签来强制对DNS预解析:
    注&#xff1a;dns-prefetch需慎用&#xff0c;多页面重复DNS预解析会增加重复DNS查询次数。

3.2 网络请求的过程

网络请求的过程其实就解决了网络选择和缓存的问题&#xff0c;在网络请求的过程中很多公司都会使用到CDN&#xff0c;使用CDN就解决了网络选择和缓存的问题&#xff0c;访问CDN是访问静态资源用的&#xff0c;访问静态资源我们所携带的COOKIE是没有用的&#xff0c;所以我们请求CDN是希望能够将http.header中将COOKIE去掉的&#xff0c;但是很多的时候CDN的域名和我们主站的域名是一样的&#xff0c;这就使得我们也携带了COOKIE&#xff0c;所以尽量不要将CDN的域名和主站的域名一样

3.3 对于请求接口

对于请求接口我们是没有办法使用CDN的&#xff0c;但是我们可以使用浏览器缓存&#xff0c;将接口返回的数据缓存到浏览器

3.4 带宽和http请求大小

一个http请求如果可以小一些&#xff0c;那么请求的时候就会快一些

3.5减少http请求

每一个http请求都是对网路的损耗&#xff0c;所以如果可以减少http请求&#xff0c;那么就可以减少网络损耗

3.6服务器渲染

对于现在的大型框架&#xff0c;都不是在服务器直接出html&#xff0c;而是在浏览器端走框架的代码才能渲染我们的页面&#xff0c;因此首屏渲染就会题慢&#xff0c;现在有很多的相关框架在服务端渲染的方案&#xff0c;将代码在服务端渲染&#xff0c;将html直接输出到浏览器&#xff0c;而不是在浏览器中渲染。

深入理解http请求的过程是前端性能优化的核心


推荐阅读
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • SharePoint 指定配置数据库访问账户“域账户\用户”
    大家在安装sharepoint时都会遇到这个问题,域账户,什么是域账户哪?域账户简单理解就是网路账户,与本地账户不同,什么是域哪?域就是控制器。一台Windows计算机,它要么隶属 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • document .ready中的函数怎么被按钮调用? ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
author-avatar
程武钢2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有