前端近几年变化很大,各种工具,库,框架并发。虽然如此,但是网站前端性能优化的思路基本没变。为什么前端性能如此重要?数据显示:
-
只有 10%~20% 的最终用户响应时间花在了下载 HTML 文档上。其余的 80%~90% 时间花在了下载页面中的所有组件中;
-
另外一点是,优化后台需要花费比较大的成本,优化前端只需要适当地遵循一些法则会有较大的提升,相对低成本高收益。
最近读了 Steve Souders 的《高性能网站建设指南》,觉得很不错在此做一下总结。Steve 是 Firebug 和 Yslow 的作者,相信大家都使用过。虽然书中的很多手段都已经过时了,但是思路基本没变,取其精华就好。
本书提出了一套性能黄金法则,优先级越高排名越前,一共14则:
1. 减少HTTP请求2. 使用内容发布网络(CDN)3. 添加Expires头4. 压缩组件5. 将样式表放在顶部6. 将脚本放在底部7. 避免使用CSS表达式8. 使用外部JavaScript和CSS9. 减少DNS查找10. 精简JavaScript11. 避免重定向12. 删除重复的脚本13. 配置ETag14. 使Ajax可缓存
以下分别简单介绍每条法则的缘由:
1. 减少HTTP请求
一般来说,使用外链的脚本和样式表更加有利。分别把外链脚本和样式表进行合并会减少HTTP请求,以节省客户端和服务器之间的通讯次数来加快页面打开速度。但是出于开发的便利,开发的时候一般会采取模块化的方式;这时候可以在部署前采用一些前端构建工具把这些模块文件合并起来再发布。
2. 使用内容发布网络(CDN)
CDN是一组分布在多个不同地理位置的Web服务器,由于距离用户 物理距离比较短,所以能够更加有利于用户获取到静态资源;这种服务通常需要购买,也有一些免费、通用的CDN可使用,国内的可以使用 BootCDN。
3. 添加Expires头
Expires头是用来告诉浏览器该相应的有效期,可以理解为该资源的“保质期”,在期限内可以使用该资源的缓存不需要重新请求。由于浏览器与服务器存在时钟同步问题,HTTP1.1还添加胡了Cache-Control和max-age来弥补Expires头的不足。通常用于脚本,样式表、图片等静态资源。
使用这种策略可能会遇到一个问题是,开发者可能想要在资源过期前这段时间更新它们。这时候,由于浏览器的缓存还没失效,这就需要通过更改文件名来令静态资源 强制失效。有很多种方式给静态资源打上版本号,可以一本正经地打上数字版本号,根据内容生成哈希码也行,甚至有人用π来给自己的资源打版本号(每次。
4. 压缩组件
本书介绍的是gzip的方式压缩静态资源,实际上,这种方式会消耗额外的CPU资源。这种手段通常能够使文件大小减少70%。
5. 将样式表放在顶部
如果把样式表放在底部时,浏览器会延迟显示任何可视化组件。另外,使用 CSS 的 @import等同于把想要加载的样式放在底部,所以不建议使用。对于浏览器的渲染机制,本书并没有过多提及,只是对现象做出了描述以及提供了解决办法。
如果样式表仍然在加载,构建呈现树就是一种浪费,因为在所有样式表加载并解析完毕之前无需绘制任何东西。否则,在其准备好之前显示内容会遇到 FOUC(无样式内容的闪烁,Flash of Unstyled Content)问题。
就是说,如果不把样式表放在
中,当遇到样式时,浏览器就会阻止页面呈现,等待样式表下载完毕。如果把样式表放在底部,在 IE 中还会产生白屏现象。总之,把样式表放进
就能避免这些问题。6. 将脚本放在底部
脚本对页面的影响是:
-
阻塞对齐后面内容的呈现
-
阻塞后面组件的下载
浏览器会在下载脚本的时候阻塞并行下载,因为需要确保脚本能够顺序执行。
关于这点,这里有一篇讲解的比较深入的文章:
JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制但是,实际开发中有时候很难完全遵守这条准则,那只能把能够放在最后的都放在最后。
7. 避免使用CSS表达式
使用CSS 的expression()通常会造成多次运算。实际上,需要用到CSS 表达式的地方,通常能够找到其他替代方案,所以避免使用CSS表达式。
8. 使用外部JavaScript和CSS
使用外部静态文件的优点有:
-
可以被浏览器缓存起来
-
组件可以重用
-
可模块化
-
能够被构建(合并压缩打版本)
-
…
缺点:
-
需要额外创建HTTP 请求
-
…
9. 减少DNS查找
简单来说,DNS 查找就是输入域名对服务器IP 地址的查找过程。DNS 缓存又分为浏览器DNS 缓存、操作系统DNS 缓存。当你输入 www.google.com的时候,浏览器会先去自身的 DNS 缓存里面查找有没有 google 服务器的 IP 地址;如果找不到则继续到操作系统的 DNS 缓存查找;如果浏览器在这两个容器都没有找到 google 的IP 地址记录,则会向广域域名体系查找。
10. 精简JavaScript
减少JavaScript 文件大小的有几种手段,通常被广泛使用的是 精简。精简就是去除JavaScript 代码中的空格、注释等多余的字符,这种方式基本上没有什么缺点。
另外一种方式是 混淆。混淆是在精简的基础上,把函数、变量名都用较短小的字符来替换,从而达到减少文件大小的效果。但是混淆会产生不少麻烦,很有可能会引入错误,虽然有利于防止逆向工程,当同时也增加了自己在线上环境调试的难度。
现在普遍的做法是发布前利用 Gulp、Grunt 等自动化构建工具对资源进行压缩。
11. 避免重定向
以下是一个重定向的过程:
浏览器发送请求 -- 服务器返回302 -- 服务器返回200 -- 浏览器开始呈现
就是说,在发送请求到返回200这段时间,页面完全是空白的;对比普通的请求多了一段空白时间。
12. 删除重复的脚本
重复的脚本对增加HTTP 请求次数和脚本执行的时间。
13. 配置ETag
这个规则应该过时了,现在比较好的实践是直接根据内容给静态资源打上哈希版本号。
14. 使Ajax可缓存
适用于以上的优化,大部分同样适用于Ajax请求。
总结:
总的来说, 前端优化的总体思路是提高浏览器与服务器沟通的效率。
前端性能优化一味奉行“最佳实践”有时候反而过而不及,所以针对项目的实际情况来优化才是明智的选择。

HTML的未來充滿了無限可能。 1)新功能和標準將包括更多的語義化標籤和WebComponents的普及。 2)網頁設計趨勢將繼續向響應式和無障礙設計發展。 3)性能優化將通過響應式圖片加載和延遲加載技術提升用戶體驗。

