電商網站前端架構 學習筆記(全是干貨)

1:前端架構的基本知識

1: 前端工程師必須會的一些技能

前端工程師基本技能圖.PNG

2: 前端架構基本知識

  • 什么是前端架構?
    每個人對每個架構有不同的認識和一些想法。沒有一個架構是完美的,只有一個架構是不是適合你的。哪個個架構符合你的需求的時候,你使用它就是了啦。另外,要記住的是架構是為完成產品服務的.一個簡單的網站也可能涉及到前端架構,比如代碼的復用.
  • 做前端架構的目的?
    做架構的目的并不是為了技術做架構而是因為產品才做架構的;
  • single page application (SPA)
    單頁網站頁面的應用,所有應用頁面的切換通過頁面的哈希完成,做這樣的事需要一些比較復雜的框架,像backbone,anjular.js.單頁面應用最近幾年開始流行起來了,像qq郵箱,雅虎郵箱等都已經在應用了.

2:前端建構技術基礎介紹

  • 技術基礎的作用:做好技術基礎的好處在于:后面做網站的整體規劃和架構設計就會輕松非常多

語言基礎

  • javascript,html & css

基本框架和類庫

  • jQuery (更方便做代碼開發)& require.js/ seajs(模塊化框架),MVX farmwork
  • 幫助我們更高效的去開發代碼

設計模式

  • 繼承,重用
  • 代碼如何組織:比如我們在頁面上有兩個地方的代碼有重復,我們把代碼封裝成一個函數,這是最基本的設計模式-代碼重用

性能優化

  • http cache,local cache,compress(代碼壓縮),DOM render(DOM渲染)
  • 如何解決性能瓶頸問題:
    1: 最常見的就是找到緩存的點,可以從http協議層面可以做緩存,利用HTML5做本地緩存
    2: 做代碼壓縮
    3:更科學的做DOM樹的渲染

其它

  • Resful API design(前后臺數據聯調),自動化(Group/node.js),跨終端適配,代碼托管

3:產品設計和發布

如果我們想讓產品更加具有靈魂感,我們必須自己去思考產品應該被設計成什么樣

交互設計圖.PNG


4:數據分析和優化

數據分析和優化是做前端架構的必要前提,因為前端頁面的數據對于我們前端工程師來說是非常重要的,比如可以根據數據波動去發現頁面中的bug等等;最終的目的是提高產品的整體的體驗和質量
大家以一個比較全局的觀點去考慮這個問題的時候,不要以技術的觀點去想,而要以產品的規劃和產品怎么為用戶服務的理念去想


5:前端架構組織方式和目錄組織

架構組織的維度分以下幾個方面

目錄層面
利用操作系統與生俱來的目錄結構,合理規劃目錄結構,是好的架構實現的基礎
頁面層面
頁面層面,通常用來組織視圖( HTML )
功能層面
最簡單的網站,單個文件通常是一個或多個相關功能的聚合
組件化和設計模式層面
當一個邏輯需要多次被使用時,我們就開始組件化和抽象


1 :目錄層面的組織

  • 目錄系統在前端架構中所充當的作用:
  • 更高效的組織開發目錄: 好的組織方式,甚至可以代替那些復雜的代碼組織框架
  • CSS,JS 和圖片要分開存放:分開存放,往往不是出于技術的考量,而是從團隊協作和迭代管理層面觸發
舉例: js目錄結構,根據以下三層,分門別類的放置文件
1: Model: 數據層,存放與服務器打交道的代碼 
2: UI: 控制視圖業務邏輯的代碼
3: Controller: 控制層

2:?頁面層面的組織

  • 由于頁面中有不同的代碼,所以不能用相同的方式進行組織架構的劃分,在我們頁面中有?js(邏輯性代碼);?html(結構性代碼);css 描述性代碼

  • 重用:一般頁面與頁面之間經常會有公共的部分,我們把公共的部分抽象出來,存放到一個文件夾,然后將里面的文件作為公用部分.
    同常來講,頁面與頁面之間之間 不太存在邏輯之間的關系,而是包含與被包含的關系,比如一個頁面包含某個子結構.

3:?功能層面

  • 最簡單的網站,單個文件通常是一個或多個相關功能的聚合

6: 組件化和設計模式層面(詳細講解,單獨作為一節)

  • JS中的繼承和Extend
    繼承和拷貝是JS中抽象的基礎,因為JS不像其它面對對象語言,與生俱來就有這些功能,所以呢,要自己寫

  • 淺拷貝簡單例子

