目錄
1、最糟糕的SEO友善性
2、最糟糕的使用者體驗
#3、最重要的太過雞肋
4、應用場景問題
首頁 web前端 js教程 AngularJS真的那麼完美? angularjs幾點問題的詳細分析

AngularJS真的那麼完美? angularjs幾點問題的詳細分析

Sep 08, 2018 am 11:09 AM
angular javascript

先不說AngularJS優略,至少大部分前端工作者還是對AngularJS有著狂熱的推崇的。因為它使開發變得簡單。那麼問題來了,為什麼很多知名網站都沒用到Angular呢?一起來看這篇文章吧

我們就從幾點說起:

1、最糟糕的SEO友善性

這一點無疑是非常致命的,這造成了許多年輕的新創公司都輕易不敢嘗試的一個重要原因。搜尋引擎爬蟲和社交預覽截圖無法識別使用JavaScript渲染的頁面,而且現有的解決方案非常複雜,非常緩慢。

事實上,通常一個頁面的載入是由五部分組成的(拿java為例):

  1. 瀏覽器像伺服器發送Http請求

  2. 伺服器針對這個請求進行處理得到結果數據,得到Jsp模板,將這些數據通過模板build成瀏覽器認識的html文本並發送給瀏覽器

  3. 瀏覽器解析HTML文字並將頁面內容呈現出來

可以看出,最後一步當瀏覽器拿到html文字時,也就是這個流程結束的時候,我們需要的數據都會呈現出來了。而使用Angular的過程是這樣的:

  1. 瀏覽器像前端伺服器發送Http請求

  2. 前端伺服器發送HTML模板到瀏覽器

  3. 瀏覽器解析HTML並執行js腳本,向業務伺服器發送Http請求

  4. #伺服器針對這個請求進行處理得到結果資料將結果數據封裝成Json格式並傳送給瀏覽器

  5. 瀏覽器解析Json並將資料呈現在頁面中

這兩個流程,一個是把頁面build的操作放到了伺服器中執行,一個是放到了瀏覽器中執行。這是最明顯的差別,先不說多出來的互動次數,單單從搜尋引擎眼裡來看的話,它只能看到瀏覽器拿到的靜態內容,它不會去執行你的js程式碼。

前者搜尋引擎看到的是一篇文章,後者搜尋引擎看到的是一個個的花括號!這也是為什麼Angular渲染的頁面會被列入百度‘黑名單’的原因。那麼如何解決呢?

引用一段話:

有兩種方法可以讓爬蟲造訪你的網站。你可以在你的伺服器端執行一個瀏覽器實例,然後根據JavaScript執行後的DOM產生HTML頁面。或者你另外建一套為搜尋爬蟲類準備的HTML靜態頁面。
前一種方案需要你安裝WebKit(也有可能是Xvfb),然後在頁面加載完成以後生成頁面(你也可以使用緩存,但這增加了更多的複雜性。)這樣會增加你的頁面載入時間,從而影響你的搜尋引擎排名。
 後一種方案(製作另一個伺服器端網站),可以滿足簡單的網站,但是如果你的頁面非常多樣,這將是一個惡夢。而且如果你的備用網站跟你的主站完全不一致,Google會狠狠地懲罰你的,你的流量會直線下降。

2、最糟糕的使用者體驗

在使用AngularJS後,頁面的呈現方式被拆分為了多個過程,這樣如果我訪問一個頁面,而這個頁面的內容有比較多的時候,我會明顯的感覺到瀏覽器的渲染過程,我有太多的內容要加載,這個過程是非常糟糕的,尤其是將加載過程放到客戶端的時候,它的延遲會非常大。

在富JavaScript應用程式中,頁面轉換通常是立即發生的,然後從伺服器上載入不同的元素。在伺服器端應用程式中,頁面沒有等到客戶端把全面資料下載完,就開始呈現資料。

聽起來像是客戶端的應用好一些,但實際上這是個假象。
想像一下,當使用者點了一個鏈接,客戶端的JS應用程式馬上出現了一個載入動畫,但這些資料需要載入5秒鐘。應用程式只是第一眼看起來快了,
先不討論有多少程式設計師想要在這一個頁面上添加功能。你很難要求人家必須透過非同步的方式很快的將內容呈現出來,其實頁面下面的東西晚一點加載出來人家也是不會關心的。

在伺服器端的應用程式中,如果一個API呼叫很慢,整個頁面的載入就變慢了。你無法忽視服務端的慢,因為他會影響到每一個人。但是客戶端的慢很容易被忽略。

