為什麼要進行前後臺分離

来源:http://www.cnblogs.com/shouce/archive/2016/04/05/5353697.html
-Advertisement-
Play Games

從事前端開發工作也有一定的時間了,在這段時間里,由一個基本的前端開發開始,做到前端經理;基本上算是走過了所有前端開發都走過的路,今天主要分享下我這一路走來,對前端的理解。 我開始接觸前端的時候,其實稱不上是所謂的開發,更多的是現在多數人對前端的理解-美工,當時負責的工作就是將PSD轉化為HTML頁面 ...


從事前端開發工作也有一定的時間了,在這段時間里,由一個基本的前端開發開始,做到前端經理;基本上算是走過了所有前端開發都走過的路,今天主要分享下我這一路走來,對前端的理解。

我開始接觸前端的時候,其實稱不上是所謂的開發,更多的是現在多數人對前端的理解-美工,當時負責的工作就是將PSD轉化為HTML頁面,並做些基本的交互。所以,我們組一致都掛在設計組下麵,因為大家對其理解,其實是偏設計的東西,和所謂的開髮根本掛不上鉤。結果導致的就是一系列的連鎖問題--前端不被看重,前端的工資水平就很難提升,前端轉崗;我身邊就有好幾個前端因此而轉崗。

其實所謂的前端開發工程師,並不僅僅是將PSD轉化為HTML頁面並做些交互這麼簡單,理論上,應該還有很多的js要開發,那這部分js都轉移到哪裡了呢?答案就是所謂的研發人員身上,他們可能是PHP開發工程師,或者是java開發工程師,這些人同時擔著PHP/java開發和js開發2項工作。那這樣會帶來一個什麼樣的問題呢?一來網站性能很差,二來頁面交互效果很爛,三是前端代碼沒有什麼組織性。為什麼會出現這些問題呢,主要是因為他們的工作重點還是在PHP或是JAVA上,一來本身很難去深究js,二是對頁面的交互缺乏CSS的基礎,三是不會去過多的研究js的優秀框架。我自己做過網站的性能優化,重構過他們的代碼,對這點的理會很深。久而久之,就出現一個很尷尬的情況,國外/國內大牛推出了很多優秀的框架,卻很少能在公司中有應用。網站呈現依舊 ”一副任你外面如何分外妖嬈,我自清貧的傲嬌態度“。

那可能有人要問,js到底可以實現哪些東西。我就結合下我自己的工作說下吧。

1. CSS+JS,可以實現很多很炫的效果,例如旋轉,放大,變形等;這些的話,其實一般的前端開發在接觸到 CSS3很nb的屬性後,都能夠游刃有餘的實現

2. 前端的性能優化,這塊其實涉及的東西很多,對於非js之內,就不過多的說了,主要說下與js方面有關的。我們知道js載入到頁面中主要分為2步,一是下載,二是解析;如果js同步下載的話,其實會block住其他資源的下載,這個就是為什麼把js非同步掉的原因,那這又有一個問題,那我把js非同步處理後,為什麼不能把它放在頭部呢?非同步的資源不是不阻礙其他資源的下載了嗎?這裡又涉及到一個問題,那就是js的解析問題,js下載完成之後就會進行解析,解析會block住其他資源的下載,更重要的一個問題是解析js過程中如果有操作DOM,那頁面沒有下載完,就會報錯。所以現在網站一般都是將js放在頁面的最底部。那放在底部就是最優的解決方法嗎?不是,js沒有實現按需載入。怎麼理解按需載入,就是按照頁面需要展示的內容載入對應處需要使用到的js。簡單的說,就是在頁面初始化的時候,我只載入和首屏相關的js,其他的js一概不載入。這樣頁面在打開的時候,只會載入很少的js文件,網站速度就能有很大的提升。那又怎樣能實現js的按需載入呢,那就是:一將js模塊化/低耦合的組織,二是通過工具實現按需載入,我們這邊使用的是requirejs進行的模塊化載入。除了js按需載入以外,其實還有個影響性能很大的問題,就是js本身的邏輯問題,這塊對性能影響也很大,特別是對一些js引擎較弱的瀏覽器,影響更大。這塊涉及到的東西也很多,簡單的舉個例子,頁面中有300個li,通過jquery 的 $("li")方式去查找,你可以算了需要查找的時間,如果你的查到的結果不保存,每次都是使用$('li')查找,和我存儲了一次,以後直接使用保存的,對比下運行時間。你就會發現運行時間差距很大。

3. 前端的模版引擎,包括underscorejs或者是artTemplatejs,這些雖然只是些工具,但是合理使用,對工作效率提升還是非常明顯;接下來會進一步分開講解這個部分

