20151122-前端入門HTML三小問?

前端07班 王

QQ截圖20151122233151.png

O(∩_∩)O哈哈~
又到了一年一度,一日一次寫博客的激動人心的日子,今天的博客其實特簡單,就是搜集整理一下若愚老師上課留下的三個問題,希望與大家一起共勉。
好了,開始正題......

問題壹:utf-8和gbk的差別?

答:GBK的文字編碼是雙字節來表示的,即不論中、英文字符均使用雙字節來表示,只不過為區分中文,將其最高位都定成1。

 至于UTF-8編碼則是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24位(三個字節)來編碼。對于英文字符較多的論壇則用UTF-8節省空間。
 GBK包含全部中文字符,UTF-8則包含全世界所有國家需要用到的字符。

GBK是在國家標準GB2312基礎上擴容后兼容GB2312的標準(好像還不是國家標準)
UTF-8編碼的文字可以在各國各種支持UTF8字符集的瀏覽器上顯示。比如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,而無需他們下載IE的中文語言支持包。
所以,對于英文比較多的論壇 ,使用GBK則每個字符占用2個字節,而使用UTF-8英文卻只占一個字節。
UTF8能很好的兼容其他國語言,相同數據的數據庫占用量是gbk的1.5倍,如果你的網站只面向中國用戶,可以只用考慮選擇簡體版GBK是GB18030的子集,GBK是包括中日韓字符的大字符集合,如果是中文的網站,推薦GB2312 GBK有時還是有點問題.為了避免所有亂碼問題,應該采用UTF-8,將來要支持國際化也非常方便 ,UTF-8可以看作是大字符集,它包含了大部分文字的編碼。使用UTF-8的一個好處是其他地區的用戶(如香港臺灣)無需安裝簡體中文支持就能正常觀看你的文字而不會出現亂碼。GBK的文字編碼是雙字節來表示的,即不論中、英文字符均使用雙字節來表示,只不過為區分中文,將其最高位都定成1。至于UTF-8編碼則是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24位(三個字節)來編碼。對于英文字符較多的論壇則用UTF-8節省空間。GBK包含全部中文字符,UTF-8則包含全世界所有國家需要用到的字符。GBK是在國家標準GB2312基礎上擴容后兼容GB2312的標準(好像還不是國家標準),UTF-8編碼的文字可以在各國各種支持UTF8字符集的瀏覽器上顯示。比如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,而無需他們下載IE的中文語言支持包。所以,對于英文比較多的論壇 ,使用GBK則每個字符占用2個字節,而使用UTF-8英文卻只占一個字節。請注意:UTF-8版本雖然具有良好的國際兼容性,但中文需要比GBK/BIG5版本多占用50%的數據庫存儲空間,因此并非推薦使用,僅供對國際兼容性有特殊要求的用戶使用。簡單地說:對于中文較多的論壇,適宜用GBK編碼節省數據庫空間。對于英文較多的論壇,適宜用UTF-8節省數據庫空間。

  GBK簡體中文版和UTF8簡體中文版有什么區別?ASCII(ISO-8859-1)是鼻祖,最簡單的方式,字節高位為0GB2312、GBK、GB18030,這幾個是中文編碼方式,并向下兼容。GB2312包含7000多個漢字和字符,GBK包含21000多個,GB18030更厲害,到了27000多個。他們都是用2個字節來表示一個漢字。跟ascii是怎么區分的呢?如果高字節的高位為1(也就是高字節大于127),就表示是漢字,低字節并無明顯特征。

