自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

客戶端JavaScript的5個弊端

開發(fā) 前端
譯注:原來的標(biāo)題是:“我們?yōu)樯恫挥肁ngularJS:…”,后來作者覺得不妥就改掉了,因?yàn)锳ngularJS是通常適用于單頁面程序框架(SPA) 很多人理解為對AngularJS的抨擊,但這并不是他的本意。

譯注:原來的標(biāo)題是:“我們?yōu)樯恫挥肁ngularJS:…”,后來作者覺得不妥就改掉了,因?yàn)锳ngularJS是通常適用于單頁面程序框架(SPA) 很多人理解為對AngularJS的抨擊,但這并不是他的本意。 

幾個月前,當(dāng)我們打開Sourcegraph網(wǎng)站的時候,它是一個富AngularJS應(yīng)用,服務(wù)器只要把原始HTML和JSON endpoints返回,剩下的就交給Angular來搞定了。我們就這樣懵懵懂懂地做出了最初版本的Sourcegraph。

但是單頁(single-page) JavaScript框架并不適用于每一個站點(diǎn)。Sourcegraph就是一個內(nèi)容為主的站點(diǎn),我們漸漸發(fā)現(xiàn)這個富js應(yīng)用的開發(fā)還是弊大于利;下面是我們在探知這條路上遇到的溝溝坎坎,希望對有雷同遭遇的開發(fā)人員一些幫助。

下周,我們來討論更多地關(guān)于我們是如何從AngularJS遷移server-side GO templates

客戶端JS框架的5個弊端

我們早就知道這會有很多的困難,但是不知道到底有多難

1. 搜索排名和Twitter/Facebook預(yù)覽

[[109642]]

搜索引擎爬蟲和社交網(wǎng)站的預(yù)覽抓取器不能加載純Javascript站點(diǎn),而如果提供替換版本又慢又復(fù)雜

有兩種方法可以允許爬蟲閱讀你得站點(diǎn)。你可以在服務(wù)器端運(yùn)行一個瀏覽器實(shí)例用以執(zhí)行你的應(yīng)用里的Javascript,然后返回HTML結(jié)果(PlantomJS或者WebLoop)。 或者你可以為你的站點(diǎn)專門建立一個HTML版本為爬蟲服務(wù)

***個方法需要你為每一次頁面加載建立一個headless瀏覽器(或者tab),比起直接產(chǎn)出HTML,這樣會花費(fèi)很多的時間和系統(tǒng)資源。基于你用的框架,會花費(fèi)很多的工作來決定什么時候已經(jīng)準(zhǔn)備好的頁面將被渲染。 你可以緩存頁面,但是如果頁面經(jīng)常改變,不但優(yōu)化甚微而且會增大復(fù)雜度。

這樣做還會降低你的頁面加載速度好幾秒,對搜索引擎排名也不利。(PlantomJS需要Xvfb和WebKit)

第二個方法(做一個服務(wù)器端站點(diǎn))對簡單地站點(diǎn)有效,但是如果頁面很多,那用這個方法就形同噩夢。

如果Google認(rèn)為你的服務(wù)器版本站點(diǎn)跟你的主站版本有很大的不同,那他就會狠狠的懲罰你,到時候你連怎么死的都不知道

2. 不可靠的統(tǒng)計(jì)和監(jiān)控

很多分析工具需要易于出錯,人工集成來使用HTML5 history API(pushState)用于導(dǎo)航。因?yàn)樗麄兒茈y自動檢測到你的應(yīng)用使用pushState導(dǎo)航到了新的頁面。即使可以做到,他們?nèi)匀恍枰却銘?yīng)用里的信號來收集新頁面的信息

如何解決這個問題呢?取決于你的客戶端用什么導(dǎo)航和你想集成什么分析工具。用Google分析+Backbone.js?嘗試一下backbone.analytics。用Heap(順便說一下,太酷了)和UI-Router?設(shè)置你自己的$stateChangeSuccess并調(diào)用heap.track

還沒完事呢!你想追蹤起始頁面加載?也許你在雙向跟蹤他?你會跟蹤失敗的頁面記載嗎?如果你使用replaceState代替pushState呢?如果你錯誤的配置了分析掛鉤或者屬于檢查導(dǎo)致依賴升級搞壞了事情。當(dāng)你發(fā)現(xiàn)的售后,很難去恢復(fù)你錯過的分析數(shù)據(jù)(或者消除重復(fù)數(shù)據(jù))

3. 又慢又復(fù)雜的構(gòu)建工具

前-后端JavaScript構(gòu)建工具,比如Grunt,需要復(fù)雜的配置而且很慢。還好我們有像ng-boilerplate這樣的project來幫我們做配置,但是如果你想添加一個自定義的步驟還是逃不出又慢有復(fù)雜的怪圈(我為什么說Grunt復(fù)雜,看看這個配置文件就知道了)

一旦你配置好了你的應(yīng)用,你仍然要忍受漫長的JavaScript構(gòu)建時間。你可以把dev和production構(gòu)建通道分開來提高開發(fā)速度,但是始終免不了走這么一遭,用AngularJS尤其如此,他需要在丑陋的代碼前使用ngmin(如果你用了這個功能)。其實(shí),Sourcegraph因?yàn)檫@些丑陋的JavaScript表現(xiàn)代碼幾度被毀

