网站性能优化提升的30个方法策略:郑州云计算服务器

時間:2023-12-29 07:51:41 作者:郑州云计算服务器 熱度:郑州云计算服务器
郑州云计算服务器描述::

网站功能优化是一个复杂的话题,涉及的技巧许多,如何通过优化网页功能提高用户体会,网站功能优化涵盖了网站响应的所有方面,如缓存、设置CDN、重构、资源优化等,但所有这些都可以逐步完成。作为一名eb开发人员,您应该将本文作为参考,并始终铭记在试验前后丈量功能。

1、尽量减少HTTP请愿次数

合并js

合并css

图片sprite

2、耽搁加载内容

图片懒加载

数据懒加载(点击察看更多)

性能懒加载(曝光或者点击后加载模块、js性能模块)

3、采用离线缓存

把常用的变动又少的js、css、图片存储到localstorage,第二次拜访的时候直接走本地缓存。在移动端采用广泛。

4、CSS、JS放置正确位置

把css放在head中,保证页面看到的时候样式是对的。

把js放到body里最后位置,防范加载js阻塞页面。

5、静态资源压缩

图片、CSS、JS在发布前要压缩。

6、静态资源采用多个域名

对于图片、CSS、JS,可采用几个域名,可以并发加载。

7、静态资源采用cdn存储

用户与你网站服务器的接近水平会阴碍响应时间的长短。 可以把静态资源放到内容分发网络(Content Delivery Netork,CDN)中加快拜访速度。

8、预加载

在某个性能还没显现时,在空闲时间预先加载相关图片或者js代码

9、DOM操纵优化

采用JavaScript拜访DOM元素对照慢,因此为了牟取更多的应该页面,应该做到:

缓存已经拜访过的有关元素

线下更新完节点之后再将它们添加到文档树中

避免采用JavaScript来改动页面布局

10、优化算法

在js处置中优化查找、排序算法。尽量少采用嵌套轮回。

11、采用事件代理

有时候我们会感到到页面反映迟钝,这是由于DOM树元素中附加了过多的事件句柄并且些事件句病被频繁地触发。这就是为什么说采用event delegation(事件代理)是一种好想法了。假如你在一个div中有10个按钮,你只需要在div上附加一次事件句柄就可以了,而不用去为每一个按 钮增加一个句柄。事件冒泡时你可以逮捕到事件并判断出是哪个事件发出的。

你同样也不用为了操纵DOM树而等待onload事件的产生。你需要做的就是等待树组织中你要拜访的元素显露。你也不用等待所有图像都加载完毕。 你可能会但愿用DOMContentLoaded事件来取代 事件利用程序中的onAvailable想法。

12、减少DNS查找次数

减少主机名的数目还可以减少页面中并行下载的数目。减少DNS查找次数可以节省响应时间,但是减少并行下载却会增加响应时间。我的开导原则是把这些页面中 的内容分割成至少两部门但不过份四部门。这种结局就是在减少DNS查找次数和维持较高水平并行下载两者之间的权衡了。

13、依据域名划分页面内容

把页面内容划分成若干部门可以使你最大限度地实现平行下载。因为DNS查找带来的阴碍你首先要确保你采用的域名数目在2个到4个之间。例如,你可以把用到的HTML内容和动态内容放在exampleorg上,而把页面各种组件(图片、脚本、CSS)差别寄存在 statics1exampleorg和staticsexampleorg上。

14、可缓存的AJAX

在一些场合下ajax可采用缓存减少网络开销。

让我们来看一个范例:

一个Web20的Email客户端会采用Ajax来自动完成对用户地址薄的下载。假如用户在上次采用过Email eb利用程序后没有对地址薄作任何的改动,而且Ajax响应通过Expire或者Cacke-Control头来实现缓存,那么就可以直接从上一次的缓存中读取地址薄了。必要告知阅读器是采用缓存中的地址薄还是发送一个新的请愿。这可以通过为读取地址薄的Ajax URL增加一个含有上次编制时间的时间戳来实现,

例如,t=11900241612等。假如地址薄在上次下载后没有被编制过,时间戳就不变,则从阅读器的缓存中加载从而减少了一次HTTP请愿过程。假如用户改动过地址薄,时间戳就会用来确认新的URL和缓存响应并不匹配,阅读器就会重要请愿更新地址薄。 即使你的Ajxa响应是动态生成的,哪怕它只实用于一个用户,那么它也应该被缓存起来。这样做可以使你的Web20利用程序更加快捷。

15、减少DOM元素数目

一个复杂的页面意味着需要下载更多数据,同时也意味着JavaScript遍历DOM的效率越慢。比如当你增加一个事件句柄时在500和5000个 DOM元素中轮回功效肯定是不一样的。 大批的DOM元素的存在意味着页面中有可以不用移除内容只需要替代元素标签就可以精简的部门。你在页面布局中采用表格了吗?你有没有仅仅为了布局而引入更多的元素呢?