Unicode是統一編碼,它建立了一個全世界統一的碼表。世界上的所有文字,在這張碼表中都是唯一的。
UTF-8是Unicode的一種存儲、傳輸方式。它將整個Unicode碼表分為3部分。0000 - 007F 這部分是最初的ascii部分,按原始的存儲方式,即0xxxxxxx。0080 - 07FF 這部分存儲為110xxxxx 10xxxxxx0800 - FFFF 這部分存儲為1110xxxx 10xxxxxx 10xxxxxx因此,一個漢字究竟被存儲為什么,就需要:先查unicode碼表,然后根據在碼表的位置進行計算。例如:“電”字,在碼表中是3575,計算成utf8就是E794B5,而在GB2312的碼表中為B5E7UTF-8的好處:兼容ASCII,存儲英文文件都是單字節,文件小。當然,當以存中文為主時就變成了3字節編碼了,比GB系列還大!如何標明一個文件是utf8格式呢?這個標記是可選的:EF BB BF。比如,用windows自帶的記事本創建一個utf8格式的文件,就會加上這個標記。但是,如果用ultraedit創建utf8文件,并不會加上這個標記。這個標記有個術語,叫做BOM(Byte Order Mark)。不帶BOM的utf8文件和GB2312文件怎么區分呢?我也不知道。唯一能想到的辦法就是:先用一種試,如果出現亂碼,就用另一種再試
UTF-16是雙字節存儲,這就帶來一個問題,即高低字節的順序。兩個字節有兩種順序,它們也用BOM來標明。分為大尾碼和小尾碼兩種。大尾碼的BOM是FEFF,小尾碼的BOM是FFFE,所以我覺得還是GBK好些,如果你是中文站的話。
UNICODE,GBK,UTF-8區別:簡單來說,unicode,gbk和大五碼就是編碼的值,而utf-8,uft-16之類就是這個值的表現形式.而前面那三種編碼是一兼容的,同一個漢字,那三個碼值是完全不一樣的.如"漢"的uncode值與gbk就是不一樣的,假設uncode為a040,gbk為b030,而uft-8碼,就是把那個值表現的形式.utf-8碼完全只針對uncode來組織的,如果GBK要轉UTF-8必須先轉uncode碼,再轉utf-8就OK了.

問題貳:常見的瀏覽器有哪些,有哪些內核?
答:我們日常接觸電腦最頻繁的使用的一款應用程序應該就是瀏覽器了。
那么,我們瀏覽的所有網頁都要通過瀏覽器進行瀏覽,還有很多插件需要通過瀏覽器進行使用。瀏覽器有多重要?可以說,沒有瀏覽器,我們上網就沒有什么意義。

QQ截圖20151122225842.png
 下面說一說我們常見的瀏覽器有哪些,

 谷歌瀏覽器:
 瀏覽器使用配額最高的一款瀏覽器。占有份額百分之四十以上。
 里面含有各種各樣的插件,因有盡有。其缺點就是有點占用內存。

IE瀏覽器:
windows系統自帶的一款瀏覽器。與windows融為一體的瀏覽器。界面簡潔明了,就是插件太少,使用不是非常的方便。

火狐瀏覽器:
小巧方便快捷。一般正常使用需要的插件里面都有。

 歐朋瀏覽器:
 速度快,但是其使用起來有很多的不方便之處,很多播放器都要其內部的專門的插件還有其它的不支持,并且下載插件不支持中文界面,使用起來尤為的不方便。

 遨游瀏覽器:
 集成了很多內部插件,不如記事本,截圖工具,在線翻譯等等,比較適合不太會使用計算機的人使用。使用起來簡單明了方便。

 簡單來說,瀏覽器組成可分兩部分:Shell+內核。shell就是指瀏覽器外殼,就是我們用肉眼能看到的部分,如菜單、工具欄等用戶界面。內核,我們就看不到了,他是幕后英雄,我們上網看到的所有東西都先需要經過它處理,然后再把內容呈現到我們眼前。

瀏覽器內核又可以分成兩部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。它負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,然后會輸出至 顯示器或打印機。瀏覽器的內核的不同對于網頁的語法解釋會有不同,所以渲染的效果也不相同。所有網頁瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網絡內 容的應用程序都需要內核。JS引擎則是解析Javascript語言,執行javascript語言來實現網頁的動態效果。最開始渲染引 擎和JS引擎并沒有區分的很明確,后來JS引擎越來越獨立,內核就傾向于只指渲染引擎。

“內核”只是一個通俗的說法,其英文名稱為“Layout engine”,翻譯過來就是“排版引擎”,也被稱為“頁面渲染引擎”(下文中各種說法通用)。它負責取得網頁的內容(HTML、XML、圖像等等)、整理信息(例如加入CSS等),以及計算網頁的顯示方式,然后會輸出至顯示器或打印機。所有網頁瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網絡內容的應用程序都需要排版引擎。

