js基礎(chǔ)常見問題總結(jié)(三)~

web前端性能優(yōu)化總結(jié)


瀏覽器訪問優(yōu)化

1、減少http請求,合理設(shè)置 HTTP緩存
 2、使用瀏覽器緩存
 3、啟用壓縮
 4、CSS Sprites
 5、LazyLoad Images
 6、CSS放在頁面最上部,javascript放在頁面最下面
 7、異步請求Callback(就是將一些行為樣式提取出來,慢慢的加載信息的內(nèi)容)
 8、減少cookie傳輸

Javascript代碼優(yōu)化

(1). DOM
 (2). 慎用 with 
 (3). 避免使用 eval和 Function
 (4). 減少作用域鏈查找
 (5). 數(shù)據(jù)訪問
 (6). 字符串拼接


什么是User-Agent

User-Agent是Http協(xié)議中的一部分,屬于頭域的組成部分,User Agent也簡稱UA。用較為普通的一點(diǎn)來說,是一種向訪問網(wǎng)站提供你所使用的瀏覽器類型、操作系統(tǒng)及版本、CPU 類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標(biāo)識(shí)。UA字符串在每次瀏覽器 HTTP 請求時(shí)發(fā)送到服務(wù)器!
  瀏覽器UA 字串的標(biāo)準(zhǔn)格式為: 瀏覽器標(biāo)識(shí) (操作系統(tǒng)標(biāo)識(shí); 加密等級(jí)標(biāo)識(shí); 瀏覽器語言) 渲染引擎標(biāo)識(shí) 版本信息

什么是線程?什么是進(jìn)程?

什么是進(jìn)程?
  當(dāng)一個(gè)程序開始的時(shí)候他就是一個(gè)進(jìn)程,進(jìn)程包括運(yùn)行中的從程序和程序所使用到的內(nèi)存和系統(tǒng)資源。
  而一個(gè)進(jìn)程又是由多個(gè)線程組成的。
 什么是線程
  線程是程序中的一個(gè) 執(zhí)行流,每個(gè)線程都有自己的專有寄存器(棧指針,程序計(jì)數(shù)器等),但代碼區(qū)是共享的,既不同的線程可以執(zhí)行同樣的函數(shù)。

什么是單線程?什么是多線程?

什么是多線程
  多線程是指程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中同時(shí)運(yùn)行多個(gè)不同的線程來執(zhí)行不同的任務(wù)。也就是說允許單個(gè)程序創(chuàng)建多個(gè)并行執(zhí)行的線程來完成各自的任務(wù)。
 多線程的好處
  可以提高CPU的利用率。在多線程程序中,一個(gè)線程必須等待的時(shí)候,CPU可以運(yùn)行其它的線程而不是等待,這樣就大大提高了程序的效率。

多線程與單線程的區(qū)別
【生活舉例】
你早上上班,正要打卡的時(shí)候,手機(jī)響了。。你如果先接了電話,等接完了,在打卡,就是單線程。
如果你一手接電話,一手打卡。就是多線程。
兩件事的結(jié)果是一樣的。。你接了電話且打了卡。

Javascript是單線程的
   因?yàn)镴S運(yùn)行在瀏覽器中,是單線程的,每個(gè)window一個(gè)JS線程,既然是單線程的,在某個(gè)特定的時(shí)刻只有特定的代碼能夠被執(zhí)行,并阻塞其它的代碼。而瀏覽器是事件驅(qū)動(dòng)的(Event driven),瀏覽器中很多行為是異步(Asynchronized)的,會(huì)創(chuàng)建事件并放入執(zhí)行隊(duì)列中。javascript引擎是單線程處理它的任務(wù)隊(duì)列,你可以理解成就是普通函數(shù)和回調(diào)函數(shù)構(gòu)成的隊(duì)列。當(dāng)異步事件發(fā)生時(shí),如mouse click, a timer firing, or an XMLHttpRequest completing(鼠標(biāo)點(diǎn)擊事件發(fā)生、定時(shí)器觸發(fā)事件發(fā)生、XMLHttpRequest完成回調(diào)觸發(fā)等),將他們放入執(zhí)行隊(duì)列,等待當(dāng)前代碼執(zhí)行完成。
  瀏覽器不是單線程的
   雖然JS運(yùn)行在瀏覽器中,是單線程的,每個(gè)window一個(gè)JS線程,但瀏覽器不是單線程的,例如Webkit或是Gecko引擎,都可能有如下線程:

  • javascript引擎線程
  • 界面渲染線程
  • 瀏覽器事件觸發(fā)線程
  • Http請求線程