也许会存在一个合适或者在语意是更贴切的标签可以供你采用。 YUI CSS utilities可以给你的布局带来庞大辅助:grscss可以帮你实现整体布局,fontcss和resetcss可以辅助你移除阅读器默 认形式。它提供了一个重新审阅你页面中标签的时机,比如只有在语意上有意义时才采用,而不是由于它具有换行功效才采用它。

DOM元素数目很容易计算出来,只需要在Firebug的管理台内输入: documentgetElementsByTagName(‘*’)length 那么多少个DOM元素算是多呢?这可以比较有很好标志采用的相似页面。比如Yahoo!主页是一个内容非常多的页面,但是它只采用了700个元素(HTML标签)。

16、使iframe的数目最小

ifrmae元素可以在父文档中插入一个新的HTML文档。了解iframe的任务理然后才能更加有效地采用它,这一点很重要。

好处: 解决加载慢慢的第三方内容如图标和广告等的加载疑问; Security sandbox; 并行加载脚本;

的瑕疵: 即时内容为空,加载也需要时间; 会阻挠页面加载; 没有语意;

17、不要显露404页面过错

HTTP请愿时间耗损是很大的,因此采用HTTP请愿来牟取一个没有用处的响应(例如404没有找到页面)是彻底没有必须的,它只会降低用户体会而不会有一点优点。 有些站点把404过错响应页面改为“你是不是要找***”,这固然改进了用户体会但是同样也会糟蹋服务器资源(如数据库等)。最糟糕的场合是指向外部 JavaScript的链接显露疑问并返回404代码。首先,这种加载会损坏并行加载;其次阅读器会把试图在返回的404响应内容中找到可能有用的部门当 作JavaScript代码来执行。

18、为文件头指定Expires或Cache-Control

这条守则包括两方面的内容: 对于静态内容:设置文件头过时时间Expires的值为“Never expire”(永不过时) 对于动态内容:采用适当的Cache-Control文件头来辅助阅读器进行有条件的请愿 网页内容设计现在越来越充沛,这就意味着页面中要涵盖更多的脚本、样式表、图片和Flash。第一次拜访你页面的用户就意味着进行多次的HTTP请愿,但 是通过采用Expires文件头就可以使这样内容具有缓存性。它避免了接下来的页面拜访中不必须的HTTP请愿。Expires文件头常常用于图像文件, 但是应该在所有的内容都采用他,包括脚本、样式表和Flash等。

阅读器(和代理)采用缓存来减少HTTP请愿的大小和次数以加快页面拜访速度。Web服务器在HTTP响应中采用Expires文件头来通知客户端内容需 要缓存多长时间。下面这个范例是一个较长时间的Expires文件头,它通知阅读器这个响应直到2020年4月15日才过时。 Expires Thu, 15 Apr 2020 200000 GMT 假如你采用的是Apache服务器,可以采用ExpiresDefault来设定相对当前日期的过时时间。

下面这个范例是采用 ExpiresDefault来设定请愿时间后10年过时的文件头: ExpiresDefault “access plus 10 years” 要切记,假如采用了Expires文件头,当页面内容变更时就必要变更内容的文件名。

依Yahoo!来说我们常常采用这样的步骤:在内容的文件名中加上版本号,如yahoo_206js。 采用Expires文件头只有会在用户已经拜访过你的网站后才会起作用。当用户首次拜访你的网站时这对减少HTTP请愿次数来说是无效的,由于阅读器的缓 存是空的。因此这种想法对于你网站功能的改进场合要根据他们“预缓存”存在时对你页面的点击频率(“预缓存”中已经涵盖了页面中的所有内容)。 Yahoo!建立了一套丈量想法,我们发明所有的页面阅读量中有75~85都有“预缓存”。通过采用Expires文件头,增加了缓存在阅读器中内容的 数目,并且可以在用户接下来的请愿中再次采用这些内容,这甚至都不需要通过用户发送一个字节的请愿。

19、Gzip压缩文件内容

服务器开启Gzip,能减少50以上的传输。

尽早刷新输出缓冲

当用户请愿一个页面时,无论如何都会消费200到500毫秒用于后台结构HTML文件。在这期间,阅读器会一直空闲等待数据返回。在PHP中,你可以采用 flush()想法,它许可你把已经编译的好的部门HTML响应文件先发送给阅读器,这时阅读器就会可以下载文件中的内容(脚本等)而后台同时处置剩余的 HTML页面。这样做的功效会在后台懊恼或者前台较空闲时更加显著。

20、简朴请愿采用GET方式