var a = {};
var b = {c:100, d:200};
//想讓 a 具有 b 的屬性,就用到淺拷貝; 其實用到的就是for in 方法
var i;
for (i in b){
a[i] = b[i] 
}
a; // {c: 100, d: 200}
//封裝函數
function extend(sub,sup) {var i ;for (i in sub) {sub[i] = sup[i]}
}
  • JS繼承繼承方式:原型鏈
    偷懶繼承方式:
//people
var people = function(){this.name = 'jiangdeng'
}
people.prototype.getName = function() {return this.name
}
//man
var man = function() {this.sex = 'male';people.call(this); //將man函數的this指向 people對象
}
//繼承
//想要man獲取people對象上的屬性
//最簡單的方式,也是偷懶的方式
man.prototype = people.prototype;
var Man = new man();
Man.getName()

偷懶方式的問題: man 的 prototype 中的 constructor 屬性指向的是 people 的構造函數,當 people 的 getName 方法 被重寫后,man再調用 getName 方法也會被重寫

修改后的繼承方式

//peopel
var people = function() {this.name = 'jiangdeng'
}
people.prototype.getName = function() {return this.name
}
//man
var man = function() {this.sex = 'male';people.call(this); //將man函數的this指向 people對象
}
//繼承
//不讓man的原型指向people的原型,而是指向people的實例
//指向people的實例后,man的constructor改變了,得把它設回它本身
man.prototype = new peopl();
man.prototype.constructor = man;
var Man = new man();
Man.getName() //jiangdeng
  • 命名空間
    命名空間的基礎:前端模塊拆分的最基本形式可以認為是閉包的一種應用,但是這種方式對于命名空間的管理過于隨意
  • 組件化
    高級一點的組件化:可以使用開源框架完成最終的組件的組織和管理,例如requirejs/seajs
    require.js(國外人寫的)
    sea.js(國人寫的)
  • 組件化中的AMD和CMD的區別
    CMD -- 依賴就近 (按需求再加載)
    AMD -- 依賴前置 (提前一鍋端,都加載)

7:前端架構實施

1:前端架構實施前的思考

  • 更合理的技術選型 --例如團隊成員都精通jQuery,就沒必要選YUI作為類庫;
  • 需求分解后,模塊的邊界劃分;模塊的邊界劃分不是一個人的事,每個代碼的貢獻者都有義務提出建議;
  • 如何設計借口更加友好
  • 自動化的發布和快速迭代
  • 如何降低維護成本,維護成本通常體現在架構的可擴展性和易用性,好的設計會一勞永逸;

2:優化和擴展
從哪些方面著手?

  • 代碼層面
    code review & 代碼規范
  • 架構層面
    可擴展性是否受約束
  • 協議層面
    通過 http(s) 協議優化
  • 綜合
    優化往往是多種技術的綜合使用

3: 前端自動化

  • 前端自動化原因: 人會犯錯 ;提高開發效率
  • 前端自動化基礎: node.js /grunt
  • 自動化的方向: 發布 測試 開發

課程地址:?電商網站前端架構



作者:一杯濁酒
鏈接:https://www.jianshu.com/p/9df989dedd08
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

愛好-摩托車:鈴木

ylbtech-愛好-摩托車:鈴木1.返回頂部 2.返回頂部3.返回頂部4.返回頂部5.返回頂部 1、http://www.suzuki-china.com/motor/2、6.返回頂部作者:ylbtech出處:http://ylbtech.cnblogs.com/本文版權歸作者和博客園共有,歡迎轉載&#x…

Unable to preventDefault inside passive event listener

轉自:https://segmentfault.com/a/1190000008512184 測試: body {margin: 0;height: 2000px;background: linear-gradient(to bottom, red, green); }// 在 chrome56 中,照樣滾動,而且控制臺會有提示,blablabla window…

thymeleaf 中文文檔

https://raledong.gitbooks.io/using-thymeleaf/content/

vue面試題,知識點匯總(有答案)

一. Vue核心小知識點 1、vue中 key 值的作用 key 的特殊屬性主要用在 Vue的虛擬DOM算法,在新舊nodes對比時辨識VNodes。如果不使用key,Vue會使用一種最大限度減少動態元素并且盡可能的嘗試修復/再利用相同類型元素的算法。使用key,它會基于…

EF中Take和Skip的區別

以例子來說明: 數據庫中Orders表如下: 代碼部分: 運行結果: 可以看出:Take()方法的作用是從查詢結果中提取前n個結果;而Skip()方法則是跳過前n個結果,返回剩余的結果。轉載于:https://www.cnblo…

