整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          你不可不知的HTML優(yōu)化技巧,還不抓緊時間收藏

          何提升Web頁面的性能,很多開發(fā)人員從多個方面來下手如JavaScript、圖像優(yōu)化、服務器配置,文件壓縮或是調整CSS。

          很顯然HTML 已經達到了一個瓶頸,盡管它是開發(fā)Web 界面必備的核心語言。HTML頁面的負載也是越來越重。大多數(shù)頁面平均需要40K的空間,像一些大型網站會包含數(shù)以千計的HTML 元素,頁面Size會更大。

          如何有效的降低HTML 代碼的復雜度和頁面元素的數(shù)量,本文主要解決了這個問題,從多個方面介紹了如何編寫簡練,清晰的HTML 代碼,能夠使得頁面加載更為迅速,且能在多種設備中運行良好。

          在設計和開發(fā)過程中需要遵循以下原則:

          • 結構分離:使用HTML 增加結構,而不是樣式內容;
          • 保持整潔:為工作流添加代碼驗證工具;使用工具或樣式向導維護代碼結構和格式
          • 學習新語言:獲取元素結構和語義標記。
          • 確保可訪問: 使用ARIA 屬性和Fallback 屬性等
          • 測試: 使網站在多種設備中能夠良好運行,可使用emulators和性能工具。

          HTML,CSS 和JavaScript三者的關系

          HTML 是用于調整頁面結構和內容的標記語言。HTML 不能用于修飾樣式內容,也不能在頭標簽中輸入文本內容,使代碼變得冗長和復雜,相反使用CSS 來修飾布局元素和外觀比較合適。HTML元素默認的外觀是由瀏覽器默認的樣式表定義的,如在Chrome中h1標簽元素會渲染成32px的Times 粗體。

          三條通用設計規(guī)則:

          1. 使用HTML 來構造頁面結構,CSS修飾頁面呈現(xiàn),JavaScript實現(xiàn)頁面功能。CSS ZenGarden 很好地展示了行為分離。
          2. 如果能用CSS或JavaScript實現(xiàn)就少用HTML代碼。
          3. 將CSS和JavaScript文件與HTML 分開存放。這可有助于緩存和調試。

          文檔結構方面也可以做優(yōu)化,如下:

          • 使用HTML5 文檔類型,以下是空文件:
          <!DOCTYPE html>
          <html>
          <head>
           <title>Recipes: pesto</title>
          </head>
          <body>
           <h1>Pesto</h1>
           <p>Pesto is good!</p>
          </body>
          </html>
          
          • 在文檔起始位置引用CSS文件,如下:
          <head>
           <title>My pesto recipe</title>
           <link rel="stylesheet" href="/css/global.css">
           <link rel="stylesheet" href="css/local.css">
          </head>
          

          使用這兩種方法,瀏覽器會在解析HTML代碼之前將CSS信息準備好。因此有助于提升頁面加載性能。

          在頁面底部body結束標簽之前輸入JavaScript代碼,這樣有助于提升頁面加載的速度,因為瀏覽器在解析JavaScript代碼之前將頁面加載完成,使用JavaScript會對頁面元素產生積極的影響。

          <body>
           ...
           <script src="/js/global.js">
           <script src="js/local.js">
          </body>
          

          使用Defer和async屬性,腳本元素具有async 屬性無法保證會按順序執(zhí)行。

          可在JavaScript代碼中添加Handlers。千萬別加到HTML內聯(lián)代碼中,比如下面的代碼則容易導致錯誤且不易于維護:

          index.html:

          <head>
           ...
           <script src="js/local.js">
          </head>
          <body onload="init()">
           ...
           <button onclick="handleFoo()">Foo</button>
           ...
          </body>
          

          下面的寫法比較好:

          index.html:

          <head>
           ...
          </head>
          <body>
           ...
           <button id="foo">Foo</button>
           ...
           <script src="js/local.js">
          </body>
          

          js/local.js:

          init();
          var fooButton =
           document.querySelector('#foo');
          fooButton.onclick = handleFoo();
          

          驗證

          優(yōu)化網頁的一種方法就是瀏覽器可處理非法的HTML 代碼。合法的HTML代碼很容易調試,且占內存少,耗費資源少,易于解析和渲染運行起來更快。非法的HTML代碼讓實現(xiàn)響應式設計變得異常艱難。

          當使用模板時,合法的HTML代碼顯得異常重要,經常會發(fā)生模板單獨運行良好,當與其他模塊集成時就報各種各樣的錯誤,因此一定要保證HTML代碼的質量,可采取以下措施:

          • 在工作流中添加驗證功能:使用驗證插件如HTMLHint或SublineLinter幫助你檢測代碼錯誤。
          • 使用HTML5文檔類型
          • 確保HTML的層次結構易于維護,要避免元素嵌套處于左開狀態(tài)。
          • 保證添加各元素的結束標簽。
          • 刪除不必要的代碼 ;沒有必要為自關閉的元素添加結束標簽;Boolean 屬性不需要賦值,如果存在則為True;

          代碼格式

          格式一致性使得HTML代碼易于閱讀,理解,優(yōu)化,調試。

          語義標記

          語義指意義相關的事物,HTML 可從頁面內容中看出語義:元素和屬性的命名一定程度上表達了內容的角色和功能。HTML5 引入了新的語義元素,如<header>,<footer>及<nav>。

          選擇合適的元素來編寫代碼可保證代碼的易讀性:

          • 使用<h1>(<h2>,<h3>…)表示標題,<ul>或<ol>實現(xiàn)列表
          • 注意使用<article> 標簽之前應添加<h1>標簽;
          • 選擇合適的HTML5語義元素如<header>,<footer>,<nav>,<aside>;
          • 使用<p>描述Body 文本,HTML5 語義元素可以形成內容,反之不成立。
          • 使用<em>和<strong>標簽替代<i>和<b>標簽。
          • 使用<label>元素,輸入類型,占位符及其他屬性來強制驗證。
          • 將文本和元素混合,并作為另一元素的子元素,會導致布局錯誤,

          例如:

          <div>Name: <input type="text" id="name"></div>
          

          換種寫法會更好:

           1: <div>
           2: <label for="name">Name:</label><input type="text" id="name">
           3: </div>
          

          布局

          要提高HTML代碼的性能,要遵循HTML 代碼以實現(xiàn)功能和為目標,而不是樣式。

          • 使用<p>元素修飾文本,而不是布局;默認<p>是自動提供邊緣,而且其他樣式也是瀏覽器默認提供的。
          • 避免使用<br>分行,可以使用block元素或CSS顯示屬性來代替。
          • 避免使用<hr>來添加水平線,可使用CSS的border-bottom 來代替。
          • 不到關鍵時刻不要使用div標簽。
          • 盡量少用Tables來布局。
          • 可以多使用Flex Box
          • 使用CSS 來調整邊距等。

          CSS

          雖然本文講解的是如何優(yōu)化HTML,下面介紹了一些使用css的基本技能:

          • 避免內聯(lián)css
          • 最多使用ID類 一次
          • 當涉及多個元素時,可使用Class來實現(xiàn)。

          以上就是本文介紹的優(yōu)化HTML代碼的技巧,一個高質量高性能的網站,往往取決于對細節(jié)的處理,因此我們在日常開發(fā)中,能夠考慮到用戶體驗,后期維護等方面,則會產生更高效的開發(fā)。

          ava開發(fā)已經悄無聲息的走進我們的生活中,無論是手機軟件、手機Java游戲還是電腦軟件等,只要你使用到電子產品就會碰到和Java有關的東西,更多的企業(yè)正采用Java語言開發(fā)網站,也心音了好多志同道合的朋友開始加入Java開發(fā)的行列。千鋒教育強勢推出的Java+大數(shù)據(jù)的新課程,為更多的Java學習者打造更加先進的Java開發(fā)技術。

          我們知道在Java的學習中,Javaweb是我們的必修階段,而在Javaweb開發(fā)中,我們學習的第一課便是HTML5和CSS的入門基礎。我們常說的要瀏覽的網頁就是由HTML語言來編寫的,而CSS就是能讓我們的網頁更加絢麗。通過HTML和CSS的編碼來顯示我們的網頁。所以web開發(fā)的必備技能便是HTML和CSS。

          那什么是HTML呢?HTML就是超文本標記語言。下面是千鋒小編為大家準備的HTML的發(fā)展史,教你一步一步踏入Java的世界。

          HTML1.0-2.0,分別是在1989年和1991年誕生,起初的這兩個版本只有幾個基本的標簽,而且做出來的網頁也不是很好看,但已經支持了超文本。所以幾乎web上的每一個人都有他們的主頁。

          HTML3是在1995年的時候誕生,那時候還誕生了一場漫長而殘酷的瀏覽器戰(zhàn)爭,Netscape和 microsoft都在試圖爭霸世界,每個瀏覽器都在不斷的增加自己的專用擴展包。

          HTML4有1998年誕生,此時瀏覽器戰(zhàn)爭結束web標準誕生,HTML的結構和表現(xiàn)分離到兩種語言,一種語言用于實現(xiàn)結構(HTML);一種語言用于表現(xiàn)(CSS)

          HTML4.01在1999年誕生,與HTML4相比只是做了一些簡單的修補,所有的瀏覽器都采用一直的標準,除了IE瀏覽器,所以web開發(fā)人員都要單獨做一些工作。

          XHTML在 2001年誕生,是XML和HTML的結合,只是XHTML相比于HTML的標準更加嚴格。但是web開發(fā)人員對HTML的靈活性更加的擁護。

          HTML5是沿用了HTML4.01的大部分特性,提供了體現(xiàn)web新發(fā)展的新特性,完全支持XHTML風格的代碼,從此HTML5成為大家公認的標準。也就是我們現(xiàn)在都在用的版本HTML5。

          HTML5 目標是書寫簡潔的HTML代碼,創(chuàng)建更加簡單的web程序。而我們HTML5常用的標簽:標題標簽、段落標簽、無序列表標簽、有序列表標簽等

          我們目前用的CSS3是CSS的新標準,是對CSS2的更新,就像我們美麗的圖片,和我們在照片中做的特效,將我們的網頁裝飾的更加精彩,我們看起來更加舒服。

          高樓之所以能高峨聳立,是因為有地基的權利支撐;同樣的Java開發(fā)之所以能夠盡善盡美,是因為我們的HTML和CSS的完美助力,學習Java開發(fā)從千鋒開始吧!

          千鋒JavaEE+云數(shù)據(jù)講師團匯集行業(yè)頂尖師資,以從業(yè)經驗5年以上的技術大咖面授教學,原華為技術官、IBM技術負責人、中興項目負責人為首的千鋒講師,撐起國內JavaEE+云數(shù)據(jù)教學第一道防線,力保Java的教學品質。選擇千鋒Java培訓,是你成功的開始,過程中的努力,讓你的成功成為必然!

          前后端分離已成為互聯(lián)網項目開發(fā)的業(yè)界標準使用方式,通過nginx+tomcat的方式(也可以中間加一個nodejs)有效的進行解耦,并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務(多種客戶端,例如:瀏覽器,車載終端,安卓,IOS等等)打下堅實的基礎。這個步驟是系統(tǒng)架構從猿進化成人的必經之路。

          核心思想:前端html頁面通過ajax調用后端的restuful api接口并使用json數(shù)據(jù)進行交互

          在互聯(lián)網架構中,

          web服務器:一般指像nginx,apache這類的服務器,他們一般只能解析靜態(tài)資源。

          應用服務器:一般指像tomcat,jetty,resin這類的服務器可以解析動態(tài)資源也可以解析靜態(tài)資源,但解析靜態(tài)資源的能力沒有web服務器好。

          一般都是只有web服務器才能被外網訪問,應用服務器只能內網訪問。

          以前的JavaWeb項目大多數(shù)都是java程序員又當?shù)之攱專指闱岸耍╝jax/jquery/js/html/css等等),又搞后端(java/mysql/oracle等等)。

          隨著時代的發(fā)展,漸漸的許多大中小公司開始把前后端的界限分的越來越明確,前端工程師只管前端的事情,后端工程師只管后端的事情。正所謂術業(yè)有專攻。

          對于后端java工程師:

          把精力放在java基礎,設計模式,jvm原理,spring+springmvc原理及源碼,linux,mysql事務隔離與鎖機制,mongodb,http/tcp,多線程,分布式架構(dubbo,dubbox,spring cloud),彈性計算架構,微服務架構(springboot+zookeeper+docker+jenkins),java性能優(yōu)化,以及相關的項目管理等等。

          后端追求的是:三高(高并發(fā),高可用,高性能),安全,存儲,業(yè)務等等。

          對于前端工程師:

          把精力放在html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8引擎,javascript多線程,模塊化,面向切面編程,設計模式,瀏覽器兼容性,性能優(yōu)化等等。

          前端追求的是:頁面表現(xiàn),速度流暢,兼容性,用戶體驗等等。

          通常我們的JavaWeb項目都是使用了若干后臺框架,springmvc/struts + spring + spring jdbc/hibernate/mybatis 等等。大多數(shù)項目在java后端都是分了三層,控制層(controller/action),業(yè)務層(service/manage),持久層(dao)。控制層負責接收參數(shù),調用相關業(yè)務層,封裝數(shù)據(jù),以及路由&渲染到jsp頁面。然后jsp頁面上使用各種標簽(jstl/el/struts標簽等)或者手寫java表達式(<%=%>)將后臺的數(shù)據(jù)展現(xiàn)出來,玩的是MVC那套思路。緊接著系統(tǒng)發(fā)布,你需要用maven或者eclipse等工具把你的代碼打成一個war包,然后把這個war包發(fā)布到你的生產環(huán)境下的web容器(tomcat/jboss/weblogic/websphere/jetty/resin)里,對吧?發(fā)布完了之后,你要啟動你的web容器,開始提供服務,這時候你通過配置域名,dns等等相關,你的網站就可以訪問了。這樣一來,你的前后端代碼全都在那個war包里了,包括你的js,css,圖片,各種第三方的庫。

          在瀏覽器中輸入你的網站域名(www.xxx.com),之后發(fā)生了什么?瀏覽器通過域名,再通過dns服務器找到你的服務器外網ip,將http請求發(fā)送到你的服務器,在tcp3次握手之后(http下面是tcp/ip),通過tcp協(xié)議開始傳輸數(shù)據(jù),你的服務器得到請求后,開始提供服務,接收參數(shù),之后返回你的應答給瀏覽器,瀏覽器再通過content-type來解析你返回的內容,呈現(xiàn)給用戶。

          我們先假設你的首頁中有100張圖片,此時,用戶的看似一次http請求,其實并不是一次,用戶在第一次訪問的時候,瀏覽器中不會有緩存,你的100張圖片,瀏覽器要連著請求100次http請求(有人會跟我說http長連短連的問題,不在這里討論),你的服務器接收這些請求,都需要耗費內存去創(chuàng)建socket來玩tcp傳輸(消耗你服務器上的計算資源)。這樣的話,你的服務器的壓力會非常大,因為頁面中的所有請求都是只請求到你這臺服務器上,如果1個人還好,如果10000個人并發(fā)訪問呢(先不聊服務器集群,這里就說是單實例服務器),那你的服務器能扛住多少個tcp連接?你的帶寬有多大?你的服務器的內存有多大?你的硬盤是高性能的嗎?你能抗住多少IO?你給web服務器分的內存有多大?會不會宕機?

          這就是為什么,越是大中型的web應用,他們越是要解耦。

          理論上你可以把你的數(shù)據(jù)庫+應用服務+消息隊列+緩存+用戶上傳的文件+日志+等等都扔在一臺服務器上,你也不用玩什么服務治理,也不用做什么性能監(jiān)控,什么報警機制等等。但是這樣把雞蛋都放在一個籃子里,隱患非常大。如果因為一個子應用的內存不穩(wěn)定導致整個服務器內存溢出而hung住,那你的整個網站就掛掉了。

          JSP的痛點:

          以前的javaWeb項目大多數(shù)使用jsp作為頁面層展示數(shù)據(jù)給用戶,因為流量不高,因此也沒有那么苛刻的性能要求,但現(xiàn)在是大數(shù)據(jù)時代,對于互聯(lián)網項目的性能要求是越來越高。

          1.動態(tài)資源和靜態(tài)資源全部耦合在一起,服務器壓力大,因為服務器會收到各種http請求,例如css的http請求,js的,圖片的等等。一旦服務器出現(xiàn)狀況,前后臺一起玩完,用戶體驗極差。

          2.UI出好設計圖后,前端工程師只負責將設計圖切成html,需要由java工程師來將html套成jsp頁面,出錯率較高,修改問題時需要雙方協(xié)同開發(fā),效率低下。

          3.jsp必須要在支持java的web服務器里運行(例如tomcat,jetty,resin等),無法使用nginx等(nginx據(jù)說單實例http并發(fā)高達5w,這個優(yōu)勢要用上),性能提不上來。

          4.第一次請求jsp,必須要在web服務器中編譯成servlet,第一次運行會較慢。

          5.每次請求jsp都是訪問servlet再用輸出流輸出的html頁面,效率沒有直接使用html高。

          6.jsp內有較多標簽和表達式,前端工程師在修改頁面時會遇到很多痛點。

          7.如果jsp中的內容很多,頁面響應會很慢,因為是同步加載。

          8.需要前端工程師使用java的ide(例如eclipse),以及需要配置各種后端的開發(fā)環(huán)境,你們有考慮過前端工程師的感受嗎。

          基于上述的一些痛點,我們應該把整個項目實現(xiàn)前后端真正的解耦!

          前后分離的優(yōu)勢:

          1.可以實現(xiàn)真正的前后端解耦,前端服務器使用nginx。

          前端/WEB服務器放的是css,js,圖片等等一系列靜態(tài)資源(甚至你還可以css,js,圖片等資源放到特定的文件服務器,例如阿里云的oss,并使用cdn加速),前端服務器負責控制頁面引用&跳轉&路由,前端頁面異步調用后端的接口,后端/應用服務器使用tomcat(把tomcat想象成一個數(shù)據(jù)提供者),加快整體響應速度。

          (這里需要使用一些前端工程化的框架比如nodejs,react,router,react,redux,webpack)

          2.發(fā)現(xiàn)bug,可以快速定位是誰的問題,不會出現(xiàn)互相踢皮球的現(xiàn)象。

          頁面邏輯,跳轉錯誤,瀏覽器兼容性問題,腳本錯誤,頁面樣式等問題,全部由前端工程師來負責。

          接口數(shù)據(jù)出錯,數(shù)據(jù)沒有提交成功,應答超時等問題,全部由后端工程師來解決。

          雙方互不干擾,前端與后端是相親相愛的一家人。

          3.在大并發(fā)情況下,可以同時水平擴展前后端服務器,比如淘寶的一個首頁就需要2000+臺前端服務器做集群來抗住日均多少億+的日均pv。

          4.減少后端服務器的并發(fā)/負載壓力

          除了接口以外的其他所有http請求全部轉移到前端nginx上,接口的請求調用tomcat,參考nginx反向代理tomcat。

          且除了第一次頁面請求外,瀏覽器會大量調用本地緩存。

          5.即使后端服務暫時超時或者宕機了,前端頁面也會正常訪問,只不過數(shù)據(jù)刷不出來而已。

          6.也許你也需要有微信相關的輕應用,那樣你的接口完全可以共用,如果也有app相關的服務,

          那么只要通過一些代碼重構,也可以大量復用接口,提升效率。(多端應用)

          7.頁面顯示的東西再多也不怕,因為是異步加載。

          8.nginx支持頁面熱部署,不用重啟服務器,前端升級更無縫。

          9.增加代碼的維護性&易讀性(前后端耦在一起的代碼讀起來相當費勁)。

          10.提升開發(fā)效率,因為可以前后端并行開發(fā),而不是像以前的強依賴。

          11.在nginx中部署證書,外網使用https訪問,并且只開放443和80端口,其他端口一律關閉(防止黑客端口掃描),內網使用http,性能和安全都有保障。

          12.前端大量的組件代碼得以復用,組件化,提升開發(fā)效率,抽出來!

          總結一下新的方式的請求步驟:

          大量并發(fā)瀏覽器請求--->web服務器集群(nginx)--->應用服務器集群(tomcat)--->文件/數(shù)據(jù)庫/緩存/消息隊列服務器集群

          同時又可以玩分模塊,還可以按業(yè)務拆成一個個的小集群,為后面的架構升級做準備。


          主站蜘蛛池模板: 麻豆AV一区二区三区久久| 国产电影一区二区| 亚洲狠狠狠一区二区三区| 日韩人妻一区二区三区免费| 一区二区在线电影| 尤物精品视频一区二区三区 | 日韩精品一区二区三区中文3d| 日韩精品一区二区三区不卡| 精品视频一区二区三区免费| 亚洲熟妇无码一区二区三区导航| 一级特黄性色生活片一区二区| 久久久久无码国产精品一区| 精品国产一区二区三区| 久久无码人妻精品一区二区三区| 中文字幕一区一区三区| 一本大道在线无码一区| 亚洲国产综合无码一区二区二三区| 亚洲国产精品一区二区成人片国内 | 无码福利一区二区三区| 亚洲一区二区精品视频| 无码人妻精品一区二区三区蜜桃| 夜夜爽一区二区三区精品| 久久精品国产AV一区二区三区| 高清无码一区二区在线观看吞精| 无码AV天堂一区二区三区| 国产一国产一区秋霞在线观看| 无码国产精品一区二区免费式芒果 | 亚洲一区在线免费观看| 亚洲一区二区高清| 亚洲av无码一区二区三区四区| 色老板在线视频一区二区| 一区二区亚洲精品精华液| 伦理一区二区三区| 精品国产一区二区三区久| 天堂国产一区二区三区| 一区二区三区电影在线观看| 亚洲一区二区三区成人网站| 精品一区二区久久| 一区二区免费电影| 波多野结衣AV一区二区三区中文 | 亚洲日本一区二区|