你可以很輕鬆的解決掉服務端的慢,因為服務端是可控的,是在你配置的機器上運行的,你可以清楚的知道在這台機器上發生了什麼。而且服務端大都是在一個內部的集群網路中,這使他們之間的訊息傳遞非常的快,即使一個動作需要多次的訊息傳遞也可以在一瞬間完成。但是把這些傳遞放在客戶端的話會有諸多因素拖慢它的速度。
我們不能嚴格控制使用者使用什麼瀏覽器、也不能控制使用者機器的配置,但是我們可以控制自己伺服器的一切。

3、最重要的太過雞肋

雞肋?有人會說,AngularJS的各種好處,例如『易於維護』、『編碼方便』等等。但這是建立在犧牲效能和使用者體驗的前提下的。而所謂的『依賴注入』等後端的思想強行引到前端中來,這樣做看起來高大上了,但似乎哪裡不對?後端分架構、拆服務,以及使用各種框架等等,是為了更簡單的開發,而web前端,本身體現在瀏覽器中的就是HTML文字而已,它本身就是個靜態的、且不涉及業務的東西,我更認為他這麼做沒什麼實質的幫助。

從這些方便,或許不能說雞肋,但是,在任何場景下,幾乎都有一種方案可以完美的取代AngularJS,並且做的比它還要好。這。 。 。這就尷尬了!例如freemaker

freemaker大家不會太陌生,它可以直接呼叫Java提供的freemakerApi函數,而不是透過ajax去執行http請求非同步取得資料。同樣,他的性能同樣也玩爆AngularJS 或許和它比性能有點兒欺負人了,但是同樣作為一款模板引擎而言,freemaker的確有資格在性能上碾壓AngularJS。

在易用上,freemaker除了可以直接呼叫Java函數以外,依然也可以透過http來取得數據,但他會把獲取出來的數據統一build成html文字後再交給瀏覽器去解析,最重要的是,他也支援依賴注入等相關特性,並且和後端程式完美結合,結合以上幾點,不管是從擴展性、可維護性、整體性能、用戶體驗等方面來說,都是碾壓了AngularJS。而唯一比不上AngularJS的,則是開發階段了。 freemaker開發相對於angular而言,更複雜一些,或者說angular相對而言,在開發過程中要簡單得多,如果僅是因為開發變得愉快而大量的捨去諸多性能方面的因素的話,這是非常可怕的,一部分人在追求性能的機制去不停的優化,一部分人為了更簡單的開發去優化,這不能說誰對誰錯,但我更偏向前者。

拋開freemaker不談,在nodejs中童同樣有大量的可取代的解決方案同樣有大量的mvc框架,這裡就不多講了。

我認為在瀏覽器中的js的作用更多的應該放到互動中去,而不是內容體現中,那不是正確的解決方式。

4、應用場景問題

AngularJS在前後端分離的場景中看起來是個不錯的選擇,但上面說了,在前後端分離時,AngularJS考慮的太過狹隘,我們分離後,除了開發變得方便了,但失去了原有的性能和體驗,這無疑是失敗的,結合這些原因,或許可以使用AngularJS的場景幾乎非常少了,但似乎在後台(後端管理控制面板)、WEBApp這兩個場景可以使用。

那麼問題來了,開發管理控制台頁的確不需要對效能考慮太多,也不需要針對SEO做最佳化,但同樣這個場景中的中點是在互動上,而不是內容展示上。 AngularJS作為一個前端模板引擎,他失去了他的定位。他的作用發揮的微乎其微了,這很尷尬。

而在開發WebApp時,她或許不用考慮SEO,對效能而言,App框架可以對效能做最佳化,因為我可以嚴格的控制使用者使用的客戶端版本。我可以選擇App框架 ,但既然可以自己選擇App開發框架了,那麼任何一種App框架幾乎都有超越AngularJS的方案,無論是性能和易用性上。所以這似乎比開發管理控制台頁面更糟。

綜合這幾點,我認為AngularJS的地位就很尷尬了。

而唯一沒有衝突的場景,可能就是體現在開發企業內部應用程式的場景上了。

這或許就是為什麼AngularJS看起來似乎很棒,卻很少有企業去選擇。追求性能是每個程式設計師都應具備的,尤其是從事後端開發工作的,他們考慮的會更多,不可能為了看起來開發方便而放棄體驗。如果真的放棄了的話,還分什麼國中高?哪裡還來的架構師?一堆代碼磋商去就開搞罷了。

同樣,這也造成了一些前端工程師面試時的尷尬:

問:會用AngularJs嘛? 
 答:會!呃。 。但沒怎麼用過。 。但我真的會。 。呃