HTML、CSS和JavaScript在網頁開發中的角色分別是:HTML負責內容結構,CSS負責樣式,JavaScript負責動態行為。 1.HTML通過標籤定義網頁結構和內容,確保語義化。 2.CSS通過選擇器和屬性控製網頁樣式,使其美觀易讀。 3.JavaScript通過腳本控製網頁行為,實現動態和交互功能。

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增強WebevebDevelopment。

HTML是構建網頁結構的基石。 1.HTML定義內容結構和語義,使用、、等標籤。 2.提供語義化標記,如、、等,提升SEO效果。 3.通過標籤實現用戶交互,需注意表單驗證。 4.使用、等高級元素結合JavaScript實現動態效果。 5.常見錯誤包括標籤未閉合和屬性值未加引號,需使用驗證工具。 6.優化策略包括減少HTTP請求、壓縮HTML、使用語義化標籤等。

HTML是一種用於構建網頁的語言,通過標籤和屬性定義網頁結構和內容。 1)HTML通過標籤組織文檔結構,如、。 2)瀏覽器解析HTML構建DOM並渲染網頁。 3)HTML5的新特性如、、增強了多媒體功能。 4)常見錯誤包括標籤未閉合和屬性值未加引號。 5)優化建議包括使用語義化標籤和減少文件大小。

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML的作用是通過標籤和屬性定義網頁的結構和內容。 1.HTML通過到、等標籤組織內容,使其易於閱讀和理解。 2.使用語義化標籤如、等增強可訪問性和SEO。 3.優化HTML代碼可以提高網頁加載速度和用戶體驗。

htmlisaspecifictypefodyfocusedonstructuringwebcontent,而“代碼” badlyLyCludEslanguagesLikeLikejavascriptandPytyPythonForFunctionality.1)htmldefineswebpagertuctureduseTags.2)“代碼”代碼“ code” code code code codeSpassSesseseseseseseseAwiderRangeLangeLangeforLageforLogageforLogicIctInterract


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具