還好,Gulp已經(jīng)有了極大的提高

4. 慢,不可靠的測試

[[109644]]

測試JavaScript-only的站點(diǎn)需要使用基于瀏覽器的測試框架,比如Selenium,PhantomJS,或者WebLoop。安裝這些(除了PhantomJS)通常意味著安裝WebKit和Java依賴,配置Xvfb(機(jī)關(guān)新的PhantomJS移除了這些先決條件),或者運(yùn)行一個本地的VNC客戶端和服務(wù)器來測試。***,你還需要在持續(xù)集成的服務(wù)器上設(shè)定所有東東

相反,測試服務(wù)器端產(chǎn)生的頁面通常只需要類庫來或者URLs并解析HTML,安裝和配置起來簡單許多

一旦你開始寫瀏覽器測試,你必須處理異步加載。你不能在頁面還沒有加載的時候就測試頁面上的元素,但是如果在一個特定時間端里沒有加載,你的測試就會失敗。瀏覽器測試類庫提供了很好地功能來處理這種情況,他們只能在負(fù)載的頁面里使用這些功能

如果你想聯(lián)合重量級瀏覽器來進(jìn)行(Selenium,加上Firefox或者Webkit)很復(fù)雜的測試(因?yàn)闉g覽器的異步特質(zhì))?你的測試需要很多配置,很長的時間來執(zhí)行,而且很不可靠

5. 慢,可以緩解,但沒有解決

在富JavaScript應(yīng)用中,頁面轉(zhuǎn)化幾乎是瞬間發(fā)生,然后所有的特定元素異步加載。在server-side應(yīng)用中,完全相反:頁面在服務(wù)器端加載完成前不會發(fā)送到客戶端

聽起來似乎是client-side應(yīng)用勝利了,但是也許會是個坑也不一定

當(dāng)用戶點(diǎn)擊一個鏈接,client-side應(yīng)用會立刻加載頁面并呈現(xiàn)。如果用戶用sidebar導(dǎo)航到一個需要5秒鐘才可以加載的頁面。***次感覺很快,但是如果一個用戶需要的信息在sidebar里,對用戶來說就感覺很難受。即使你需要的特定內(nèi)容立即呈現(xiàn),你仍需要忍受加載指示器和頁面填充后的抖動

我們來考慮如果開發(fā)人員想在那個頁面添加新功能。是很難讓她的功能必須快速加載的-因?yàn)槎际钱惒降模哉l會在意頁面底部過了幾秒才加載呢?如此反復(fù)幾次,整個站點(diǎn)讓人感覺滯后很抖動

在server-side 應(yīng)用中,如果一個API調(diào)用很慢,整個頁面就會停滯直到徹底完成。這個不容忽視的server-side慢節(jié)奏很容易被測量并會公平地影響每一個人。但是在client-side應(yīng)用中很容易被忽略

你可以說,一個好的開發(fā)團(tuán)隊(duì)?wèi)?yīng)該避免這些錯誤,并且client-side JS 框架不是罪魁禍?zhǔn)?。是的,client-side JS框架提高了速度。這一點(diǎn)改變鼓勵了任何開發(fā)團(tuán)隊(duì)

下一步?

上面說得都不是大問題。我們已經(jīng)做了很多來減輕上述情況。

總而言之,上述種種以為這client-side JS 框架加大了我們開發(fā)的負(fù)擔(dān)。

而且要記住,每一個站點(diǎn)都是不同的。Sourcegraph是一個內(nèi)容站點(diǎn),他得頁面在加載后不會有太多的變化(相較于富JS應(yīng)用),我們依然愛著浙西技術(shù),但是他們不一定是構(gòu)建主站點(diǎn)的正確工具。

原文鏈接: Sourcegraph   翻譯: 伯樂在線 - 蔡蔡

譯文鏈接: http://blog.jobbole.com/61681/

責(zé)任編輯:林師授 來源: 伯樂在線
相關(guān)推薦

2009-06-12 19:18:08

REST客戶端框架JavaScript

2019-09-08 16:45:19

JavaScriptHTML5GitHub

2015-06-03 09:27:05

JavaScript客戶端檢測技術(shù)

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2016-11-14 18:02:50

2009-12-21 09:05:22

2011-03-21 14:53:36

Nagios監(jiān)控Linux

2011-04-06 14:24:20

Nagios監(jiān)控Linux

2011-08-17 10:10:59

2015-08-05 11:40:24

Linux FTP客戶端

2018-11-02 08:53:28

開源Android郵件客戶端

2011-03-02 14:36:24

Filezilla客戶端

2010-12-21 11:03:15

獲取客戶端證書

2011-03-24 13:00:31

配置nagios客戶端

2010-05-31 10:11:32

瘦客戶端

2011-10-26 13:17:05

2022-03-14 09:35:43

Pythonhttpx

2012-09-19 14:27:16

Worklight

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2013-05-09 09:33:59

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號