Yahoo!Mail团队发明,当采用XMLHttpRequest时,阅读器中的POST想法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此采用GET最为适当,由于它只需发送一个TCP包(除非你有许多cookie)。IE中URL的最大长度为2K,因此假如你要发送一个过份2K的 数据时就不能采用GET了。 一个有趣的差异就是POST并不像GET那样实际发送数据。依据HTTP规范,GET意味着“获取”数据,因此当你仅仅获取数据时采用GET更加有意义(从语意上讲也是如此),相反,发送并在服务端保留数据时采用POST。

21、避免采用CSS表达式(Expression)

CSS表达式是动态设置CSS属性的强盛(但危险)想法。Internet Explorer从第5个版本开端支持CSS表达式。下面的范例中,采用CSS表达式可以实现隔一个小时切换一次底细色彩: background-color expression( (ne Date())getHours()2 ? “B8D4FF” “F08A00″ ); 如上所示,expression中采用了JavaScript表达式。

CSS属性依据JavaScript表达式的计算结局来设置。

expression想法在其它阅读器中不起作用,因此在跨阅读器的设计中单独针对Internet Explorer设置时会对照有用。

表达式的疑问就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随意移动鼠标都可以轻松到达10000次以上的计算量。

一个减少CSS表达式计算次数的想法就是采用一次性的表达式,它在第一次运行时将结局赋给指定的样式属性,并用这个属性来取代CSS表达式。假如样式属性 必要在页面周期内动态地变更,采用事件句柄来取代CSS表达式是一个可行设法。假如必要采用CSS表达式,一定要铭记它们要计算成千上万次并且可能会对你 页面的功能发生阴碍。

22、采用外部JavaScript和CSS

许多功能条例都是关于如何处置外部文件的。但是,在你采取这些举措前你可能会问到一个更根本的疑问:JavaScript和CSS是应该放在外部文件中呢还是把它们放在页面本身之内呢? 在实际利用中采用外部文件可以提高页面速度,由于JavaScript和CSS文件都能在阅读器中发生缓存。内置在HTML文档中的 JavaScript和CSS则会在每次请愿中随HTML文档重新下载。这固然减少了HTTP请愿的次数,却增加了HTML文档的大小。从另一方面来说, 假如外部文件中的JavaScript和CSS被阅读器缓存,在没有增加HTTP请愿次数的同时可以减少HTML文档的大小。

关键疑问是,外部JavaScript和CSS文件缓存的频率和请愿HTML文档的次数有关。固然有一定的难度,但是仍然有一些指标可以一丈量它。假如一 个会话中用户会阅读你网站中的多个页面,并且这些页面中会重复采用雷同的脚本和样式表,缓存外部文件就会带来更大的利益。 很多网站没有性能建立这些指标。对于这些网站来说,最好的断然想法就是把JavaScript和CSS作为外部文件引用。

对照合适采用内置代码的例外就是 网站的主页,如Yahoo!主页和My Yahoo!。主页在一次会话中拥有较少(可能只有一次)的阅读量,你可以发明内置JavaScript和CSS对于终端用户来说会加快响应时 间。 对于拥有较大阅读量的首页来说,有一种专业可以平衡内置代码带来的HTTP请愿减少与通过采用外部文件进行缓存带来的优点。其中一个就是在首页中内置 JavaScript和CSS,但是在页面下载完成后动态下载外部文件,在子页面中采用到这些文件时,它们已经缓存到阅读器了。

23、用link取代import

前面的最佳实现中提到CSS应该放置在顶端以利于有序加载展示。 在IE中,页面底部import和采用

作用是一样的,因此最好不要采用它。

24、避免采用滤镜

IE独占属性AlphaImageLoader用于改正70以下版本中显示PNG图片的半透彻功效。这个滤镜的疑问在于阅读器加载图片时它会终止内容的 展示并且冻结阅读器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的疑问是多方面的。 彻底避免采用AlphaImageLoader的最好想法就是采用PNG8形式来取代,这种形式能在IE中很好地任务。假如你确切需要采用 AlphaImageLoader,请采用下划线_filter又使之对IE7以上版本的用户无效。

25、剔除重复脚本

