整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          網站速度監控,網站速度監控的5種辦法

          網站速度監控,網站速度監控的5種辦法

          站打開速度直接影響著網站用戶的瀏覽體驗,試想一下,你打開一個網站卻一直在轉打不開,會是什么樣的感受,大多用戶會直接關閉網站。所以網站打開速度慢會直接影響網站的跳出率。

          下面總結幾個解決網站打開速度很慢有效方法,幫助學習建網站的學員提升網站打開速度。

          方法一:盡量使用國內主機

          國內主機比國外主機有著地域上的優勢,就是說國內機房離用戶比國外機房更近,傳輸時間更少。如果網站用戶主要是國內用戶的話,最好網站選擇國內主機。這樣國內用戶打開速度會高于國外主機。

          IIS7網站監控工具可以做到提前預防各類網站劫持,并且是免費在線查詢,通過查詢知道域名是否健康等等。

          它可以做到24小時定時監控:

          1、網站是否被黑

          2、網站是否被劫持

          3、域名是否被墻

          4、DNS是否被污染

          5、獨家檢測網站真實的完全打開時間

          方法二:使用CDN加速

          CDN加速的原理簡單地說就是將你網站的內容同步到CDN服務器上,以前用戶訪問網站時,就直接從CDN服務器上傳輸了。由于CDN服務器普通速度快,這樣網站打開速度也會變快。國內網站普通使用的CDN加速是百度云加速,但要求網站使用的是國內備案空間。(相關知識:什么是CDN CDN加速有什么用?)

          方法三:壓縮網站圖片

          很多網站打開速度很慢,主要原因就是網頁上的圖片太多,而且都是大圖片,直接拖慢了網站打開速度。解決方法就是使用PS軟件將網站圖片壓縮,減小圖片大小,在不影響清晰度的基礎上降低圖片分辨率。

          方法四:JS文件后移

          由于瀏覽器打開網頁是按照從上往下的順序展示的,有些網站把JS文件都放在</head>標簽上面,這會導致網站打開時先加載JS文件,再加載其它的HTML內容。正確做法應該是將網站上的所有JS文件后移,放到整個網頁的最底部。

          方法五:屏蔽國外文件

          對于使用WORDPRESS程序建網站時,WORDPRESS程序會自動調用國外的谷歌字體,而谷歌在國內是無法打開的,這樣就造成網站一直無法加載該文件,影響網站打開速度。解決方法見:解決wordpress網站打開慢,WP程序網站加速方法。

          avaScript 既是一個 面向過程的語言 又是一個 面向對象的語言。在 JavaScript 中,通過在運行時給空對象附加方法和屬性來創建對象,與編譯語言如 C++ 和 Java 中常見的通過語法來定義類相反。對象構造后,它可以用作是創建相似對象的原型。

          JavaScript 的動態特性包括運行時構造對象、可變參數列表、函數變量、動態腳本執行(通過 eval)、對象內枚舉(通過 for ... in)和源碼恢復(JavaScript 程序可以將函數反編譯回源代碼)。

          JavaScript方面,之前寫過《ECMAScript進化史(1):話說Web腳本語言王者JavaScript的加冕歷史》

          在看 各JavaScript引擎的簡介,及相關資料/博客收集帖 ,結合自己的理解,整理一個筆記。現代JavaScript引擎都有哪些特征呢?跟以前的JavaScript引擎有怎樣的差別,為什么變快了那么多?

          JavaScript引擎歷史

          早期JavaScript引擎的實現普遍跟同時代的其它腳本語言一樣,比較“偷懶”。反正是“腳本語言”,當時的JavaScript腳本通常只包含很簡單的邏輯,只運行很短時間就完事。沒啥性能壓力,得不到足夠的重視與開發資源,性能自然是好不到哪里去,卻也足以滿足當時的需求。

          Mocha

          非常早期的“Mocha”引擎實現得確實非常偷懶。字節碼解釋器、引用計數方式的自動內存管理、fat discriminated union形式的值表現形式。犀牛書第4版寫了點JavaScript與引用計數的歷史。

          SpiderMonkey

          1996年,祖師爺Brendan Eich新寫的SpiderMonkey已經改為使用mark-and-sweep GC、tagged value。

          在V8出現前,SpiderMonkey是native application嵌入JavaScript的最流行選擇。如果大家沒留意過的話,UltraEdit就內嵌了SpiderMonkey來讓用戶使用JavaScript寫宏與插件[/url];Adobe Acrobat也類似。

          于是其實早期的兩個主要的JavaScript引擎實現,Mozilla SpiderMonkey和Microsoft JScript其實都一直在用mark-and-sweep GC。也沒啥別的主流JavaScript引擎用過引用計數方式來實現自動內存管理的。這點別被忽悠了。

          在叫得出名字的JavaScript引擎里只有quad-wheel(沒聽說過么?不奇怪,非主流嘛)是用引用計數方式實現自動內存管理的。

          老版本IE里JScript雖說是有因為循環引用而導致內存泄漏的問題,但那不是因為JScript自身用引用計數。問題出在JScript與DOM交互的邊界上IE的DOM節點(及其它host對象)是COM對象,而COM對象自身是引用計數的。在JS一側GC時DOM節點被看作根節點,所以被DOM節點引用的JS對象不會死;反過來,被JS對象引用的DOM節點的引用計數不為0所以也不會死。這導致JScript與DOM交互時有可能被連累引發循環引用->內存泄漏的問題。

          IE9/Chakra里已經通過把DOM對象變成由JavaScript一側的GC來管理解決了這個問題。

          早期JavaScript引擎得到的投入實在不足,而當時的Java虛擬機(JVM)卻得到了大量資源實現各種優化,包括JIT編譯器之類。這使得用Java寫的Rhino一度能比用C寫的SpiderMonkey跑得還快,因為Rhino得益于JVM里優秀的JIT編譯器和GC,而SpiderMonkey還在用簡易的解釋器和GC。

          這個階段中,JavaScript對象的布局或者說表現方式通??梢越凶觥皃roperty bag”,本質上就跟hashmap一樣。

          Rhino/Nashorn

          Rhino是Java版的SpiderMonkey。當時Netscape想用純Java來實現新版瀏覽器,自然需要一個Java版的JavaScript引擎實現;另外也希望能在服務器端把JavaScript當作Java應用里的腳本語言使用。于是Rhino就誕生了。

          具體查看《Java集成JavaScript項目工程:基于Rhino的javascript后臺開發》

          KJS

          Apple把KHTML拿去演化出了WebKit,其中的KJS演化成了JavaScriptCore。KJS影響力遠不如JavaScriptCore。KJS是為數不多的沒有JIT編譯器的。

          • 文檔: http://api.kde.org/4.x-api/kdelibs-apidocs/tier1/kjs/src/kjs/html/index.html
          • 兼容標準: ECMAScript 3
          • 代碼: https://projects.kde.org/projects/kde/kdelibs/repository/revisions/master/show/kjs

          JavaScriptCore

          JavaScriptCore源自KJS,但持續得到蘋果的大力投入,終而青出于藍勝于藍,已經完全超越了它的前身。

          QtScript背后也使用JavaScriptCore。

          雖然iOS的Safari和UIWebView控件里跑的都是JavaScriptCore,但只有Apple自己的程序才可以啟用JIT編譯,而第三方的則不行。所以Mobile Chrome for iOS就用不了JavaScriptCore的JIT。

          Chakra

          Chakra問世后的JScript已非當日吳下阿蒙。

          即便Chakra的解釋器也是字節碼解釋器,它的字節碼設計與老版本JScript的已經相當不同,解釋器自身的速度都已經有所提升。

          Chakra里的隱藏類變遷機制叫做“type evolution”。每個產品都必須發明些新名詞

          E9版Chakra里字段數量不超過16個的對象可以使用緊湊布局;IE10版Chakra將這限制放寬到30多個字段。

          IE9 Chakra的對象布局是對象頭與property數組分離的。IE10版則將構造器函數里賦值的屬性直接跟對象頭粘在一起分配。

          Chakra里的value representation跟V8的比較類似,都是在最低的幾位放tag;不過Chakra的是tagged-value,也就是在小整數的后面帶上一個0x1的tag,而對象地址是8字節對齊的于是對象指針的最低3位為0。打tag的取舍正好與V8的tagged-pointer相反,而與更多其它用tagged-value的VM相似,例如說更傳統的Smalltalk實現,包括現在還可以用到的Squeak,或者是像Ruby等受Smalltalk影響的VM。

          注意:IE9在x64上的版本里的Chakra只有解釋器,沒實現JIT編譯器;到IE10才開始在x64版上提供JIT編譯器。

          同樣只有字節碼解釋器,IE9 64-bit的Chakra仍然可以比IE8 64-bit的JScript 5.8快近10倍

          JScript

          JScript 5.8(IE8里的JScript)之后版本號重新計算了,下一個大版本就是IE9里的JScript 9.0,代號Chakra,在前面有介紹。

          JScript里對象里屬性的存儲基本上是靠Hashtable;數組性質的對象最初也是為稀疏數組優化,背后仍然是用Hashtable來存儲。到IE8/JScript 5.8才加上了對密集數組的存儲/訪問優化。

          • 官方博客: http://blogs.msdn.com/b/jscript/
          • 兼容標準: ECMAScript 3.0

          執行引擎是個簡單的解釋器,switch-threading形式的解釋器主循環,位于CScriptRuntime::Run(VAR*)。在jscript.dll里這個switch被編譯為一個table-based dispatch。

          被這兩處調用:

          ScrFncObj::CallWithFrameOnStack(VAR *,int,VAR *,VAR *,ulong)

          ScrFncObj::Call(VAR *,int,VAR *,VAR *,ulong)


          用于優化字符串拼接用的BuildString類。在Chakra里也繼承了下來。

          不常見的JavaScript引擎

          上面的JavaScript引擎都是常見

          IronJS

          IronJS原本完全使用F#實現,后來改為只用F#來實現parser,而用C#來實現runtime部分。這是個非常妙的搭配。F#(以及許多函數式語言)天生就非常適合用來寫需要大量模式匹配的程序,寫parser最適合不過。而runtime部分更多是與.NET的其它部分打交道,這里用C#就會更順手些。

          Ironjs是在Microsoft 動態語言運行時之上構建的ECMAScript 3.0實現,它使您可以將JavaScript運行時嵌入到.NET應用程序中。

          使用Ironjs環境

          • .NET 3.5(Src / CLR2.sln)
          • .NET 4.0(Src / CLR4.sln)
          • Mono 2.10(Src / mono-build.sh)

          Ironjs還具有對.NET 2.0和3.0的實驗性支持,可使用CLR2解決方案進行編譯并設置額外的NET2標志。

          IronJS的parser整體采用top-down operator precedence(TDOP)方式,在JavaScript的引擎實現中比較少見。不過卻正好與微軟自家的Managed JScript相似。不知道作者在寫IronJS時是否有受Managed JScript的思路影響呢?

          如果采用TDOP不是Managed JScript的影響,那或許是受Douglas Crockford大神那篇TDOP教程的影響了。

          最初的IronJS其實用的是基于ANTLR生成的parser。不過后來用F#新寫的parser比老的ANTLR生成的parser快得多。

          不過作者決定在下一版IronJS里改為完全使用C#,主要是出于性能方面的考慮。并不是F#本身不夠快,而是F#的各種方便簡潔的功能容易引人寫出不那么快的代碼,而要寫比較高效的代碼樣子會跟C#看起來很像。于是還不如直接用C#好了。

          IronJS使用了Nan-boxing,只不過比起那些用C/C++之類的native語言所實現的NaN-boxing tagged pointer而言,IronJS版的比較“肥”一些——例如說JavaScriptCore的一個tagged pointer在x86-64上就是64位,跟一個double一樣大,指針類型的值跟值類型的值可以重疊在同一個位置上;而在IronJS的則要128位,其中值類型的值與tag在頭64位,而指針類型在后64位。

          雖然肥一些,作為Nan-boxing的思路和效果還是類似的。用了tagged pointer之后至少那些值類型的值的內存開銷都變小了——不用tagged pointer的話自動裝箱的double在32位CLR上也至少得要16字節,外加引用它的指針4字節也得要20字節了,而IronJS的BoxedValue則總共只要16字節而且不會有額外指針帶來的間接層,在內存局部性上也比不用tagged pointer好。


          參考文章:

          關于 JavaScript https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/About_JavaScript

          各JavaScript引擎的簡介,及相關資料/博客收集帖 https://hllvm-group.iteye.com/group/topic/37596

          用 JavaScript 解釋 JavaScript 虛擬機-內聯緩存(inline caches) https://segmentfault.com/a/1190000010819044

          GC的三種收集方法:標記清除、標記整理、復制算法的原理與特點,分別用在什么地方,優化收集方法的思路 https://blog.csdn.net/fateruler/article/details/81158510




          轉載本站文章《JS引擎(0):JavaScript引擎群雄演義—起底JavaScript引擎》,
          請注明出處:https://www.zhoulujun.cn/html/webfront/browser/webkit/2020_0718_8521.html

          什么別人打開某一個網頁很快,而我卻很慢?為什么我訪問同一個網站,早上很快,晚上卻很慢?為什么我訪問A網站很快,但是訪問B網站卻很慢?你曾經是否有過相同的疑問?

          其實看似簡單的網頁瀏覽,背后其實是一個很復雜的過程。今天維度IT管家就來簡單的跟大家聊聊影響網頁打開速度的原因,希望對你有所幫助!


          我們先來看個很簡單的圖:


          上圖中:用戶在自己電腦上,打開一個網頁,這時候,瀏覽器會對網站所在的服務器發起請求,網站服務器會返回網頁的信息,網頁信息中可能會有:圖片、網頁文件、視頻媒體、文字等內容。


          在上圖中,有兩臺電腦:用戶電腦、網站所在的服務器;有兩條寬帶:用戶寬帶、網站所在服務器的寬帶。


          簡單了說完用戶電腦與服務器的關系,接下來就直接說原因吧!


          一、網絡帶寬


          這是最主要的因素,也就是網友經常說的寬帶不夠。同樣的網站,如果寬帶高,訪問速度就會明顯變快。


          網絡的帶寬包含網站地點服務器帶寬和用戶端帶寬兩個方面,對接點指的是出口端與進口端(如電信對網通的對接點)。網站地點帶寬及用戶端帶寬對用戶打開網頁的影響,我們可以通過下圖很直觀的看出來:



          有一種情況,兩者帶寬都很高,但是打開網頁也會很慢?這就涉及到另外一個因素,那就是:訪問人數。舉個簡單的例子:你一個人訪問某個網站,網站服務器的寬帶只為你一個人服務,那你打開網頁的速度自然也就很快;如果這個時間點,同時有1萬人在訪問這個網站,那么網站服務器的寬帶需要同時為1萬人服務,這樣單個人的速率自然就降下來了。所以就會出現即使你的帶寬很高,但是打開網頁依舊很慢的情況。玩游戲的人應該深有體會,當服務器人數爆滿時,自己玩的游戲就會變卡。


          二、DNS解析速度


          DNS解析是從域名到IP的解析。人們習慣記憶域名,但機器間互相只認IP地址,域名與IP地址之間是對應的,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析服務器來完成。


          DNS解析包括往復解析的次數及每次解析所花費的時間,它們兩者的積即是DNS解析所耗費的總時間。許多人無視了DNS解析的因素,其實它對網站解析速度也是十分重要的。


          三、服務器及用戶端硬件配置


          硬件配置決定了電腦對數據的處理速度,相同的網絡環境下,配置高的服務器的運算能力必定要強一些。同樣在用戶端,相同的網絡環境下,你用一臺高配置電腦和低配置的電腦打開相同的頁面,速度也一定不一樣。


          四、服務器軟件


          在服務器端,安裝軟件的數量以及運行是否穩定都會影響到服務器環境,進而影響到網絡速度。例如服務器配置軟件防火墻,就會導致網絡速度受影響。


          五、頁面內容


          如果網頁包含大量未經處理的圖片,而這些圖片很大,就會導致打開速度變慢。其他如Flash和影視文件,都會影響訪問速度。


          同時冗余代碼也是拖慢網站速度的因素之一。站長需要盡量優化代碼,用最少的代碼,實現最佳的效果。


          六、數據庫操作


          小網站做數據庫操作也會影響網站速度,尤其是同時有許多用戶提交評論時,就會發生操作數據庫鎖死,致使網站打不開。


          七、使用javascript特效


          網站上運用javascript特效是大忌,不只是無法被搜索引擎抓取,還會因為不斷向服務器提出請求,導致添加服務器負擔,網站變慢。


          具體的例子如鼠標特效、節目的特效、狀態欄的特效等等。這些特效的原理是先由服務器下載到用戶端的機器,然后在本地機器上運轉,最終被用戶看到。特效做的多了,用戶本地機器上就要運轉大半天才干悉數完成。


          八、過多引用其他網站內容


          例如引用其他網站的圖像、視頻文件等。如果鏈接到的網站速度慢,甚至那家網站已經不存在了,那么用戶打開網頁的速度就會十分慢。


          其他還有一些因素,例如我國的寬帶網絡存在互聯互通的問題,國內南北方服務器互訪會出現延時現象,直接影響用戶的網頁訪問體驗。訪問服務器在國外的網站,訪問速度也會明顯的下降。


          最后總結


          影響網頁打開速率的主要因素有:


          服務器:帶寬、硬件配置、硬件穩定性、網絡穩定性

          用戶端:帶寬、硬件配置

          網 頁:網頁程序的性能、網頁內容

          :同時訪問人數、服務器所在地


          再回到開頭的問題,你會發現,三個問題中,有好幾個因素:不同的用戶電腦、不同的訪問時間(網站訪問人數有高峰期)、不同的網站(網頁、服務器不同),就是因為有這么多不同,所以才造成打開網頁的速度差異!


          主站蜘蛛池模板: 精品一区二区久久| 成人精品一区二区户外勾搭野战| 一区二区在线播放视频| 无码一区二区三区| 国产自产对白一区| 久久人妻无码一区二区| 日韩视频在线观看一区二区| 四虎永久在线精品免费一区二区 | 一区二区不卡视频在线观看| 亚洲日韩国产一区二区三区| 亚洲性日韩精品一区二区三区| 日本丰满少妇一区二区三区| 三上悠亚国产精品一区| 日本强伦姧人妻一区二区| 久久福利一区二区| 亚洲制服丝袜一区二区三区| 在线精品一区二区三区| 亚洲一区二区三区写真| 精品日韩一区二区| 日本在线视频一区| 日韩人妻无码一区二区三区综合部| 亚洲AV无码一区二三区| 精品国产AⅤ一区二区三区4区| 亚洲片一区二区三区| 福利一区二区在线| 国产成人精品一区二区三区无码| 国产美女精品一区二区三区| 国产一区二区三区乱码| 亚洲欧洲精品一区二区三区| 国产亚洲情侣一区二区无| 乱中年女人伦av一区二区| 国产精品久久久久久一区二区三区 | 精品国产一区二区三区久久影院 | 性无码免费一区二区三区在线| 日日摸夜夜添一区| 国产伦精品一区二区三区在线观看 | 亚洲视频一区在线播放| 亚洲熟女综合一区二区三区| 免费视频精品一区二区| 亚洲国产一区二区a毛片| 香蕉久久ac一区二区三区|