img的title和alt有什麼區別
title是global attributes之一,用於爲元素提供附加的advisory information。一般當鼠標滑動到元素上的時候顯示。
alt是img的特有屬性,是圖片內容的等價描述,用於圖片沒法加載時顯示、讀屏器閱讀圖片。可提圖片 高可訪問性,除了純裝飾圖片外都必須設置有意義的值,搜索引擎會重點分析。javascript
- doctype是什麼,舉例常見doctype及特色
- 咱們一般稱doctype爲doctype聲明,doctype是document type(文檔類型)的簡寫,用來講明咱們的HTML或者XHTML是什麼版本,它告訴瀏覽器應該用兼容模式仍是使用標準模式來渲染文檔。
- 在HTML4.01中<!doctype>聲明指向一個DTD,因爲HTML4.01基於SGML,因此DTD指定了標記規則以保證瀏覽器正確渲染內容
- 常見dotype:
- HTML4.01 strict
- HTML 5: <!doctype html>
- HTML全局屬性
- class
- id
- style
- title
- contextmenu
- draggable
- tabIndex
hiddencss
- 什麼Web是語義化?有什麼好處
Web語義化包含兩部分:HTML標籤的語義化與CSS命名語義化
- HTML標籤語義化指使用具備必定語義的標籤來恰當的表示文檔結構
CSS命名語義化表示爲HTML標籤添加有意義的class與idhtml
使用Web語義化的好處前端
HTTP method
get post delete put head OPTIONS TRACEes6
- get:GET是最經常使用的方法,一般用於請求服務器發送某個資源。
- post:向指定的資源提交要被處理的數據。實際上,一般會用它來支持HTML的表單。表單中填好的數據一般會被送給服務器,而後由服務器將其發送到要去的地方。
- delete:DELETE請求服務器刪除請求URL指定的資源
get與post的區別
getweb
- GET 請求可被緩存
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏爲書籤
- GET 請求不該在處理敏感數據時使用
- GET 請求有長度限制
GET 請求只應當用於取回數據編程
post
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏爲書籤
POST 請求對數據長度沒有要求
性能優化
頁面級優化
- 減小hHTTP請求
- 將頁面設計簡單
- 合理利用HTTP緩存
- 靜態資源進行合併與壓縮
- CSS Sprites
- Lasy Load
- 將外部腳本置於底部
- 按需加載javascript
- 將CSS放在HEAD中
防止瀏覽器尚未下載CSS就開始渲染頁面了,致使頁面出現五CSS到有CSS的跳轉。
- 避免重複資源的請求
代碼級優化
- 編寫高質量代碼,注意代碼質量
- 減小DOM操做
- HTML Collection(html蒐集器)
document.images,document.froms,document.getElementsByTagName()返回的都是html collection集合,是一個類數組,也是動態查詢。每次訪問該集合都會從新查詢。
解決方案:轉爲數組
- 慎用with語句
with會延長做用於鏈
- 避免使用eval和Function,腳本引擎每次都須要將裏面的源代碼轉爲可執行代碼,很是耗時,比簡單的函數調用慢100倍。
- 減小做用域鏈查找
- 字符串拼接
+比數據的join方法效率低
- CSS選擇符
CSS選擇符是從右向左開始解析的。
Web綜合
- 什麼是W3C標準
W3C而是一系列標準的集合。網頁主要由三部分組成:結構(Structure)、表現(Presentation)和行爲(Behavior)。對應的標準也分三方面:結構化標準語言主要包括XHTML和XML,表現標準語言主要包括CSS,行爲標準主要包括對象模型(如W3C DOM)、ECMAScript等。這些標準大部分由W3C起草和發佈,也有一些是其餘標準組織制訂的標準,好比ECMA(European Computer Manufacturers Association)的ECMAScript標準。咱們來簡單瞭解一下這些標準:
前端須要注意哪些SEO
- 合理的title、description、keywords:搜索對着三項的權重逐個減少,title值強調重點便可,重要關鍵詞出現不要超過2次,並且要靠前,不一樣頁面title要有所不一樣;description把頁面內容高度歸納,長度合適,不可過度堆砌關鍵詞,不一樣頁面description有所不一樣;keywords列舉出重要關鍵詞便可
- 語義化的HTML代碼,符合W3C規範:語義化代碼讓搜索引擎容易理解網頁
- 重要內容HTML代碼放在最前:搜索引擎抓取HTML順序是從上到下,有的搜索引擎對抓取長度有限制,保證重要內容必定會被抓取
- 重要內容不要用js輸出:爬蟲不會執行js獲取內容
- 少用iframe:搜索引擎不會抓取iframe中的內容
- 非裝飾性圖片必須加alt
- 提升網站速度:網站速度是搜索引擎排序的一個重要指標
grunt glup webpack區別
Gulp/Grunt是一個構建工具,能夠配合各類插件作js壓縮,css壓縮,less編譯 替代手工實現自動化工做
webpack是文件打包工具,能夠把項目的各類js文、css文件等打包合併成一個或多個文件,主要用於模塊化方案,預編譯模塊的方案
- seajs / require : 是一種在線"編譯" 模塊的方案,至關於在頁面上加載一個 CMD/AMD 解釋器。這樣瀏覽器就認識了 define、exports、module 這些東西。也就實現了模塊化。
- browserify / webpack : 是一個預編譯模塊的方案,相比於上面 ,這個方案更加智能。這裏以webpack爲例。首先,它是預編譯的,不須要在瀏覽器中加載解釋器。另外,你在本地直接寫JS,不論是 AMD / CMD / ES6 風格的模塊化,它都能認識,而且編譯成瀏覽器認識的JS。
common AMD CDM ES6
commonjs是用在服務器端的,同步的,NodeJS是這種規範的實現
根據CommonJS規範,一個單獨的文件就是一個模塊。加載模塊使用require方法,該方法讀取一個文件並執行,最後返回文件內部的exports對象。
Node.js主要用於服務器的編程,加載的模塊文件通常都已經存在本地硬盤,因此加載起來比較快,不用考慮異步加載的方式
AMD是異步加載模塊,是用在瀏覽器端的,異步的,requirejs採用的是AMD
AMD規範適用define方法定義模塊。
//經過數組引入依賴 ,回調函數經過形參傳入依賴
define(['someModule1', ‘someModule2’], function (someModule1, someModule2) {
function foo () {
// someing
someModule1.test();
}
return {foo: foo}
});
// AMD規範容許輸出模塊兼容CommonJS規範,這時define方法以下:
define(function (require, exports, module) {
var reqModule = require("./someModule");
requModule.test();
exports.asplode = function () {
//someing
}
});
CMD是通用模塊定義,是用在瀏覽器端的,異步的,seajs採用的CMD
CMD和AMD的區別:CMD至關於按需加載,定義一個模塊的時候不須要當即制定依賴模塊,在須要的時候require就能夠了,比較方便;而AMD則相反,定義模塊的時候須要制定依賴模塊,並以形參的方式引入factory中。
requireJS與seaJS
聯繫
RequireJS 和 Sea.js 都是模塊加載器,倡導模塊化開發理念,核心價值是讓 JavaScript 的模塊化開發變得簡單天然。
區別
- 定位有差別。RequireJS 想成爲瀏覽器端的模塊加載器,同時也想成爲 Rhino / Node 等環境的模塊加載器。Sea.js 則專一於 Web 瀏覽器端,同時經過 Node 擴展的方式能夠很方便跑在 Node 環境中。
- 遵循的規範不一樣。RequireJS 遵循 AMD(異步模塊定義)規範,Sea.js 遵循 CMD (通用模塊定義)規範。規範的不一樣,致使了二者 API 不一樣。Sea.js 更貼近 CommonJS Modules/1.1 和 Node Modules 規範。
- 推廣理念有差別。RequireJS 在嘗試讓第三方類庫修改自身來支持 RequireJS,目前只有少數社區採納。Sea.js 不強推,採用自主封裝的方式來「海納百川」,目前已有較成熟的封裝策略。
- 對開發調試的支持有差別。Sea.js 很是關注代碼的開發調試,有 nocache、debug 等用於調試的插件。RequireJS 無這方面的明顯支持。
- 插件機制不一樣。RequireJS 採起的是在源碼中預留接口的形式,插件類型比較單一。Sea.js 採起的是通用事件機制,插件類型更豐富。
MV*
MVC
MVC的意思是軟件能夠分爲三部分
- 視圖(View):用戶界面。
- 控制器(Controller):業務邏輯
- 模型(Model):數據保存
![Paste_Image.png](http://static.javashuo.com/static/loading.gif)
View 傳送指令到 Controller
Controller 完成業務邏輯後,要求 Model 改變狀態
Model 將新的數據發送到 View,用戶獲得反饋
互動模式有兩種
- 一種是經過 View 接受指令,傳遞給 Controller。
![Paste_Image.png](http://static.javashuo.com/static/loading.gif)
- 另外一種是直接經過controller接受指令。
![Paste_Image.png](http://static.javashuo.com/static/loading.gif)
MVP
MVP 模式將 Controller 更名爲 Presenter,同時改變了通訊方向。
![Paste_Image.png](http://static.javashuo.com/static/loading.gif)
- 各部分之間的通訊,都是雙向的。
- View 與 Model 不發生聯繫,都經過 Presenter 傳遞。
- View 很是薄,不部署任何業務邏輯,稱爲"被動視圖"(Passive View),即沒有任何主動性,而 Presenter很是厚,全部邏輯都部署在那裏。
MVVM
MVVM 模式將 Presenter 更名爲 ViewModel,基本上與 MVP 模式徹底一致。
![Paste_Image.png](http://static.javashuo.com/static/loading.gif)
惟一的區別是,它採用雙向綁定(data-binding):View的變更,自動反映在 ViewModel
git svn
- Git是分佈式的,SVN是集中式的
SVN 是集中式的,會出現耦合。但從另一個方面來講,這也要求開發人員代碼的規範:不要一個函數幹不少事情,不要一個文件寫不少個類。
- git仍然可以提交文件,查看歷史版本記錄,建立項目分支
集中式與分佈式區別
集中式:是將項目集中存放在中央服務器中,在工做的時候,你們只在本身電腦上操做,從同一個地方下載最新版本,而後開始工做,作完的工做再提交給中央服務器保存。這種方式須要聯網,如今雲開發就是這樣的處理方式。
分佈式開發:只要提供一臺電腦做爲版本集中存的服務器放就夠了,但這個服務器的做用僅僅是用來方便「交換」你們的修改,沒有它也同樣幹活,只是交換修改不方便而已。而每一臺電腦有各自獨立的開發環境,不須要聯網,本地直接運行,相對集中式安全係數高不少。