先不說AngularJS優略,至少大部分前端工作者還是對AngularJS有著狂熱的推崇的。因為它使開發變得簡單。那麼問題來了,為什麼很多知名網站都沒用到Angular呢?
下面我從幾點說起:

1、最糟糕的SEO友善性

這無疑是非常致命的,這造成了很多年輕的創業公司都輕易不敢嘗試的一個重要原因。搜尋引擎爬蟲和社交預覽截圖無法識別使用JavaScript渲染的頁面,而且現有的解決方案非常複雜,非常緩慢。

事實上,通常一個頁面的載入是由五部分組成的(拿java為例):

  1. 瀏覽器像伺服器發送Http請求

  2. 伺服器針對這個請求進行處理得到結果數據,得到Jsp模板,將這些數據通過模板build成瀏覽器認識的html文本並發送給瀏覽器

  3. 瀏覽器解析HTML文字並將頁面內容呈現出來

可以看出,最後一步當瀏覽器拿到html文字時,也就是這個流程結束的時候,我們需要的數據都會呈現出來了。而使用Angular的過程是這樣的:

  1. 瀏覽器像前端伺服器發送Http請求

  2. 前端伺服器發送HTML模板到瀏覽器

  3. 瀏覽器解析HTML並執行js腳本,向業務伺服器發送Http請求

  4. #伺服器針對這個請求進行處理得到結果資料將結果數據封裝成Json格式並傳送給瀏覽器

  5. 瀏覽器解析Json並將資料呈現在頁面中

這兩個流程,一個是把頁面build的操作放到了伺服器中執行,一個是放到了瀏覽器中執行。這是最明顯的差別,先不說多出來的互動次數,單單從搜尋引擎眼裡來看的話,它只能看到瀏覽器拿到的靜態內容,它不會去執行你的js程式碼。

前者搜尋引擎看到的是一篇文章,後者搜尋引擎看到的是一個個的花括號!這也是為什麼Angular渲染的頁面會被列入百度‘黑名單’的原因。那麼如何解決呢?

引用一段話:

有兩種方法可以讓爬蟲造訪你的網站。你可以在你的伺服器端執行一個瀏覽器實例,然後根據JavaScript執行後的DOM產生HTML頁面。或者你另外建一套為搜尋爬蟲類準備的HTML靜態頁面。
前一種方案需要你安裝WebKit(也有可能是Xvfb),然後在頁面加載完成以後生成頁面(你也可以使用緩存,但這增加了更多的複雜性。)這樣會增加你的頁面載入時間,從而影響你的搜尋引擎排名。
 後一種方案(製作另一個伺服器端網站),可以滿足簡單的網站,但是如果你的頁面非常多樣,這將是一個惡夢。而且如果你的備用網站跟你的主站完全不一致,Google會狠狠地懲罰你的,你的流量會直線下降。

2、最糟糕的使用者體驗

在使用AngularJS後,頁面的呈現方式被拆分為了多個過程,這樣如果我訪問一個頁面,而這個頁面的內容有比較多的時候,我會明顯的感覺到瀏覽器的渲染過程,我有太多的內容要加載,這個過程是非常糟糕的,尤其是將加載過程放到客戶端的時候,它的延遲會非常大。

在富JavaScript應用程式中,頁面轉換通常是立即發生的,然後從伺服器上載入不同的元素。在伺服器端應用程式中,頁面沒有等到客戶端把全面資料下載完,就開始呈現資料。

聽起來像是客戶端的應用好一些,但實際上這是個假象。
想像一下,當使用者點了一個鏈接,客戶端的JS應用程式馬上出現了一個載入動畫,但這些資料需要載入5秒鐘。應用程式只是第一眼看起來快了,
先不討論有多少程式設計師想要在這一個頁面上添加功能。你很難要求人家必須透過非同步的方式很快的將內容呈現出來,其實頁面下面的東西晚一點加載出來人家也是不會關心的。

在伺服器端的應用程式中,如果一個API呼叫很慢,整個頁面的載入就變慢了。你無法忽視服務端的慢,因為他會影響到每一個人。但是客戶端的慢很容易被忽略。

你可以很輕鬆的解決掉服務端的慢,因為服務端是可控的,是在你配置的機器上運行的,你可以清楚的知道在這台機器上發生了什麼。而且服務端大都是在一個內部的集群網路中,這使他們之間的訊息傳遞非常的快,即使一個動作需要多次的訊息傳遞也可以在一瞬間完成。但是把這些傳遞放在客戶端的話會有諸多因素拖慢它的速度。
我們不能嚴格控制使用者使用什麼瀏覽器、也不能控制使用者機器的配置,但是我們可以控制自己伺服器的一切。 (想看更多就到PHP中文網AngularJS開發手冊中學習)

