什麼是單頁面運用(SPA)?
- 單頁面運用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,後續請求都無需再脫離此頁
- 目的:旨在用為用戶供應了更靠近當地挪動APP或桌面運用順序的體驗。
- 流程:第一次請求時,將導航頁傳輸到客戶端,其他請求經由歷程 REST API 獵取 JSON 數據
- 完成:數據的傳輸經由歷程 Web Socket API 或 RPC(遠程歷程挪用)。
- 長處:用戶體驗流通,效勞器壓力小,前後端職責星散
- 瑕玷:關鍵詞規劃難度加大,不利於 SEO
什麼是“前端路由”? 什麼時候實用“前端路由”? 有哪些長處和瑕玷?
- 前端路由經由歷程 URL 和 History 來完成頁面切換
- 運用:前端路由重要實用於“前後端星散”的單頁面運用(SPA)項目
- 長處:用戶體驗好,交互流通
- 瑕玷:瀏覽器“行進”、“退卻”會從新請求,沒法合理應用緩存
模塊化開闢怎麼做?
- 封裝對象作為定名空間 — 內部狀況能夠被外部改寫
- 馬上實行函數(IIFE) — 須要依靠多個JS文件,而且嚴厲按遞次加載
- 運用模塊加載器 — require.js, sea.js, EC6 模塊
通行的 Javascript 模塊的範例有哪些?
- CommonJS — 重要用在效勞器端 node.js
var math = require('./math');
math.add(2,3);
- AMD(異步模塊定義) — require.js
require(['./math'], function (math) {
math.add(2, 3);
});
- CMD(通用模塊定義) — sea.js
var math = require('./math');
math.add(2,3);
- ES6 模塊
import {math} from './math';
math.add(2, 3);
AMD 與 CMD 範例的區分?
範例化產出:
- AMD 由 RequireJS 推行產出
- CMD 由 SeaJS 推行產出
模塊的依靠:
- AMD 提早實行,推重依靠前置
- CMD 耽誤實行,推重依靠就近
API 功用:
- AMD 的 API 默許多功用(分全局 require 和部份 require)
- CMD 的 API 推重職責單一地道(沒有全局 require)
模塊定義劃定規矩:
- AMD 默許一開始就載入悉數依靠模塊
define(['./a', './b'], function(a, b) {
a.doSomething();
b.doSomething();
});
- CMD 依靠模塊在用到時才就近載入
define(function(require, exports, module) {
var a = require('./a');
a.doSomething();
var b = require('./b');
b.doSomething();
})
requireJS的中心道理是什麼?
- 每一個模塊所依靠模塊都邑比本模塊預先加載
對 Node.js 的長處、瑕玷提出了本身的意見? Node.js的特性和實用場景?
- Node.js的特性:單線程,非壅塞I/O,事宜驅動
- Node.js的長處:善於處置懲罰高併發;合適I/O麋集型運用
Node.js的瑕玷:不合適CPU麋集運算;不能充分應用多核CPU;可靠性低,某個環節出錯會致使全部體系崩潰
Node.js的實用場景:
- RESTful API
- 及時運用:在線談天、圖文直播
- 東西類運用:前端布置(npm, gulp)
- 表單網絡:問卷體系
怎樣推斷當前劇本運轉在瀏覽器照樣node環境中?
- 推斷 Global 對象是不是為 window,假如不為 window,當前劇本沒有運轉在瀏覽器中
什麼是 npm ?
- npm 是 Node.js 的模塊治理和宣布東西
什麼是函數式編程?
- 函數式編程是一種”編程範式”,重要頭腦是把運算曆程只管寫成一系列嵌套的函數挪用
- 比方:var result = subtract(multiply(add(1,2), 3), 4);
函數式編程的特性:
- 函數中心化:函數能夠作為變量的賦值、另一函數的參數、另一函數的返回值
- 只用“表達式”,不必“語句”:請求每一步都是純真的運算,都必須有返回值
- 沒有”副作用”:一切功用只為返回一個新的值,不修正外部變量
- 援用通明:運轉不依靠於外部變量,只依靠於輸入的參數
函數式編程的長處:
- 代碼簡約,靠近自然語言,易於明白
- 便於保護,利於測試、除錯、組合
- 易於“併發編程“,不必憂鬱一個線程的數據,被另一個線程修正
- 可“熱晉級”代碼,在運轉狀況下直接晉級代碼,不須要重啟,也不須要停機
什麼是函數柯里化Currying)?
柯里化:
- 一般也稱部份求值,寄義是給函數分步通報參數,每次遞參部份運用參數,並返回一個更詳細的函數,繼承接收盈餘參數
- 時期會一連返回詳細函數,直至返回末了效果。因而,函數柯里化是逐漸傳參,逐漸減少函數的實用範圍,逐漸求解的歷程
- 柯里化的作用:耽誤盤算;參數復用;動態建立函數
柯里化的瑕玷:
- 函數柯里化會發作開支(函數嵌套,比一般函數占更多內存),但機能瓶頸起首來自別的緣由(DOM 操縱等)
什麼是依靠注入?
- 當一個類的實例依靠另一個類的實例時,本身不建立該實例,由IOC容器建立並注入給本身,因而稱為依靠注入。
- 依靠注入處理的就是怎樣有用構造代碼依靠模塊的題目
設想形式:什麼是 singleton, factory, strategy, decorator?
- Singleton(單例) 一個類只要唯一實例,這個實例在全部順序中有一個全局的接見點
- Factory (工場) 處理實列化對象發作反覆的題目
- Strategy(戰略) 將每一個算法封裝起來,使它們還能夠互相替換,讓算法自力於運用
- Observer(觀察者) 多個觀察者同時監聽一個主體,當主體對象發作轉變時,一切觀察者都將獲得關照
- Prototype(原型) 一個完整初始化的實例,用於拷貝或許克隆
- Adapter(適配器) 將差別類的接口舉行婚配調解,只管內部接口不兼容,差別的類照樣能夠協同事情
- Proxy(代辦形式) 一個充任過濾轉發的對象用來代表一個實在的對象
- Iterator(迭代器) 在不須要直到鳩合內部事情道理的情況下,遞次接見一個鳩合內里的元素
- Chain of Responsibility(職責連) 處置懲罰請求構成的對象一條鏈,請求鏈中通報,直到有對象能夠處置懲罰
什麼是前端工程化?
- 前端工程化就是把一整套前端事情流程運用東西自動化完成
前端開闢基礎流程:
- 項目初始化:yeoman, FIS
- 引入依靠包:bower, npm
- 模塊化治理:npm, browserify, Webpack
- 代碼編譯:babel, sass, less
- 代碼優化(緊縮/兼并):Gulp, Grunt
- 代碼搜檢:JSHint, ESLint
- 代碼測試:Mocha
- 現在最着名的構建東西:Gulp, Grunt, npm + Webpack
引見 Yeoman 是什麼?
- Yeoman –前端開闢腳手架東西,自動將最好實踐和東西整合起來構建項目骨架
Yeoman 實際上是三類東西的合體,三類東西各自自力:
- yo — 腳手架,自動天生東西(相當於一個粘合劑,把 Yeoman 東西粘合在一起)
- Grunt、gulp — 自動化構建東西 (最初只要grunt,以後加入了gulp)
- Bower、npm — 包治理東西 (原來是bower,以後加入了npm)
引見 WebPack 是什麼? 有什麼上風?
- WebPack 是一款[模塊加載器]兼[打包東西],用於把種種靜態資本(js/css/image等)作為模塊來運用
WebPack 的上風:
- WebPack 同時支撐 commonJS 和 AMD/CMD,輕易代碼遷徙
- 不僅僅能被模塊化 JS ,還包括 CSS、Image 等
- 能替換部份 grunt/gulp 的事情,如打包、緊縮殽雜、圖片base64
- 擴展性強,插件機制完美,特別是支撐 React 熱插拔的功用
引見類庫和框架的區分?
- 類庫是一些函數的鳩合,輔佐開闢者寫WEB運用,起主導作用的是開闢者的代碼
- 框架是已完成的特別WEB運用,開闢者只需對它添補詳細的營業邏輯,起主導作用是框架
什麼是 MVC/MVP/MVVM/Flux?
MVC(Model-View-Controller)
- V->C, C->M, M->V
- 通訊都是單向的;C只起路由作用,營業邏輯都布置在V
- Backbone
MVP(Model-View-Presenter)
- V<->P, P<->M
- 通訊都是雙向的;V和M不發作聯絡(經由歷程P傳);V異常薄,邏輯都布置在P
- Riot.js
MVVM(Model-View-ViewModel)
- V->VM, VM<->M
- 採納雙向數據綁定:View 和 ViewModel 的更改都邑互相映射到對象上面
- Angular
Flux(Dispatcher-Store-View)
- Action->Dispatcher->Store->View, View->Action
- Facebook 為了處理在 MVC 運用中遇到的工程性題目提出一個架構頭腦
- 基於一個簡樸的準繩:數據在運用中單向活動(單向數據流)
- React(Flux 中 View,只關注表現層)
Backbone 是什麼?
- Backbone 是一個基於 jquery 和 underscore 的前端(MVC)框架
AngularJS 是什麼?
- AngularJS 是一個完美的前端 MVVM 框架,包括模板、數據雙向綁定、路由、模塊化、效勞、依靠注入等
- AngularJS 由 Google 保護,用來輔佐大型單一頁面運用開闢。
React 是什麼?
- React 不是 MV* 框架,用於構建用戶界面的 JavaScript 庫,側重於 View 層
React 重要的道理:
- 假造 DOM + diff 算法 -> 不直接操縱 DOM 對象
- Components 組件 -> Virtual DOM 的節點
- State 觸發視圖的襯着 -> 單向數據綁定
- React 處理方案:React + Redux + react-router + Fetch + webpack
react-router 路由體系的完成道理?
- 完成道理:location 與 components 之間的同步
- 路由的職責是保證 UI 和 URL 的同步
- 在 react-router 中,URL 對應 Location 對象,UI 由 react components 決議
- 因而,路由在 react-router 中就轉變成 location 與 components 之間的同步
延續更新中~喜好留下個贊哦!