最短路徑次短路徑算法

容易理解:https://blog.csdn.net/m0_37345402/article/details/76695930 https://blog.csdn.net/qq_36386435/article/details/77403223 https://blog.csdn.net/u011815404/article/details/80441443轉載于:https://www.cnblogs.com/genggeng/p/9810316.html

springmvc 中文文檔

https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/spring_mvc_documentation_linesh_translation-9ivd27r4.html

詳解Vuex常見問題、深入理解Vuex

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。 狀態?我把它理解為在data中的屬性需要共享給其他vue組件使用的部分,就叫做狀態。簡單的…

Gym 101982 (2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) )

傳送門&#xff1a; Problem A 溫暖的簽到題 #include<bits/stdc.h> using namespace std; const int maxn1007; char s1[maxn],s2[maxn]; int main(){ios::sync_with_stdio(false);cin.tie(0);int n,k,sum00,sum10;cin>>k>>s1>>s2;nstrlen(s1);for (i…

day02 while循環 運算符 格式化輸出 編碼

今日主要內容 while循環:判斷條件是否成立。 如果成立執行循環體。然后再次判斷條件&#xff0c;。。。。。直到條件不成立的時候跳出循環 語法&#xff1a; while 條件:   循環體 else:   當條件不成立的時候執行這里 和break沒關系 break 終止當前循環 continue 停止當前…

Bootstrap中文文檔

https://v3.bootcss.com/css/

Mac OS Git 安裝

一、Git是一個分布式的代碼版本管理工具。類似的常用工具還有SVN,CVS。最大的特點也是優點在于提供分布式的代碼管理 1、分支代碼只有一份&#xff01; 使用過svn的童鞋想必都知道&#xff0c;當我們要開發一個新功能或者增加一個新版本或者修改一個復雜bug的時候&#xff0c…

kubeadm安裝k8s 1.13版本

一&#xff1a;環境初始化 1.關閉selinux,iptables 2.做好本地的dns解析&#xff0c;我這里用的是/etc/hosts 3.做一下免密傳輸 4. master:10.0.18.210 node1:10.0.18.211 node2:10.0.18.212 二&#xff1a;配置yum源 [rootmaster yum.repos.d]# vim kuberbetes.repo [kubernet…

MyBastis 三種批量插入方式的性能比較

數據庫使用的是MySQL&#xff0c;JDK版本1.8&#xff0c;運行在SpringBoot環境下 本文章源代碼&#xff1a;https://github.com/runbeyondmove/mybatis-batch-demo 對比3種可用的方式 1、反復執行單條插入語句2、xml拼接sql3、批處理執行 先說結論&#xff1a;少量插入請使用反…

JS對象與jQuery對象

JS對象大致可以分為三種&#xff0c;如下圖&#xff1a; JS常用內置對象&#xff08;JS自身所持有的對象&#xff0c;不需要創建&#xff0c;直接可用&#xff09;&#xff1a; String&#xff1a;API跟java的字符串API大致相同 兩種創建對象的方式&#xff1a;String s1 “…

Vue-router 中hash模式和history模式的區別

Vue-router 中hash模式和history模式的關系 在vue的路由配置中有mode選項 最直觀的區別就是在url中 hash 帶了一個很丑的 # 而history是沒有#的 mode:"hash"; mode:"history"; hash模式和history模式的不同 對于vue這類漸進式前端開發框架&#xff0…

Nginx Slab內存管理

L38 Slub內存管理適用 ngx_http_limit_conn_module、ngx_http_limit_req_module 模塊場景 我們可以用阿里第三方模塊Slab_Stat模塊 并且用add-module 方式編譯進openresty中 轉載于:https://www.cnblogs.com/jackey2015/p/10684151.html

day2---while else

# -*- coding:utf-8 -*-while 條件&#xff1a;循環體終止循環 else&#xff1a; while else 解釋&#xff1a;當循環體中沒有被break打斷則會運行else&#xff0c;打斷則不會運行else# 例子 a 0 while a < 5:print(a)a 1break else:print(循環結束) # 0 轉載于:https:/…

jQuery中this與$(this)的區別總結

https://www.cnblogs.com/gfl123/p/8080484.html

2019前端必會黑科技之PWA

一、背景 從2018年到現在&#xff0c;作為號稱下一代web應用模型的PWA&#xff0c;逐漸成為了一個各大前端廠商爭先恐后進行涉足&#xff0c;布局的一個新的技術&#xff0c; 其主要的對標物Native app&#xff0c;作為現在最主流的mobile端應用&#xff0c;它的安全&#xff…