4. backbonejs,結合我們現在開發的項目,backbone還是非常實用的,主要表現在前後臺分離上,並且對於前端架構的搭建和效率的提升,有很大的飛躍。接下來會詳細講解backbone在前端開發中的具體應用

5. requirejs,這個算是一個前端開發的工具吧,它的主要作用在於管理js,並且模塊化和非同步化js;對於管理文件的載入,有極大的幫助作用。這塊接下來也會分章節講解。

6. 還有一個是目前作為前端開發,基本上都要瞭解的,就是nodejs;這個東西有很多作用,就不去細說。今天主要講解下使用nodejs開發的一個半自動化的測試作用-phantomjs,目前我們這邊專題的測試走的基本上都是這個測試工具,但是是要基於phantomjs進行二次開發的。接下來也會分章節講解這個部分

7. Grunt,這個目前在我們具體的項目中還沒有完全使用,但是其很多功能還是值得研究和推廣的。

當然,以上只是前端開發一些基礎,不過結合我們自己的實踐,以上的東西的引入,給我們開髮帶來了極大的便利,並且較低的學習成本,在具體應用中,也極易推廣使用。

目前我們使用以上的框架,推行的前後臺分離方式,基本上已經確定下來;並且在幾個重大的項目有具體的應用,也帶來的很大的優勢。主要表現在以下幾點

1. 前後臺並行開發,目前UI設計完之後,我們就可以和研發確定介面,介面確定完成之後,就可以完全分離式開發,在前後臺都開發完成之後直接連調就可以

2. 後臺可以更專註後臺開發和介面性能,不必要關註前端的問題。

3. 前端這邊也可以完全發揮自己的優勢,在頁面性能/js載入/非同步化/頁面DOM數優化等方面都會有很大的提高

4. 也做到了專業的人做專業的事情,做到專業化分工

以上是在做前端開發具體的實踐中總結的一些工作心得,也是我們這邊前端會一直向前提升的道路。希望各位前端開發能夠提升自己的技能,現在自己的價值,得到更高的報酬,更多的尊重。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 我發現了一個問題,今天與大家分享。我把整個過程描述一下。 問題 問題 公司有個框架是基於smarty寫的,我負責php的升級,維護人員把新環境布上來之後,測試人員找我提出經常報錯(錯誤:提示找不到文件的)。 我追蹤了一下代碼,原來是smarty的這個地方報的錯誤。 錯誤:這裡報出文件不存在。 ...
  • 開篇導讀 “養成良好的編程習慣”其實是相當綜合的一個命題,可以從多個角度、維度和層次進行論述和評判。如代碼的風格、效率和可讀性;模塊設計的靈活性、可擴展性和耦合度等等。要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面。因此,本系列文章以軟體開發的基礎問題為切入點,闡述程式設計和代 ...
  • 初始化一個map 1 2 3 4 5 Map<String, String> map = new HashMap<String, String>(); map.put("1", "hell"); map.put("2", "hello"); map.put("3", "hel"); map.put( ...
  • 幹掉這道題的那一刻,我只想說:我終於**的AC了!!! 最終記憶體1344K,耗時10282ms,比起歸併樹、劃分樹以及其他各種黑科技,這個成績並不算光彩⊙﹏⊙ 但至少,從最初的無數次TLE到最終的AC,這過程見證了一個二分演算法的艱辛優化 先貼代碼: 1 const int bktSize=1024; ...
  • 現在編程的主流語言基本上都是面向對象的。如C#,C++,JAVA。我們在使用時,已經構造了一個個的類。但是往往由於我們在類內部或外部的設計上存在種種問題,導致儘管是面向對象的語言,卻是面向過程的邏輯,甚至維護起來異常困難。每次增加或修改功能都要改動很多的代碼,如履薄冰。而面向對象的六大原則主要的目的 ...
  • 一、設計目的 從事.Net平臺開發系統已有8年多了,一直思考搭建.Net分散式系統架構。基於window平臺搭建的大型分散式系統不多,之前瞭解過myspace、stackoverflow等大型網站。搭建一個大型平臺需要綜合考慮很多方面,不單純是軟體架構,還包括網路和硬體設備等。由於現代大部分應用建設 ...
  • 本文介紹一個jquery的小技巧,能讓任意組件對象都能支持類似DOM的事件管理,也就是說除了派發事件,添加或刪除事件監聽器,還能支持事件冒泡,阻止事件預設行為等等。在jquery的幫助下,使用這個方法來管理普通對象的事件就跟管理DOM對象的事件一模一樣,雖然在最後當你看到這個小技巧的具體內容時,你可... ...
  • <select>: 1 2 3 4 5 6 7 8 9 10 奪得2008年歐洲杯冠軍的國家是: <select name="nation" id="nation"> <option value="">請選擇</option> <option value="Germany">德國</option> ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...