前端Front-end和後端back-end是描述進程開始和結束的通用詞彙。javascript
前端做用於採集輸入信息,後端進行處理。計算機程序的界面樣式,視覺呈現屬於前端。css
前端對於網站來講,一般是指,網站的前臺部分包括網站的表現層和結構層。html
所以前端技術通常分爲前端設計和前端開發,前端設計通常能夠理解爲網站的視覺設計,
前端開發則是網站的前臺代碼實現,包括基本的HTML和CSS以及JavaScript/ajax,如今最新的高級版本HTML五、CSS3,以及SVG等。前端
適合小項目,不分先後端,頁面由JSP、PHP等在服務端生成,瀏覽器負責展示。vue
爲了下降複雜度,之後端爲出發點,有了Web Server層的架構升級,好比Structs、Spring MVC等。java
2005年Ajax正式提出,前端開發進入SPA(Single Page Application 單頁面應用)時代。react
爲了下降前端開發複雜度,Backbone、EmberJS、KnockoutJS、AngularJS、React、Vue等大量前端框架涌現。git
隨着Node.js的興起,爲前端開發帶來一種新的開發模式。github
業界比較出名的實踐是,阿里巴巴的中途島計劃。web
統一團隊成員的編碼規範,便於團隊協做和代碼維護
開發流程的規範
目標: 職責分離、下降耦合,加強代碼的可讀性、維護性和測試性。
採用模塊化的方式組織代碼
採用組件化的編程思想,處理 UI 層
將數據層分離管理
除了備註描述,什麼問題都沒解決
// file app.js
var helloInLang = {
en: 'Hello world!'
};
// file hello.js
/* helloInLang defined in app.js */
function writeHello(lang) {
document.write(helloInLang[lang]);
};複製代碼
命名空間模式始於2002年,使用特殊的約定命名,用於避免命名衝突和全局做用域污染。
缺點:大型項目可維護性較差,沒有解決模塊間依賴管理的問題。
// file app.js
var app = {};
// file greeting.js
app.helloInLang = {
en: 'Hello world!'
};
// file hello.js
app.writeHello = function (lang) {
document.write(app.helloInLang[lang]);
};複製代碼
封裝了變量和function,和全局的namaspace不接觸,鬆耦合
只暴露可用public的方法,其它私有方法所有隱藏
// file app.js
var app = {};
// file greeting.js
app = (function (app) {
var _app = app || {};
_app.helloInLang = {
en: 'Hello world!'
};
return _app;
} (app));
// file hello.js
app = (function (app) {
var _app = app || {};
_app.writeHello = function (lang) {
document.write(app.helloInLang[lang]);
};
return _app;
} (app));複製代碼
2009年 Angular 引入 Java 世界的依賴注入思想。
核心思想:某個模塊不須要手動初始化某個依賴對象,只須要聲明該依賴,並由外部框架自動實例化該對象,並傳遞到模塊內。
// file greeting.js
angular.module('greeter', [])
.value('greeting', {
helloInLang: {
en: 'Hello world!'
},
ayHello: function(lang) {
return this.helloInLang[lang];
}
});
// file app.js
angular.module('app', ['greeter'])
.controller('GreetingController', ['$scope', 'greeting', function($scope, greeting) {
$scope.phrase = greeting.sayHello('en');
}]);複製代碼
服務器端 javascript 模塊化解決方案,適用於同步模塊加載。
// file greeting.js
var helloInLang = {
en: 'Hello world!'
};
var sayHello = function (lang) {
return helloInLang[lang];
}
module.exports.sayHello = sayHello;
// file hello.js
var sayHello = require('./lib/greeting').sayHello;
var phrase = sayHello('en');
console.log(phrase);複製代碼
瀏覽器端 javascript 模塊化解決方案,適用於異步模塊加載。
// file lib/greeting.js
define(function() {
var helloInLang = {
en: 'Hello world!'
};
return {
sayHello: function (lang) {
return helloInLang[lang];
}
};
});
// file hello.js
define(['./lib/greeting'], function(greeting) {
var phrase = greeting.sayHello('en');
document.write(phrase);
});複製代碼
UMD 容許在環境中同時使用 AMD 與 CommonJS 規範。
(function(define) {
define(function () {
var helloInLang = {
en: 'Hello world!'
};
return {
sayHello: function (lang) {
return helloInLang[lang];
}
};
});
}(
typeof module === 'object' && module.exports && typeof define !== 'function' ?
function (factory) { module.exports = factory(); } :
define
));複製代碼
ES2015 Modules 做爲 JavaScript 官方標準,日漸成爲了開發者的主流選擇。
// file lib/greeting.js
const helloInLang = {
en: 'Hello world!'
};
export const greeting = {
sayHello: function (lang) {
return helloInLang[lang];
}
};
// file hello.js
import { greeting } from "./lib/greeting";
const phrase = greeting.sayHello("en");
document.write(phrase);複製代碼
採用tdd的編程思想,引入單元測試
使用各類調試工具
使用前端構建工具
javascript 編譯工具
開發輔助工具
使用CI集成工具
使用腳手架工具
統一公司前端技術棧,根據職責建立不一樣項目。