而瀏覽器的Shell(“外殼)便很好理解了,它是一個面向用戶的界面,也就是網頁瀏覽器為我們實現的各種功能。

瀏覽器的外殼開發和內核開發完全是兩個不同的領域。相對而言,內核開發更簡單一些,因為其用戶需求簡單而明確,面對的使用者也都是程序員;外殼開發要面對最終用戶,要考慮適應不同的用戶使用習慣,特別是還要和各種彈出廣告的網站做斗爭

QQ截圖20151122233138.png

在技術上,其實內核開發和外殼開發很多地方是相通的,我認識的一些外殼開發者可以在非常短的時間內成為Gecko內核的開發者。不過內核開發和外殼開發還是有很多不同的,其中最大的區別在于引擎的可信程度,在外殼開發時,可以假設完全信任渲染引擎,假設其沒有Bug;而在瀏覽器內核開發時,這些假設不存在。另外,對于程序員的要求也有很大的不同,特別是瀏覽器的DOM、插件、Layout和JavaScript模塊,這些模塊的部分代碼對于性能的要求非常嚴格。我曾經犯了一個錯誤,在發行代碼中多寫了一句調試用的printf,結果導致CPU占有率增加了接近30%。而同樣的問題,在外殼開發中則很少會遇到。

同樣,在外殼開發中的鼠標手勢、廣告過濾和書簽管理等功能在內核開發中根本不會遇到,可以這么認為,雖然外殼和內核都是瀏覽器開發,但實際上是截然不同的兩種軟件。

瀏覽器內核的優缺點
Trident:這種瀏覽器內核是IE瀏覽器用的內核,因為在早期IE占有大量的市場份額,所以這種內核比較流行,以前有很多網頁也是根據這個內核的標準來編寫的,但是實際上這個內核對真正的網頁標準支持不是很好,甚至在2005年,與網頁標準制定組織(W3C理事會)所制定的標準發生了脫節,同時 Trident 內核本身的BUG比較多,對一些符合W3C標準的網頁代碼支持不是很好,這在早期的IE版本中比較明顯,比如IE5.5以前(包括IE5.5),其實IE6對W3C標準的支持也不是很好,而我們現在很多人都在使用IE6,事實上它也屬于一個比較早的版本。

但是由于IE的高市場占有率,微軟也很長時間沒有更新Trident內核,這導致了二個結果

1,Trident內核和W3C標準脫節。

2,Trident內核的大量Bug等安全問題沒有得到解決,加上一些專家學者公開自己認為IE瀏覽器不安全的觀點,使很多用戶開始轉向其他瀏覽器,FF,Opera就是這時期興起的。

Gecko:這是Firefox 和 Flock 所采用內核,這個內核的優點就是功能強大、豐富,可以支持很多復雜網頁效果和瀏覽器擴展接口,但是代價是也顯而易見就是要消耗很多的資源,比如內存。

Presto:Opera 采用的是 Presto內核,Presto內核被稱為公認的瀏覽網頁速度最快的內核,這得益于它在開發時的天生優勢,在處理JS腳本等腳本語言時,會比其他的內核快3倍左右,缺點就是為了達到很快的速度而丟掉了一部分網頁兼容性。

Webkit:Webkit 是 Safari 采用的內核,不過 Safari 是蘋果系統下的瀏覽器(雖然也有windows版,但是比較少),所以只簡單介紹一下這個內核的優點和缺點,優點就是網頁瀏覽速度較快,雖然不及 Presto 但是也勝于 Gecko 和 Trident,缺點是對于網頁代碼的容錯性不高,也就是說對網頁代碼的兼容性較低,會使一些編寫不標準的網頁無法正確顯示。

現在的瀏覽器內核及支持的瀏覽器主要有以下幾種:
四大引擎內核:Trident,Gecko,Presto,Webkit

Gecko是C++開發的,Open Source的渲染引擎,包括了SpiderMonkey(Rhino)。主要的使用者有Firefox。

Webkit是蘋果公司基于KHTML開發的。他包括Webcore和JavaScriptCore(SquirrelFish,V8)兩個引擎。主要的使用者有Safari,Chrome。

