Angular的核心?css
組件,指令,服務,依賴注入前端
性能優化?ajax
一、減小http請求(圖片壓縮合並,css壓縮合並,js文件壓縮合並)緩存
二、檢查是否有重定向問題性能優化
三、檢查是否一個列表有屢次請求問題cookie
四、減小DOM數量app
五、延遲加載框架
六、提早加載dom
七、能用css作的儘可能不要用js去作,能有原生寫的儘可能不引用外部插件異步
八、減小cookie的使用
九、儘可能不用iframe
十、前端和後臺協調,使用相應資源的壓縮
十一、根據需求使用ajax緩存
十二、減小dom操做
1三、減量不嵌套循環
1四、css放head儘可能不使用@import,由於@import是同步操做,只有把對應的樣式導入後,纔會繼續向下加載,而link是異步的操做
1五、css設置定位後最好設置z-index改變盒子的層級
1六、使用window.requestAnimationFrame代替傳統的定時器動畫,若是可使用setTimeout代替的setInterval就儘可能不用setInterval
1七、script標籤放在底部加載
1八、綁定多個事件的時候可使用事件委託,減小循環給元素綁定事件
1九、減小flash的使用
20、合理利用本地緩存
2一、儘可能給動畫設置單獨的一個圖層(避免重繪和迴流)
AMD和CMD的標準?現階段使用的都是什麼標準?
AMD 是 RequireJS 在推廣過程當中對模塊定義的規範化產出。
CMD 是 SeaJS 在推廣過程當中對模塊定義的規範化產出。
AMD推崇依賴就近
CMD推崇依賴前置
// CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此處略去 100 行 var b = require('./b') // 依賴能夠就近書寫 b.doSomething() // ... }) // AMD 默認推薦的是 define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好 a.doSomething() // 此處略去 100 行 b.doSomething() ... })
現階段大部分框架用的較多應該是AMD,依賴前置
TypeScript的多態?
父類定義了一個接口,子類有多種實現
AngularJS的依賴注入?
依賴注入(DI)是用來建立對象及其依賴的其它對象的一種方式。 當依賴注入系統建立某個對象實例時,會負責提供該對象所依賴的對象(稱爲該對象的依賴)。
@Injectable 裝飾器會指出這些服務或其它類是用來注入的。它還能用於爲這些服務提供配置項。
providers 告訴 Angular,它的根注入器要負責調用類的構造函數來建立一個實例,並讓它在整個應用中都是可用的。
組件中的providers服務還能夠提供給指定的組件。在組件級提供的服務只能在該組件及其子組件的注入器中使用。
import { Component } from '@angular/core'; import { HeroService } from './hero.service'; @Component({ selector: 'app-heroes', providers: [ HeroService ], template: ` <h2>Heroes</h2> <app-hero-list></app-hero-list> ` }) export class HeroesComponent { }
Angular的髒值檢查再也不被吐槽呢?
Angular 使用了 zone.js 這個大殺器來跟蹤異步任務,並進行髒檢查
每個組件都都它本身的檢測器(detector),用於負責檢查其自身模板上綁定的變量。因此每個組件均可以獨立地決定是否進行髒檢查。
Angular 中組件是以樹的形式組織起來的,相應地,檢測器也是一棵樹的形狀。當一個異步事件發生時,髒檢查會從根組件開始,自上而下對樹上的全部子組件進行檢查。相比 Angular1 中的帶有環的結構,這樣的單向數據流效率更高,並且容易預測
<!--value是數據綁定,input是事件綁定-->
<input [value]="currentHero.name"
(input)="currentHero.name=$event.target.value"
>
<!--等價-->
<input [(ngModel)]="currentHero.name">
而Angular2接入了ZoneJS
,由它監聽了Angular全部的異步事件。ZoneJS重寫了全部的異步API(所謂的猴子補丁,MonkeyPath)。ZoneJS會通知Angular可能有數據發生變化,須要檢測更新
Angularjs採用的是雙向數據流,錯綜複雜的數據流使得他不得很少次檢查,使得數據最終趨向穩定