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

当网页加载很慢的时候,应如何分析其原因并解决问题?

今天在知乎上瞄到一条有趣的问答,题主曰:我是个后端RD,看上了一个前端妹子,昨天吃饭的时候她跟我抱怨她们的页面打开很慢,如何才能快速的分析页面加载慢的原因,在妹子面前表现一下呢?此题目被强大的知友修改

今天在知乎上瞄到一条有趣的问答,题主曰:

我是个后端RD,看上了一个前端妹子,昨天吃饭的时候她跟我抱怨她们的页面打开很慢,如何才能快速的分析页面加载慢的原因,在妹子面前表现一下呢?

此题目被强大的知友修改为更加接地气的标题:

当前端妹子跟我抱怨她们的页面加载很慢的时候,如何在她面前优雅地装逼?

我想这个问题应该是每个程序猿朋友们值得思考的问题,毕竟程序猿不好找女朋友的现状摆在那里。不过知友"姬十三"说出了不幸的真相:

你们程序员找不到女朋友的原因就是在追女孩的时候还想着技术问题!

好了,闲话少说,其实这个问题抛开把妹的因素外,作为一名前端技术人员,应当关注的核心问题在于:当网页加载很慢的时候,应如何分析其原因并解决问题?

且看知友“张皓”的精彩回答

看来题主你的目的是装逼,优雅地装逼,要让妹子觉得你很牛逼对不对?要让妹子听你分析完之后就投怀送抱对不对?

首先,想装逼就要显得随性、自然,看一眼就知道问题在哪。如果你需要吭吭哧哧的查半天log、分析core文件,那逼格自然就降低了许多。那如何才能随性自然呢?答案是看网页瀑布图。啥是瀑布图?这都不知道还追前端妹子?用chrome打开网页,按住option+command+i(windows是F12,但是如果你按的是这个,那么你怎么敢说你要装逼,前端团队都是清一水的mac啊亲,先换个mac再装逼),打开开发者工具看network。
有了瀑布图,下面才是装逼的重点,要故作轻松、轻描淡写的扫一眼瀑布图,然后沉思几秒,语调略带深沉的跟妹子说:“我知道了”。当然,你要真的知道才行,不给妹子说出个所以然来,最后死的还是你。
造成加载很慢的原因很多,但是你只需要知道一些就可以了,下面我就给你说一些常见的问题以及识别方法,如果这些情况都不是,那就只能祝你好运了哥们。

1、你们后端的问题

当网页加载很慢的时候,应如何分析其原因并解决问题?

看到没,第一个请求特别长、特别长,明显比其他请求放到一起不和谐。一般网页第一个请求是动态请求的概率比较大,如果这个请求特别耗时,那肯定不是前端的责任,不是妹子的问题,伦家的html都没加载完呢,你怎么就能说是前端的问题呢。作为一个后端RD,你应该有这种觉悟,勇敢的说这是你的责任,表现出一个男人的气魄来,让妹子觉得你是一个负责的好男人。优化php、优化数据库、优化一切可以优化的东西,要让妹子觉得很爽才行。

2、请求数太多

当网页加载很慢的时候,应如何分析其原因并解决问题?

数一下瀑布图总共有多少行,onload之前如果有几百行,那么请求就太多了。问一下妹子,一下子加载那么多资源真的好么?跟妹子说,css,js该合并的合并,图标该精灵的精灵,告诉妹子使用字体图标也能提升你高大上的形象。还有,有些不重要的东西不用放到onload之前加载,放到后面也一样嘛。网页发请求数就跟妹子的前男友数一样,越少越好。

3、老鼠屎

当网页加载很慢的时候,应如何分析其原因并解决问题?

看到图中的这个请求没?再看看其他请求,这个请求比其他请求的时间大出一个数量级。这种情况一般是因为某一个资源太慢了,它就是一颗老鼠屎,坏掉了整锅汤,导致网页整体变慢。资源慢的原因,你可以跟妹子去星巴克,两个人采取结对编程的方式慢慢把玩这颗老鼠屎,概率比较大的几个可能是:a)资源在第三方站点上,他们很慢;b)这个资源太大了;c)这个资源使用的域名有问题。

4、网络问题

当网页加载很慢的时候,应如何分析其原因并解决问题?

仔细看一下一个单独的http请求,他们会分为好几段,分别是域名解析、建立连接、发送请求、等待响应和接收数据几个阶段。理论上域名解析和建立连接应该占用的时间很小才对,主要的时间应该用在后面几个阶段上。上图中,浅灰色和灰色分别代表域名解析和建立连接,可以看出这两个请求中花费在网络层上的时间太长了,超过总时间的一半还要多。网络层时间过长除了可能和底层网络有关之外,还可能和站点的服务端性能有关(后端RD的事情哦)。当然,如果这种情况发生在向第三方站点发送的请求上(实际上也经常发生),你就可以建议妹子取消或者更换某些站点功能从而避免这样的请求了。

5、接收数据时间过长

上面说了,http请求的大部分时间应该花在后面几个阶段,比如等待响应和接收数据。但是,如果接收数据的时间太长了,长到数百毫秒甚至以秒计算的时候,那也是有问题的。这种情况一般是因为下载的内容太重了,例如大图片、大脚本等。这类问题可以使用GZIP压缩、图片压缩或者JS/CSS的minify等手段来解决。

6、js阻塞请求

当网页加载很慢的时候,应如何分析其原因并解决问题?

图中两个连续的请求之间出现了一个很大的空隙,为啥会出现这个空隙呢?可能是因为妹子写的js性能有问题,解析执行js花了很长时间,导致这段时间的资源加载都被阻塞住了。如果发生了这个情况,你就应该耐心安慰妹子,问一下妹子是不是在写代码的时候身体不舒服啊、心情不好啊之类的关心一下,切记不能直接说妹子代码写的不行,不然肯定没有然后。

7、如果以上都没有

当网页加载很慢的时候,应如何分析其原因并解决问题?

可以和妹子一一翻看每个http请求,仔细研究每个请求头响应头,看看是不是没有设置缓存啦,图片优化的不够好啦之类的。如果担心自己分析不好,可以先找个工具分析一下,比如:http://speed.mmtrix.com/ ,把上面这张图拿给妹子看看,问题一目了然。

写到这里我忽然想到了一点,妹子抱怨慢的时候你当时没有装逼,现在才学如何装逼,还来得及么?来得及么?得及么?及么?么?


推荐阅读
  • 用JavaScript实现的太空人手表
    用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • Ihaveaforminadirectivetemplate:我在指令模板中有一个表单:<formn ... [详细]
  • JavaScript概述1.JavaScript定义JavaScript是Netscape公司开发的一种基于对象和事件驱动的脚本语言。它是弱类型语言,只能由浏览器解释执行。其中:脚本语言:解释运行( ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • JavaScript实现在页面间传值的方法-本文实例讲述了JavaScript实现在页面间传值的方法。分享给大家供大家参考。具体如下:问题如下:在a.html页面中,的 ... [详细]
  • 用SpringBoot实现万能文件在线预览
    推荐一个用SpringBoot搭建的文档在线预览解决方案:kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
author-avatar
swa乄ycat曼颜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有