Presto由Opera Software公司開始的,用于Opera的渲染引擎。Macromedia Dreamweaver (MX版本及以上)和Adobe Creative Suite 2也使用了Presto的內核。

WebCore及WebKit引擎,它們均是KHTML的衍生產品
Safari瀏覽器版本不同,使用內核不同。老版本使用WebCore內核,新版本都使用WebKit內核。

從該表上,我們可以看到主要是前4個內核占領了大部分市場。而我們常用的IE瀏覽器,所用的內核是Trident。

現在見到的瀏覽器:遨游、搜狗、360、TT等,最開始用的都是單獨Trident內核,可現在新版本已是雙核了。

   國內的開源瀏覽器開發氛圍狀況
   其實,開發瀏覽器內核并不難,至少沒有大家想像的難,比開發操作系統內核簡單多了。一般一個有中等c++開發經驗的程序員學習1-2個月就可以上手。至于具體能作到什么層次,需要看個人的努力程度了。至于開發Firefox瀏覽器外殼(做擴展)則相對簡單一些,有一定的網頁制作基礎就可以了。

  國內的開源瀏覽器開發氛圍,和國內的開源軟件的大環境很像,公司的領導還很難接受自己投資開發的軟件拿出去讓其他人“白”用,而國內的開源瀏覽器開發最大的問題在于高質量的開發人員太少,當然,這可能和國內的大環境有關。如果不能很好的解決程序員的生存和發展問題,開發人員短缺的問題將一直存在。

主流瀏覽器所使用的內核分類
Trident內核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等
Gecko內核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto內核:Opera7及以上
Webkit內核:Safari,Chrome等

典型的雙核瀏覽器包括:
搜狗2.0:Trident內核和WebKit內核
傲游3.0Beta:Trident和WebKit內核
QQ瀏覽器5:Trident內核和WebKit內核
使用雙核瀏覽器時,可以自動/手動切換內核來瀏覽網頁。

問題叁:px和em,rem的區別?
答:

Paste_Image.png
 PX特點
  1. IE無法調整那些使用px作為單位的字體大小;
  2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體單位;
  3. Firefox能夠調整px和em,rem,但是96%以上的中國網民使用IE瀏覽器(或內核)。

px像素(Pixel)。相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。(引自CSS2.0手冊)

em是相對長度單位。相對于當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人為設置,則相對于瀏覽器的默認字體尺寸。(引自CSS2.0手冊)

   任意瀏覽器的默認字體高都是16px。所有未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變為 16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。

EM特點

  1. em的值并不是固定的;
  2. em會繼承父級元素的字體大小。
 所以我們在寫CSS的時候,需要注意兩點:
  1. body選擇器中聲明Font-size=62.5%;

  2. 將你的原來的px數值除以10,然后換上em作為單位;

  3. 重新計算那些被放大的字體的em數值。避免字體大小的重復聲明。

    也就是避免1.2 * 1.2= 1.44的現象。比如說你在#content中聲明了字體大小為1.2em,那么在聲明p的字體大小時就只能是1em,而不是1.2em, 因為此em非彼em,它因繼承#content的字體高而變為了1em=12px。
    rem特點
    rem是CSS3新增的一個相對單位(root em,根em),這個單位引起了廣泛關注。這個單位與em有什么區別呢?區別在于使用rem為元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優點于一身,通過它既可以做到只修改根元素就成比例地調整所有字體大小,又可以避免字體大小逐層復合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。對于不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這些瀏覽器會忽略用rem設定的字體大小。下面就是

一個例子:
p {font-size:14px; font-size:.875rem;}注意:

    選擇使用什么字體單位主要由你的項目來決定,如果你的用戶群都使用最新版的瀏覽器,那推薦使用rem,如果要考慮兼容性,那就使用px,或者兩者同時使用。

在這里為大家提供一個px,em,rem單位轉換工具
地址:http://pxtoem.com/

2.jpg

    好了,今晚就了解這么多,希望跟著老師的腳步越走越遠。
    謝謝七班的伙子美女們,謝謝我們的饑人谷,謝謝大前端給我一個拼搏的機會......
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容