Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
若客戶提出一個(gè)質(zhì)量屬性要求,要實(shí)現(xiàn)一個(gè)Web查詢,性能200毫秒以內(nèi),請(qǐng)問這個(gè)要求高還是低?
對(duì)一個(gè)web系統(tǒng)來說,200毫秒是一個(gè)比較高的性能。
憑啥這么說,你要是做過架構(gòu)的話,就明白這個(gè)道理。
作為架構(gòu)師,必須了解完整過程,每一個(gè)細(xì)節(jié)。
你應(yīng)該能把整個(gè)系統(tǒng)分解成若干個(gè)環(huán)節(jié),并且各環(huán)節(jié)的細(xì)節(jié)你都能了解。這個(gè)環(huán)節(jié)是硬的還是軟的?會(huì)不會(huì)影響這個(gè)部分的性能開銷?
看下圖,能看到你從發(fā)起請(qǐng)求,一直到頁(yè)面呈現(xiàn)完了之后的4個(gè)主要環(huán)節(jié)。
要細(xì)分的話,其實(shí)當(dāng)中還有更多的環(huán)節(jié)。
網(wǎng)絡(luò)大概走多少毫秒,差不多50ms,環(huán)節(jié)取決于網(wǎng)絡(luò)環(huán)境,要是跨國(guó)的話,從中國(guó)到美國(guó),可能要上百。
這個(gè)是系統(tǒng)架構(gòu)改變不了的。
那就是200已經(jīng)去掉了50,或者100,剩下100多可以用。
收到數(shù)據(jù)之后,需要瀏覽器渲染出來,又需要多長(zhǎng)時(shí)間呢?
這個(gè)時(shí)間不確認(rèn),看渲染結(jié)果復(fù)不復(fù)雜,有沒ajax再次請(qǐng)求這類情況。
可能簡(jiǎn)單的,10幾毫秒,復(fù)雜的更長(zhǎng)。
右邊從Web服務(wù)器到應(yīng)用服務(wù)器、從應(yīng)用服務(wù)器到數(shù)據(jù)庫(kù)DB之間,還有性能開銷。
數(shù)據(jù)庫(kù)檢索出來是一個(gè)值,這個(gè)值到了你的開發(fā)語言里面,經(jīng)過底層框架,需要做數(shù)據(jù)類型轉(zhuǎn)換,變成程序里的一個(gè)對(duì)象。
一個(gè)架構(gòu)師,就要學(xué)會(huì)區(qū)分,哪些是架構(gòu)能左右的,能夠改善的,哪些是我不能解決的,最后在你能解決的部分里想辦法。
你都了解了之后,你就能專業(yè)地跟客戶說,這個(gè)200毫秒我做不到。
或者說在什么條件下,我能做到。
一個(gè)事情,只有你都了解的情況下,才能給出一個(gè)可行方案。
讓我們一步步看一下整個(gè)過程:
對(duì)于成功的響應(yīng),狀態(tài)代碼為 200。
響應(yīng)中有 3 部分:HTML、CSS 、 Javascript。
瀏覽器渲染的順序:
1. 瀏覽器解析HTML并生成DOM樹。
2. 解析 CSS 并生成 CSSOM 樹。
3. 結(jié)合 DOM 樹和 CSSOM 樹來構(gòu)建渲染樹。
4. 節(jié)點(diǎn)布局
5. 最后頁(yè)面渲染,瀏覽器將內(nèi)容呈現(xiàn)并顯示給用戶。
TML究竟算不算是一門編程語言,這是爭(zhēng)執(zhí)已久的話題。其實(shí),從本質(zhì)來講,HTML確實(shí)算不上是一門編程語言。
HTML全稱,HyperText Markup Language。字面理解,HTML就是一種超文本語言,何謂超文本,就是其用途和意義已經(jīng)超越了純文本。因?yàn)椋琀TML重新定義了文本的格式,而且HTML不僅僅只有文本還包括音視頻。
相比其他語言,HTML的字面意義更容易理解,就是為了方便人類和機(jī)器閱讀。例如,我們常見的頭標(biāo)簽,輸入標(biāo)簽,換行符等等,都是HTML中常見和常用的。此類標(biāo)簽不僅讓人類能夠輕松理解,而且對(duì)于電腦這種機(jī)器來說,也是很容理解的。
HTML語言不具備很強(qiáng)的邏輯性。基于此,很多程序員都不承認(rèn)HTML是一門編程語言。不像其他語言,例如Java,C++,Python等流行語言,這些語言都帶有很強(qiáng)的邏輯和流程控制功能。
不僅僅是HTML無邏輯性和流程控制的問題,同時(shí)HTML還是缺乏靈活性的,因?yàn)镠TML都是按照W3C的標(biāo)準(zhǔn)限定死的語言,主要用于規(guī)范HTML文檔的書寫格式。不像其他語言,用戶可以自定義的地方有很多,千變?nèi)f化。
HTML不被承認(rèn)是一門編程語言,最重要的一點(diǎn)是因?yàn)椋琀TML不能按照人類的設(shè)計(jì)對(duì)一件工作進(jìn)行重復(fù)的循環(huán),直至得到讓人類滿意的答案。這一點(diǎn)最重要,其他語言都可以輕松做到。
在編程語言方面的話,小編還是更為推崇c/c++的!雖然Java、Python熱度不斷上漲,但是作為編程界元老的C++依然具有其無可比擬的優(yōu)勢(shì),小編是一個(gè)有著7年工作經(jīng)驗(yàn)的架構(gòu)師,對(duì)于c++,自己有做資料的整合,一個(gè)完整學(xué)習(xí)C語言c++的路線,學(xué)習(xí)資料和工具。可以進(jìn)我的群7418,18652領(lǐng)取,免費(fèi)送給大家。希望你也能憑自己的努力,成為下一個(gè)優(yōu)秀的程序員!
當(dāng)然,我們也不能否認(rèn)HTML的重要性,作為web領(lǐng)域的重要元老,在當(dāng)前時(shí)候,前端工程師還是有相當(dāng)大的發(fā)展前途的!
在程序員的眼中,HTML是算不上一門編程語言的。雖然如此,但是HTML在WEB領(lǐng)域的重要作用遠(yuǎn)遠(yuǎn)超越其他任何編程語言,瀏覽器打開i一個(gè)網(wǎng)頁(yè)第一步就要解析一個(gè)HTML的DOM樹,越簡(jiǎn)單越重要。
元芳,你怎么看呢?
么是JS延遲加載?
JS延遲加載,也就是等頁(yè)面加載完成之后再加載JavaScript文件
為什么讓JS實(shí)現(xiàn)延遲加載?
js的延遲加載有助于提高頁(yè)面的加載速度。
Js延遲加載的方式有哪些?一般有以下幾種方式:
·defer屬性
·async屬性
·動(dòng)態(tài)創(chuàng)建DOM方式
·使用jQuery的getScript方法
·使用setTimeout延遲方法
·讓JS最后加載
HTML 4.01為<script>標(biāo)簽定義了defer屬性。標(biāo)簽定義了defer屬性元素中設(shè)置defer屬性,等于告訴瀏覽器立即下載,但延遲執(zhí)行標(biāo)簽定義了defer屬性。
用途:表明腳本在執(zhí)行時(shí)不會(huì)影響頁(yè)面的構(gòu)造。也就是說,腳本會(huì)被延遲到整個(gè)頁(yè)面都解析完畢之后再執(zhí)行在<script>元素中設(shè)置defer屬性,等于告訴瀏覽器立即下載,但延遲執(zhí)行
<!DOCTYPE html>
<html>
<head>
<script src="test1.js" defer="defer"></script>
<script src="test2.js" defer="defer"></script>
</head>
<body>
<!--這里放內(nèi)容-->
</body>
</html>
說明:雖然<script>元素放在了<head>元素中,但包含的腳本將延遲瀏覽器遇到</html>標(biāo)簽后再執(zhí)行HTML5規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行。在現(xiàn)實(shí)當(dāng)中,延遲腳本并不一定會(huì)按照順序執(zhí)行defer屬性只適用于外部腳本文件。支持HTML5的實(shí)現(xiàn)會(huì)忽略嵌入腳本設(shè)置的defer屬性
HTML5 為<script>標(biāo)簽定義了async屬性。與defer屬性類似,都用于改變處理腳本的行為。同樣,只適用于外部腳本文件。標(biāo)簽定義了async屬性。與defer屬性類似,都用于改變處理腳本的行為。同樣,只適用于外部腳本文件。
目的:不讓頁(yè)面等待腳本下載和執(zhí)行,從而異步加載頁(yè)面其他內(nèi)容。異步腳本一定會(huì)在頁(yè)面 load 事件前執(zhí)行。不能保證腳本會(huì)按順序執(zhí)行
<!DOCTYPE html>
<html>
<head>
<script src="test1.js" async></script>
<script src="test2.js" async></script>
</head>
<body>
<!--這里放內(nèi)容-->
</body>
</html>
async和defer一樣,都不會(huì)阻塞其他資源下載,所以不會(huì)影響頁(yè)面的加載。
缺點(diǎn):不能控制加載的順序
//這些代碼應(yīng)被放置在</ body>標(biāo)簽前(接近HTML文件底部)
<script type="text/javascript">
function downloadJSAtOnload() {
varelement=document .createElement("script");
element.src="defer.js";
document.body.appendChild(element);
}
if (window. addEventListener)
window.addEventListener("load" ,downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload) ;
else
window. onload=downloadJSAtOnload;
</script>
$.getScript("outer.js" , function(){ //回調(diào)函數(shù),成功獲取文件后執(zhí)行的函數(shù)
console.log(“腳本加載完成")
});
<script type="text/javascript" >
function A(){
$.post("/1ord/1ogin" ,{name:username,pwd:password},function(){
alert("Hello");
});
}
$(function (){
setTimeout('A()', 1000); //延遲1秒
})
</script>
把js外部引入的文件放到頁(yè)面底部,來讓js最后引入,從而加快頁(yè)面加載速度例如引入外部js腳本文件時(shí),如果放入html的head中,則頁(yè)面加載前該js腳本就會(huì)被加載入頁(yè)面,而放入body中,則會(huì)按照頁(yè)面從上倒下的加載順序來運(yùn)行JavaScript的代碼。所以我們可以把js外部引入的文件放到頁(yè)面底部,來讓js最后引入,從而加快頁(yè)面加載速度。
上述方法2也會(huì)偶爾讓你收到Google頁(yè)面速度測(cè)試工具的“延遲加載javascript”警告。所以這里的解決方案將是來自Google幫助頁(yè)面的推薦方案。
//這些代碼應(yīng)被放置在</body>標(biāo)簽前(接近HTML文件底部)
<script type="text/javascript">
function downloadJSAtonload() {
var element=document.createElement("script");
element.src="defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent )
window.attachEvent("onload", downloadJSAtonload);
else window.onload=downloadJSAtOnload;
</script>
這段代碼意思等到整個(gè)文檔加載完后,再加載外部文件“defer.js”。
使用此段代碼的步驟:
6.1)復(fù)制上面代碼
6.2)粘貼代碼到HTML的標(biāo)簽前 (靠近HTML文件底部)
6.3)修改“defer.js”為你的外部JS文件名
6.4)確保文件路徑是正確的。例如:如果你僅輸入“defer.js”,那么“defer.js”文件一定與HTML文件在同一文件夾下。
注意:
這段代碼直到文檔加載完才會(huì)加載指定的外部js文件。因此,不應(yīng)該把那些頁(yè)面正常加載需要依賴的javascript代碼放在這里。而應(yīng)該將JavaScript代碼分成兩組。一組是因頁(yè)面需要而立即加載的javascript代碼,另外一組是在頁(yè)面加載后進(jìn)行操作的javascript代碼(例如添加click事件。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。