瀏覽器訪問優化
1、減少http請求,合理設置 HTTP緩存
2、使用瀏覽器緩存
3、啟用壓縮
4、CSS Sprites
5、LazyLoad Images
6、CSS放在頁面最上部,javascript放在頁面最下面
7、異步請求Callback(就是將一些行為樣式提取出來,慢慢的加載信息的內容)
8、減少cookie傳輸
Javascript代碼優化
(1). DOM
(2). 慎用 with
(3). 避免使用 eval和 Function
(4). 減少作用域鏈查找
(5). 數據訪問
(6). 字符串拼接
什么是User-Agent
User-Agent是Http協議中的一部分,屬于頭域的組成部分,User Agent也簡稱UA。用較為普通的一點來說,是一種向訪問網站提供你所使用的瀏覽器類型、操作系統及版本、CPU 類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標識。UA字符串在每次瀏覽器 HTTP 請求時發送到服務器!
瀏覽器UA 字串的標準格式為: 瀏覽器標識 (操作系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本信息
什么是線程?什么是進程?
什么是進程?
當一個程序開始的時候他就是一個進程,進程包括運行中的從程序和程序所使用到的內存和系統資源。
而一個進程又是由多個線程組成的。
什么是線程
線程是程序中的一個 執行流,每個線程都有自己的專有寄存器(棧指針,程序計數器等),但代碼區是共享的,既不同的線程可以執行同樣的函數。
什么是單線程?什么是多線程?
什么是多線程
多線程是指程序中包含多個執行流,即在一個程序中同時運行多個不同的線程來執行不同的任務。也就是說允許單個程序創建多個并行執行的線程來完成各自的任務。
多線程的好處
可以提高CPU的利用率。在多線程程序中,一個線程必須等待的時候,CPU可以運行其它的線程而不是等待,這樣就大大提高了程序的效率。
多線程與單線程的區別
【生活舉例】
你早上上班,正要打卡的時候,手機響了。。你如果先接了電話,等接完了,在打卡,就是單線程。
如果你一手接電話,一手打卡。就是多線程。
兩件事的結果是一樣的。。你接了電話且打了卡。
Javascript是單線程的
因為JS運行在瀏覽器中,是單線程的,每個window一個JS線程,既然是單線程的,在某個特定的時刻只有特定的代碼能夠被執行,并阻塞其它的代碼。而瀏覽器是事件驅動的(Event driven),瀏覽器中很多行為是異步(Asynchronized)的,會創建事件并放入執行隊列中。javascript引擎是單線程處理它的任務隊列,你可以理解成就是普通函數和回調函數構成的隊列。當異步事件發生時,如mouse click, a timer firing, or an XMLHttpRequest completing(鼠標點擊事件發生、定時器觸發事件發生、XMLHttpRequest完成回調觸發等),將他們放入執行隊列,等待當前代碼執行完成。
瀏覽器不是單線程的
雖然JS運行在瀏覽器中,是單線程的,每個window一個JS線程,但瀏覽器不是單線程的,例如Webkit或是Gecko引擎,都可能有如下線程:
- javascript引擎線程
- 界面渲染線程
- 瀏覽器事件觸發線程
- Http請求線程
前端開發之面向對象
** 面向對象的基本概念**
面向對象的英文全稱叫做Object Oriented,簡稱OO。OO其實包括OOA(Object Oriented Analysis,面向對象分析)、OOD(Object Oriented Design,面向對象設計)和OOP(Object Oriented Programming,面向對象的程序設計)。
通常所說的面向對象是指OOP, OOP是一種圍繞真實世界的概念來組織模型的程序設計方法,它采用對象來描述問題空間的實體。在使用計算機解決問題時,對象是作為計算機模擬真實世界的一個抽象,一個對象就是一個物理實體或邏輯實體,它反映了系統為之保存信息和(或)與它交互的能力。使其具有自己的屬性和行為, 從而簡化對復雜事物的描述,更有利于工程的可維護性和擴展性。
OOP同結構化程序設計相比最大的區別就在于: 前者首先關心的是所要處理的數據,而后者首先關心的是功能。
面向對象三個基本特征
封裝 (Encapsulation) 將數據以及相關的操作組織在一起,成為獨立的構件。外部無法直接訪問這些封裝了的數據,從而保證了這些數據的正確性。封裝的目的是為了內部數據表現形式和實現細節的隱藏,信息隱藏是為了減少系統各部分間的依賴性,各部分間必須通過明確的通道傳送信息,也就是對象間的接口.這樣一來,隱藏了部分內部的細節,極大方便系統的開發,維護和擴展。
繼承 (Inheritance) 繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。一個新類可以從現有的類中派生,這個過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且派生類可以修改或增加新的方法使之更適合特殊的需求。繼承性很好地解決了軟件的可重用性問題。
多態 (Polymorphism) 多態是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是允許類與類之間相同方法名的指針得以調用, 這樣很好地解決了應用程序函數同名問題。實現多態,有二種方式,覆蓋,重載。
持續集成是什么
持續集成指的是,頻繁地(一天多次)將代碼集成到主干。
它的好處主要有兩個:
1、快速發現錯誤。每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易。
2、防止分支大幅偏離主干。如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成。
持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成。