在同一个页面中重复引用JavaScript文件会阴碍页面的功能。你可能会以为这种场合并不多见。对于美国前10大网站的查访显示其中有两家存在重复引 用脚本的场合。有两种主要因素导致一个脚本被重复引用的不寻常现象产生:团队规模和脚本数目。假如真的存在这种场合,重复脚本会引起不必须的HTTP请愿和 无用的JavaScript运算,这降低了网站功能。 在Internet Explorer中会发生不必须的HTTP请愿,而在Firefox却不会。在Internet Explorer中,假如一个脚本被引用两次而且它又不可缓存,它就会在页面加载过程中发生两次HTTP请愿。即时脚本可以缓存,当用户重载页面时也会产 生额外的HTTP请愿。 除增加额外的HTTP请愿外,多次运算脚本也会糟蹋时间。在Internet Explorer和Firefox中不管脚本是否可缓存,它们都存在重复运算JavaScript的疑问。 一个避免偶尔产生的两次引用同一脚本的想法是在模板中采用脚本控制模块引用脚本。在HTML页面中采用script 标签引用脚本的最常见想法就是: 在PHP中可以通过创造名为insertScript的想法来替换:

为了防范多次重复引用脚本,这个想法中还应该采用其它机制来处置脚本,如查验所属目录和为脚本文件名中增加版本号以用于Expire文件头等。

26、减小Cookie体积

HTTP coockie可以用于权限验证和个性化地位等多种用途。coockie内的有关信息是通过HTTP文件头来在eb服务器和阅读器之间进行切磋的。因此维持coockie尽可能的小以减少用户的响应时间十分重要。 有关更多信息可以察看Tenni Theurer和Patty Chi的文章“When the Cookie Crumbles”。这们研究中主要包括:

去除不必须的coockie 使coockie体积尽量小以减少对用户响应的阴碍 留心在安适级别的域名上设置coockie以便使子域名不受阴碍 设置合乎逻辑的过时时间。较早地Expire时间和不要过早去清理coockie,都会改良用户的响应时间。

27、对于静态资源采用无coockie域名

当阅读器在请愿中同时请愿一张静态的图片和发送coockie时,服务器对于这些coockie不会做任何地采用。因此他们只是由于某些负面因素而创造的 网络传输。所有你应该确认对于静态内容的请愿是无coockie的请愿。创造一个子域名并用他来寄存所有静态内容。

假如你的域名是exampleorg,你可以在staticexampleorg上存在静态内容。但是,假如你不是在 exampleorg 上而是在顶级域名exampleorg设置了coockie,那么所有对于staticexampleorg的请愿都涵盖coockie。在这种情 况下,你可以再重新买入一个新的域名来存在静态内容,并且要维持这个域名是无coockie的。Yahoo!采用的是 ymig,YouTube采用的是ytimg,Amazon采用的是images-anazon等等。

28、不要在HTML中缩放图像

不要为了在HTML中设置长宽而采用比实际需要大的图片。假如你需要: 那么你的图片(mycatjpg)就应该是100×100像素而不是把一个500×500像素的图片缩小采用。

29、faviconico要小而且可缓存

faviconico是位于服务器根目录下的一个图片文件。它是必然存在的,由于即使你不关怀它是否有用,阅读器也会对它发出请愿,因此最好不要返回一 个404 Not Found的响应。因为是在同一台服务器上,它每被请愿一次coockie就会被发送一次。这个图片文件还会阴碍下载次序,例如在IE中当你在 onload中请愿额外的文件时,favicon会在这些额外内容被加载前下载。 因此,为了减少faviconico带来的弊端,要做到:

文件尽量地小,最好小于1K; 在恰当的时候(也就是你不要盘算再换 faviconico的时候,由于更改新文件时不能对它进行重命名)为它设置Expires文件头。你可以很安全地把Expires文件头设置为未来的几个月。你可以通过核对当前faviconico的上次编制时间来作出判断。Imagemagick可以帮你创造小巧的 favicon。

30、跳转的正确采用

在用户和HTML文档中间增加一个跳转,会拖延页面中所有元素的显示,由于在HTML文件被加载前任何文件(图像、 Flash等)都不会被下载。 有一种常常被网页开发者疏忽却往往十分糟蹋响应时间的跳转现象。这种现象产生在当URL本该有斜杠()却被疏忽掉时。例如,当我们要拜访 astrologyyahooastrology 时,实际上返回的是一个涵盖301代码的跳转,它指向的是astrologyyahooastrology (留心末尾的斜杠)。在Apache服务器中可以采用Alias 或者 mod_rerite或者the DirectorySlash来避免。

连接新网站和旧网站是跳转性能常常被用到的另一种场合。这种场合下往往要连接网站的差异内容然后依据用户的差异类型(如阅读器类型、用户账号所属类型)来 进行跳转。采用跳转来实现两个网站的切换十分简朴,需要的代码量也不多。尽管采用这种想法对于开发者来说可以降低复杂水平,但是它同样降低用户体会。一个 可替换想法就是假如两者在同一台服务器上时采用Alias和modrerite和实现。假如是由于域名的差异而使用跳转,那么可以在eb服务器通过采用 Alias或者modreirte进行跳转。

站長聲明:以上關於【网站性能优化提升的30个方法策略-郑州云计算服务器】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。