掌控网站性能-经常使用优先级揭示优化网页资源加载顺序 (掌控网站性能是什么)
当你关上阅读器的网络标签时,你会看到少量的优惠。资源正在下载,信息正在提交,事情正在记载,等等。
由于有太多的优惠,有效地治理这些流量的优先级变得至关关键。带宽争用是实在存在的,当一切恳求同时触发时,有些HTTP恳求的优先级并不像其他恳求那样高。例如,假设你必定选用,你或许更宿愿某人的付款恳求成功成功,而不是仅仅示意他们尝试过的剖析恳求。而让你的关键图片尽快显示无疑比在页面底部渲染你的标志更为关键。
幸运的是,阅读器领有越来越多的工具来协助优先处置一切这些网络优惠。这些优先级揭示协助阅读器在资源有限时,对哪些恳求应该优先处置做出更少的假定和更明白的决策。
这是一套有用的工具,当它们失掉很好的应用时,它们可以对页面性能发生实质性的影响,包括那些越来越关键的外围网络目的。让咱们探求其中的一些,以及它们最有协助的一些场景。
这是一套有用的工具,当它们失掉很好的应用时,它们可以对页面性能发生实质性的影响,包括那些越来越关键的外围网络目的。让咱们探求其中的一些,以及它们最有协助的一些场景。
优先加载的资源
现代阅读器有一个遭到良好支持的方法,可以通知阅读器以后页面最终须要哪些资源:<link.../>。当它放在文档的<head>中时,阅读器会被批示尽快以高优先级下载它。
公平地说,阅读器中的预加载扫描器曾经十分长于这方面的上班。因此,预加载通常最实用于晚些时刻发现的资源-任何不间接由你的加载的物品,比如经过内联样式属性加载的背景图像。但它也实用于任何其他或许不像你宿愿的那样被阅读器优先思考的物品。
例如:自动状况下,Chrome会以十分高的优先级加载字体,但假设某人的网络衔接速度很慢,它会经常使用备用字体并降低该优先级。
思考一个仅经过@font-face规定加载的字体:
@font-face{font-family:"InterVariable";src:url("./font.woff2")format("woff2");}
在加载时,由于网络衔接慢,该字体取得了最低的下载优先级,虽然它关于页面的视觉体验十分关键。
但咱们可以经过预加载该资源来笼罩阅读器的选择:
如今它更受欢迎了:
你可以间接在链接标签上经常使用fetchpriority来明白批示相对优先级,这在同时预加载多个资源时十分有用。
这是一个假定的场景,你想预加载两种字体,但想让其中一种优先于另一种:
网络优惠的结果会反映这些批示。
何时经常使用
通常,当资源不间接由HTML加载,但对页面的体验至关关键时(例如字体、CSS背景图像等),经常使用预加载。当预加载多种同类型的资源,且你明白知道哪个最关键时,参与fetchpriority属性。
优先化fetch()恳求
![经常使用优先级揭示优化网页资源加载顺序](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
我以为,FetchAPI是现代网络的最佳工具之一。与XMLHttpRequest相比,它有一些很好的配置,比如在外发恳求时收回优先信号的才干。
最容易想到的用例是:剖析恳求。当带宽有限并且有多个恳求在口头时,阅读器会自行选择优先级。但咱们作为工程师应该知道,通常的剖析恳求应该优先于页面目的更为关键的其他恳求。现代的fetch()使这变得便捷。
上方是两个恳求简直同时入队的便捷设置:
fetch("http://localhost:8000/pay",{method:"POST",body:paymentBody,});fetch("http://localhost:8000/log",{method:"POST",body:loggingBody,});
自动状况下,阅读器会智能将它们都视为"高"优先级:
如今,咱们要明白地通知阅读器每个恳求的优先级:
fetch("http://localhost:8000/pay",{method:"POST",body:paymentBody,+priority:"high"});fetch("http://localhost:8000/log",{method:"POST",body:loggingBody,+priority:"low"});
这次,优先级是不同的:
或许的担心是"low"优先级的恳求或许会失落-假设用户过早分开页面,恳求或许会被敞开。这是一个真正的疑问。依据几个要素,封锁标签页或转到下一个页面或许造成一个关键但相对低优先级的恳求被停止。
幸运的是,fetch()还接受一个keepalive选项。当设置为true时,即使页面中断,阅读器也会成功该恳求。
何时经常使用
当你知道多个恳求正在并发口头,并且你明白知道哪个最关键(或哪个可以安保地被升级)时,批示fetch()的优先级。
优先化<img/>恳求
假设咱们不做任何不凡处置,阅读器会尽量确定页面上最关键的图像。为了说明这一点,我加载了以下图像,它们之间的距离很大,所以只要一个会在"页面首部"显示。
阅读器发现了哪个最关键,但这花了一秒钟。当开局下载时,这三者都是低优先级。但很快,页面首部的那个切换到了高优先级。
当我为第一张图片参与fetchpriority属性时,状况变得愈加可预测:
尔后,cat-1.jpeg从一开局就以最高的优先级加载。虽然最后令人隐晦,但这是有情理的。阅读器十分长于确定资源的关键性,但它从明白的批示中受益。假设你知道一张图片很关键,就明白说明。
顺便说一句,这个个性与本地图像提早加载十分搭,这是如今十分受支持的个性。
有了这个,阅读器就知道如何加载图像,只在适合的时刻加载。在我的状况下,它甚至不会开局恳求初始加载时屏幕外的图像。同样,它会等到它们更接远视口。
何时经常使用
当你知道它们对页面体验十分关键时,对图像经常使用明白的fetchpriority。主图像是一个很好的开局,它甚至可以影响页面的外围网络目的-特地是LCP(最大内容绘制)。
页面上带有src属性的任何个别<script/>在失掉时都会失掉高优先级,但这有一个掂量:在它加载并口头之前,它会阻止解析页面的其他局部。出于这个要素,async属性很有用。它会以低优先级在后盾恳求脚本,并在预备好后立刻口头。知道这一点,以下设置行为是可预测的:
<scriptasyncasync')"></script><scriptsync')"></script><script>console.log("inline");</script>
异步脚本在优先级中被降低:
控制台确认,在async脚本加载环节中,准许解析和口头后续脚本。
非阻塞,但高优先级的脚本
大少数时刻,这种行为都很好。但有时,你或许宿愿脚本既以高优先级加载,又异步加载。
一个或许的场景是在落地页的英雄局部装置一个小的SPA。为了保管页面的外围网络目的,特地是LCP和FID(初次输入提早,很快将被下一个绘制的交互所取代),你须要高度优先这个脚本(毕竟,它担任构建和供电你的运行)。但同时,你不宿愿它阻止页面的其他局部启动解析。
所以,咱们给它一个fetchpriority:
<scriptasyncasync')"></script><scriptsync')"></script><script>console.log("inline");</script>
如今,它以提高的优先级下载,同时依然不阻止页面的其他局部:
控制台验证了这一点。有了更高的优先级,异步脚本加载得更快。在这种状况下,甚至比同步和内联的还要快。
虽然我这里没有特地玩它,然而,是的,fetchpriority也实用于提早的脚本。
何时经常使用
当你提早知道脚本的优先级,并且疑心阅读器或许没有足够的信息来自行选择时,将fetchpriority放在你的脚本上。正如我所提到的,关于你宿愿以非阻塞、异步的形式加载的脚本,优先化它们特地有协助。
无心经常使用
很容易对这样的工具过于热衷,造成适度经常使用。所以,要小心-这样做或许会付出代价。正如俗话所说:强调一切=强调无。理想上,适度经常使用或许实践上使得阅读器更难治理网络争用,侵害页面的性能。
MDN甚至特地在他们的优先级揭示文档中指出:
所以,不要由于这些工具存在就感觉有任务经常使用它们。小心经常使用。
回忆:何时揭示
这里有很多内容,所以让咱们极速回忆一下你或许选用经常使用优先级揭示的机遇。这些都不是详尽无遗的。只是一些好的开局。
让阅读器猜得少些
阅读器十分长于弄分明如何以及何时下载使咱们的页面运转的物品。但它并不总是那么好。它不知道一个页面存在的要素,也不知道它的各个局部面前的用意。所以偶然,它可以经常使用一些额外的协助。
这就是为什么这些优先级揭示存在的要素:为了使指令明晰,并且让阅读器很少无时机做出失误的决策。下次当你钻研自己运行程序的网络优惠时,记住它们,当无心义时,经常使用它们来协助使你的页面性能愈加智能。
网站性能优化怎么办
一、前端优化网站性能优化是一个很综合的话题,涉及到服务器的配置和网站前后端程序等各个方面,我只是从实际经历出发,分享一下自己所尝试过的网站性能优化方法。 之所以在标题上挂一个web2.0,是因为本文更偏重于中小网站的性能优化,我所使用的系统也是典型web2.0的LAMP架构。 首先讲讲前端的优化,用户访问网页的等待时间,有80%是发生在浏览器前端,特别是页面和页面中各种元素(图片、CSS、Javascript、 flash…)的下载之上。 因此在很多情况下,相对于把大量的时间花在艰苦而繁杂的程序改进上,前端的优化往往能起到事半功倍的作用。 雅虎最近将内部使用的性能测试工具yslow向第三方公开,并发布了著名的网站性能优化的十三条规则,建议你下载并安装yslow,并作为测评网站优化效果的工具。 下面我挑其中特别有价值的具体说明一下优化的方法:对于第一次访问您网站,尚未在浏览器cache中缓存您网站内容的用户,我们可以做的事情包括:1)减少一个页面访问所产生的http连接次数对于第一次访问你网站的用户,页面所产生的http连接次数是影响性能的一个关键瓶颈。 对策:- 尽量简洁的页面设计,最大程度减少图片的使用,通过放弃一些不必要的页面特效来减少javascript的使用。 - 使用一些优化技巧,比如利用图片的背景位移减少图片的个数;image map技术;使用Inline images将css图片捆绑到网页中。 - 尽量合并js和css文件,减少独立文件个数。 2) 使用gzip压缩网页内容使用gzip来压缩网页中的静态内容,能够显著减少用户访问网页时的等待时间(据说可达到60%)。 主流的web服务器都支持或提供gzip压缩,如果使用apache服务器,只需要在配置文件中开启 mod_gzip(apache1.x)或mod_deflate(apache2.x)即可。 凡是静态的页面,使用gzip压缩都能够显著提高服务器效率并减少带宽支出,注意图片内容本身已经是压缩格式了,务必不要再进行压缩。 3)将CSS放在页面顶端,JS文件放在页面底端CSS的引用要放在html的头部header中,JS文件引用尽量放在页面底端标签的后面,主要的思路是让核心的页面内容尽早显示出来。 不过要注意,一些大量使用js的页面,可能有一些js文件放在底端会引起一些难以预料的问题,根据实际情况适当运用即可。 4)使JS文件内容最小化具体来说就是使用一些javascript压缩工具对js脚本进行压缩,去除其中的空白字符、注释,最小化变量名等。 在使用gzip压缩的基础上,对js内容的压缩能够将性能再提高5%。 5)尽量减少外部脚本的使用,减少DNS查询时间不要在网页中引用太多的外部脚本,首先,一次dns的解析过程会消耗20-120毫秒的时间;其次,如果在页面中引用太多的外部文件(如各种广告、联盟等代码),可能会因为外部文件的响应速度而将你的网站拖得很慢。 如果不得不用,那么就尽量将这些脚本放在页脚吧。 不过有一点需要提及,就是浏览器一般只能并行处理同一域名下的两个请求,而对于不同子的域名则不受此限制,因此适当将本站静态内容(css,js)放在其他的子域名下(如 )会有利于提高浏览器并行下载网页内容的能力。 对于您网站的经常性访问用户,主要的优化思路就是最大限度利用用户浏览器的cache来减少服务器的开销。 1)在header中添加过期时间(Expires Header)在header中给静态内容添加一个较长的过期时间,这样可以使用户今后访问只读取缓存中的文件,而不会与服务器产生任何的交互。 不过这样做也存在一些问题,当图片、CSS和js文件更新时,用户如果不刷新浏览器,就无法获得此更新。 这样,我们在对图片、css和js文件修改时,必须要进行重命名,才能保证用户访问到最新的内容。 这可能会给开发造成不小的麻烦,因为这些文件可能被站点中的许多文件所引用。 flickr提出的解决办法是通过url rewrite使不同版本号的URL事实上指向同一个文件,这是一个聪明的办法,因为url级别的操作效率是很高的,可以给开发过程提供不少便利。 要理解为什么这样做,必须要了解浏览器访问url时的工作机制:a. 第一次访问url时,用户从服务器段获取页面内容,并把相关的文件(images,css,js…)放在高速缓存中,也会把文件头中的expired time,last modified, ETags等相关信息也一同保留下来。 b. 用户重复访问url时,浏览器首先看高速缓存中是否有本站同名的文件,如果有,则检查文件的过期时间;如果尚未过期,则直接从缓存中读取文件,不再访问服务器。 c. 如果缓存中文件的过期时间不存在或已超出,则浏览器会访问服务器获取文件的头信息,检查last modifed和ETags等信息,如果发现本地缓存中的文件在上次访问后没被修改,则使用本地缓存中的文件;如果修改过,则从服务器上获取最新版本。 我的经验,如果可能,尽量遵循此原则给静态文件添加过期时间,这样可以大幅度减少用户对服务器资源的重复访问。 2)将css和js文件放在独立外部文件中引用将css和js文件放在独立文件中,这样它们会被单独缓存起来,在访问其他页面时可以从浏览器的高速缓存中直接读取。 一些网站的首页可能是例外的,这些首页的自身浏览可能并不大,但却是用户访问网站的第一印象以及导向到其他页面的起点,也可能这些页面本身使用了大量的ajax局部刷新及技术,这时可以将 css和js文件直接写在页面中。 3)去掉重复的脚本在IE中,包含重复的js脚本会导致浏览器的缓存不被使用,仔细检查一下你的程序,去掉重复引用的脚本应该不是一件很难的事情。 4)避免重定向的发生除了在header中人为的重定向之外,网页重定向常在不经意间发生,被重定向的内容将不会使用浏览器的缓存。 比如用户在访问,服务器会通过301转向到/,在后面加了一个“/”。 如果服务器的配置不好,这也会给服务器带来额外的负担。 通过配置apache的 alias或使用mod_rewrite模块等方法,可以避免不必要的重定向。 还有一些,比如使用CDN分发机制、避免CSS表达式等、避免使用ETags等,因为不太常用,这里就不再赘述了。 做完了上述的优化,可以试着用yslow测试一下网页的性能评分,一般都可以达到70分以上了。 当然,除了浏览器前端和静态内容的优化之外,还有针对程序脚本、服务器、数据库、负载的优化,这些更深层次的优化方法对技术有更高的要求。 本文的后半部分将重点探讨后端的优化。 二、后端优化上次写完web2.0网站前端优化篇之后,一直想写写后端优化的方法,今天终于有时间将思路整理了出来。 前端优化可以避免我们造成无谓的服务器和带宽资源浪费,但随着网站访问量的增加,仅靠前端优化已经不能解决所有问题了,后端软件处理并行请求的能力、程序运 行的效率、硬件性能以及系统的可扩展性,将成为影响网站性能和稳定的关键瓶颈所在。 优化系统和程序的性能可以从以下的方面来入手:1)apache、mysql等软件的配置的优化尽管apache和mysql等软件在安装后使用的默认设置足以使你的网站运行起来,但是通过调整mysql和apache的一些系统参数,还是可以追求更高的效率和稳定性。 这个领域中有很多专业的文章和论坛(比如:),要想掌握也需要进行深入的研究和实践,这里就不重点讨论了。 2)应用程序环境加速这里仅以我最常应用的php开发环境为例,有一些工具软件可以通过优化PHP运行环境来达到提速的目的,其基本原理大致是将PHP代码预编译并缓存起来,而不需要改变任何代码,所以比较简单,可以将php的运行效率提升50%以上。 比较常用的免费php加速工具有:APC( http: ///?package=APC)、Turck MMCache()、php accelebrator(),还有收费的Zend Performance Suite3)将静态内容和动态内容分开处理apache是一个功能完善但比较庞大的web server,它的资源占用基本上和同时运行的进程数呈正比,对服务器内存的消耗比较大,处理并行任务的效率也一般。 在一些情况下,我们可以用比较轻量级的web server来host静态的图片、样式表和javascript文件,这样可以大大提升静态文件的处理速度,还可以减少对内存占用。 我使用的web server是来自俄罗斯的nginx,其他选择方案还包括lighttpd和thttpd等。 4)基于反向代理的前端访问负载均衡当一台前端服务器不足以应付用户访问时,通过前端机实现web访问的负载均衡是最快速可行的方案。 通过apache的mod_proxy可以实现基于反向代理的负载均衡,这里推荐使用nginx做代理服务器,处理速度较apache更快一些。 5)应用缓存技术提高数据库效能,文件缓存和分布式缓存数据库访问处理并发访问的能力是很多网站应用的关键瓶颈,在想到使用主从结构和多farm的方式构建服务器集群之前,首先应该确保充分使用了数据库查询的缓存。 一些数据库类型(如mysql的innoDB)自身内置对缓存的支持,此外,还可以利用程序方法将常用的查询通过文件或内存缓存起来。 比如通过 php中的ob_start和文件读写函数可以很方便的实现文件形式的缓存,而如果你拥有多台服务器,可以通过memcache技术通过分布式共享内存来对数据库查询进行缓存,不仅效率高而且扩展性好,memcache技术在livejournal和等知名网站应用中都得到了检验。 6)服务器运行状态的检测,找到影响性能的瓶颈所在系统优化没有一劳永逸的方法,需要通过检测服务器的运行状态来及时发现影响性能的瓶颈,以及可能存在的潜在问题,因为网站的性能,永远取决于木桶中的短板。 可以编写一些脚本来检测web服务的运行,也有一些开源的软件也提供了很好的功能7)良好的扩展架构是稳定和性能的基础一些技巧和窍门可以帮你度过眼前的难关,但要想使网站具备应付大规模访问的能力,则需要从系统架构上进行彻底的规划,好在很多前人无私的把他们架构网站的经验分享给我们,使我们可以少走甚多弯路。 我最近读到的两篇有启发的文章:- 从LiveJournal后台发展看大规模网站性能优化方法 - Myspace的六次重构最后不得不提到程序编码和数据库结构对性能的影响,一系列糟糕的循环语句,一个不合理的查询语句、一张设计不佳的数据表或索引表,都足以会使应用程序运行的速度成倍的降低。 培养全局思考的能力,养成良好的编程习惯,并对数据库运行机制有所了解,是提高编程质量的基础。
企业网站前端性能优化怎么处理
网站性能优化中前端优化是非常重要的,我们需要知道的是用户在访问网页的等待的时间,有超过80%的时候都是在浏览器前端的,特别是网页和页面中的各种元素(图片、CSS、Javascript、flash)。所以在许多情况下,与其花费大量时间进行艰苦和繁杂的程序改进相比,对前端的部分进行优化的时候,基本上都是能够达到事半功倍效果的。建议大家可以选择下载并安装yslow,这个工具可以对我们的网站的性能是否得到好的优化有个很好的权衡的作用,下面我们就来看下一些特别有效的网站性能优化的具体方法。
1、减少一个页面访问所产生的http连接数
这一页生成的http连接数是第一次访问你的站点的,http连接数量是一个十分关键的部分。网页设计尽可能简明,尽可能减少图片的使用,并通过放弃一些不必要的页面效果来减少javascript的使用。使用优化技巧,例如利用图片的背景移动来减少图片的数量;图像映射技术;使用内线图像将css图片绑定到网页中。尽可能合并js和css文件,减少单独的文件数量。
2、把CSS放在页面顶部,JS文件放在页面的底部
CSS的引用要放在html头部,JS文件引用尽量放在页面底部的标签之后,最为重要的就是要展现出网页的核心的内容。但是目前有些人在制作网页的时候往往使用了数量众多的js,可能有些js文件放在底层就会出现不少的问题,所以我们在实际使用的时候就要特别的注意了。
3、最小化JS文件内容
这个部分也十分的重要,经常会使用到的方法就是使用js压缩工具来对程序员写出来的脚本进行压缩,去掉里面一些多余的部分,比如空白字符、注释等。利用gzip压缩技术,压缩js内容可以使性能提高5%。
4、要在独立的外部文件中引用css和js文件
把css和js文件放到单独的文件中,这样就可以分别缓存,当访问其他页面的时候,就可以直接在流量器中进行读取了。
所以,如果要进行网站性能优化的话,那么,不妨可以参考以上介绍的这些,从而让网站的性能可以达到最佳。
网站端性优化免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。