前端開發(fā)之面向?qū)ο?/h2>

** 面向?qū)ο蟮幕靖拍?*
  面向?qū)ο蟮挠⑽娜Q叫做Object Oriented,簡稱OO。OO其實(shí)包括OOA(Object Oriented Analysis,面向?qū)ο蠓治?、OOD(Object Oriented Design,面向?qū)ο笤O(shè)計(jì))和OOP(Object Oriented Programming,面向?qū)ο蟮某绦蛟O(shè)計(jì))。
  通常所說的面向?qū)ο笫侵窸OP, OOP是一種圍繞真實(shí)世界的概念來組織模型的程序設(shè)計(jì)方法,它采用對(duì)象來描述問題空間的實(shí)體。在使用計(jì)算機(jī)解決問題時(shí),對(duì)象是作為計(jì)算機(jī)模擬真實(shí)世界的一個(gè)抽象,一個(gè)對(duì)象就是一個(gè)物理實(shí)體或邏輯實(shí)體,它反映了系統(tǒng)為之保存信息和(或)與它交互的能力。使其具有自己的屬性和行為, 從而簡化對(duì)復(fù)雜事物的描述,更有利于工程的可維護(hù)性和擴(kuò)展性。
  OOP同結(jié)構(gòu)化程序設(shè)計(jì)相比最大的區(qū)別就在于: 前者首先關(guān)心的是所要處理的數(shù)據(jù),而后者首先關(guān)心的是功能。
 面向?qū)ο笕齻€(gè)基本特征
  封裝 (Encapsulation) 將數(shù)據(jù)以及相關(guān)的操作組織在一起,成為獨(dú)立的構(gòu)件。外部無法直接訪問這些封裝了的數(shù)據(jù),從而保證了這些數(shù)據(jù)的正確性。封裝的目的是為了內(nèi)部數(shù)據(jù)表現(xiàn)形式和實(shí)現(xiàn)細(xì)節(jié)的隱藏,信息隱藏是為了減少系統(tǒng)各部分間的依賴性,各部分間必須通過明確的通道傳送信息,也就是對(duì)象間的接口.這樣一來,隱藏了部分內(nèi)部的細(xì)節(jié),極大方便系統(tǒng)的開發(fā),維護(hù)和擴(kuò)展。
  繼承 (Inheritance) 繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類的繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且派生類可以修改或增加新的方法使之更適合特殊的需求。繼承性很好地解決了軟件的可重用性問題。
  多態(tài) (Polymorphism) 多態(tài)是允許你將父對(duì)象設(shè)置成為和一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。簡單的說,就是允許類與類之間相同方法名的指針得以調(diào)用, 這樣很好地解決了應(yīng)用程序函數(shù)同名問題。實(shí)現(xiàn)多態(tài),有二種方式,覆蓋,重載。


持續(xù)集成是什么

持續(xù)集成指的是,頻繁地(一天多次)將代碼集成到主干。
 它的好處主要有兩個(gè):
  1、快速發(fā)現(xiàn)錯(cuò)誤。每完成一點(diǎn)更新,就集成到主干,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易。
  2、防止分支大幅偏離主干。如果不是經(jīng)常集成,主干又在不斷更新,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成。

持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量。它的核心措施是,代碼集成到主干之前,必須通過自動(dòng)化測試。只要有一個(gè)測試用例失敗,就不能集成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,375評(píng)論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 沐這幾天有點(diǎn)忙,沒和草好好聊天,但會(huì)及時(shí)分享所得所失,因?yàn)閻郏?/div>
    沐師兄閱讀 504評(píng)論 2 1
  • 撥通那串熟悉的數(shù)字,沒有勇氣說話,聽著你說話的聲音,止不住的落淚……就算我說了,你也是一如既往的煩躁,對(duì)著我發(fā)火吧...
    么么smile閱讀 204評(píng)論 0 0