#3、最重要的太過雞肋

雞肋?有人會說,AngularJS的各種好處,例如『易於維護』、『編碼方便』等等。但這是建立在犧牲效能和使用者體驗的前提下的。而所謂的『依賴注入』等後端的思想強行引到前端中來,這樣做看起來高大上了,但似乎哪裡不對?後端分架構、拆服務,以及使用各種框架等等,是為了更簡單的開發,而web前端,本身體現在瀏覽器中的就是HTML文字而已,它本身就是個靜態的、且不涉及業務的東西,我更認為他這麼做沒什麼實質的幫助。

從這些方便,或許不能說雞肋,但是,在任何場景下,幾乎都有一種方案可以完美的取代AngularJS,並且做的比它還要好。這。 。 。這就尷尬了!例如freemaker

freemaker大家不會太陌生,它可以直接呼叫Java提供的freemakerApi函數,而不是透過ajax去執行http請求非同步取得資料。同樣,他的性能同樣也玩爆AngularJS 或許和它比性能有點兒欺負人了,但是同樣作為一款模板引擎而言,freemaker的確有資格在性能上碾壓AngularJS。

在易用上,freemaker除了可以直接呼叫Java函數以外,依然也可以透過http來取得數據,但他會把獲取出來的數據統一build成html文字後再交給瀏覽器去解析,最重要的是,他也支援依賴注入等相關特性,並且和後端程式完美結合,結合以上幾點,不管是從擴展性、可維護性、整體性能、用戶體驗等方面來說,都是碾壓了AngularJS。而唯一比不上AngularJS的,則是開發階段了。 freemaker開發相對於angular而言,更複雜一些,或者說angular相對而言,在開發過程中要簡單得多,如果僅是因為開發變得愉快而大量的捨去諸多性能方面的因素的話,這是非常可怕的,一部分人在追求性能的機制去不停的優化,一部分人為了更簡單的開發去優化,這不能說誰對誰錯,但我更偏向前者。

拋開freemaker不談,在nodejs中童同樣有大量的可取代的解決方案同樣有大量的mvc框架,這裡就不多講了。

我認為在瀏覽器中的js的作用更多的應該放到互動中去,而不是內容體現中,那不是正確的解決方式。

4、應用場景問題

AngularJS在前後端分離的場景中看起來是個不錯的選擇,但上面說了,在前後端分離時,AngularJS考慮的太過狹隘,我們分離後,除了開發變得方便了,但失去了原有的性能和體驗,這無疑是失敗的,結合這些原因,或許可以使用AngularJS的場景幾乎非常少了,但似乎在後台(後端管理控制面板)、WEBApp這兩個場景可以使用。

那麼問題來了,開發管理控制台頁的確不需要對效能考慮太多,也不需要針對SEO做最佳化,但同樣這個場景中的中點是在互動上,而不是內容展示上。 AngularJS作為一個前端模板引擎,他失去了他的定位。他的作用發揮的微乎其微了,這很尷尬。

而在開發WebApp時,她或許不用考慮SEO,對效能而言,App框架可以對效能做最佳化,因為我可以嚴格的控制使用者使用的客戶端版本。我可以選擇App框架 ,但既然可以自己選擇App開發框架了,那麼任何一種App框架幾乎都有超越AngularJS的方案,無論是性能和易用性上。所以這似乎比開發管理控制台頁面更糟。

綜合這幾點,我認為AngularJS的地位就很尷尬了。

而唯一沒有衝突的場景,可能就是體現在開發企業內部應用程式的場景上了。

這或許就是為什麼AngularJS看起來似乎很棒,卻很少有企業去選擇。追求性能是每個程式設計師都應具備的,尤其是從事後端開發工作的,他們考慮的會更多,不可能為了看起來開發方便而放棄體驗。如果真的放棄了的話,還分什麼國中高?哪裡還來的架構師?一堆代碼磋商去就開搞罷了。

同樣,這也造成了一些前端工程師面試時的尷尬:

問:會用AngularJs嘛?  

 答:會!呃。 。但沒怎麼用過。 。但我真的會。 。呃   

這篇文章到這就結束了(想看更多就到PHP中文網AngularJS使用手冊中學習),有問題的可以在下方留言提問。

以上是AngularJS真的那麼完美? angularjs幾點問題的詳細分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

Angular元件及其顯示屬性:了解非block預設值 Angular元件及其顯示屬性:了解非block預設值 Mar 15, 2024 pm 04:51 PM

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

See all articles