• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      JavaScript計算性能對比研究

      2016-12-22 21:36龐聰杜瑞林王磊賀克鋒龍坤
      軟件導(dǎo)刊 2016年11期
      關(guān)鍵詞:迭代瀏覽器

      龐聰杜瑞林王磊賀克鋒龍坤++羅棋

      摘 要:JavaScript的計算功能一直被編程人員所忽視,其強大的庫和插件可以發(fā)揮重要作用。在同一計算機中,對比了JavaScript和主流編程語言Java、C++、MATLAB等語言的計算能力、數(shù)據(jù)精度以及處理時間,探討JavaScript在不同主流瀏覽器上的計算性能狀況。研究發(fā)現(xiàn):在較大迭代次數(shù)條件下,JavaScript與C++、Java的數(shù)據(jù)處理時間相當(dāng)、數(shù)據(jù)精度更好;比MATLAB處理速度、數(shù)據(jù)精度更優(yōu);JavaScript在主流瀏覽器(Firefox、Chrome、360等)的計算精度與計算速度無明顯區(qū)別,可在實驗測試中替換使用。

      關(guān)鍵詞關(guān)鍵詞:JavaScript;處理時間;迭代;性能對比;數(shù)據(jù)精度;瀏覽器

      DOIDOI:10.11907/rjdk.162059

      中圖分類號:TP302

      文獻標(biāo)識碼:A 文章編號文章編號:16727800(2016)011003303

      0 引言

      JavaScript作為當(dāng)下最流行的腳本語言之一,廣泛應(yīng)用于PC及手機端瀏覽器開發(fā)。作為一種開源的、不斷升級的新的編程語言,其中包括其計算性能日益優(yōu)化。JavaScript的作用在1995年誕生時只是處理一些服務(wù)器驗證操作,這是因為當(dāng)時的服務(wù)器語言Perl等必須在服務(wù)器端才能對用戶提交的表單進行驗證,JavaScript很好地解決了這個問題,并在客戶端處理[1]。目前,JavaScript的功能強大,不僅能處理數(shù)據(jù)驗證、事件響應(yīng),還支持用戶交互、復(fù)雜計算以及l(fā)amda匿名等。

      JavaScript的計算功能雖然強大,但以往主要是在服務(wù)器端使用,可以像C語言一樣處理大量數(shù)據(jù),但在客戶端本地的測試對比研究較少。一方面是因為JavaScript的“主戰(zhàn)場”在服務(wù)器端;另一方面在于它的競爭對手C++、Java、MATLAB等先入為主,人們幾乎忽略了JavaScript的強大計算性能[2]。

      本文在研究JavaScript計算能力的基礎(chǔ)上,與幾款主流編程語言、瀏覽器進行對比,找出JavaScript計算方面的不足與優(yōu)勢。

      1 主流程序設(shè)計語言計算性能理論分析

      1.1 JavaScript

      JavaScript中的復(fù)雜計算主要在function函數(shù)表達式內(nèi)進行,它和眾多程序語言一樣,也支持遞歸、棧、閉包、對象等算法核心內(nèi)容,計算都在標(biāo)簽內(nèi)的function()執(zhí)行。

      具體程序執(zhí)行步驟為:客戶端瀏覽器打開網(wǎng)頁文件,

      從上而下逐行讀取并顯示其中的HTML/腳本代碼,根據(jù)解析的HTML標(biāo)簽完成相應(yīng)的動作;當(dāng)遇到標(biāo)簽時,自動導(dǎo)入相關(guān)js庫,然后逐行處理function函數(shù)[3];每一段完整代碼都經(jīng)過詞法分析、語法分析,然后生成語法樹。在此過程中,如果有語法錯誤,就無法生成語義樹,并立即報錯,停止解釋。

      JavaScript的數(shù)據(jù)類型分為6種:Undefined、Null、Boolean、Number、String、Object,其中可以參加計算的只有數(shù)值類型(Number)。由于ECMAScript不具有嚴格類型,對于一些變量需要進行類型判斷。比如檢測變量t是否為數(shù)值類,可以用alert(typeof(t))表示,結(jié)果返回number即為數(shù)值。在JavaScript中,整數(shù)、浮點數(shù)值使用IEEE754格式來表示[4]。它能保存的數(shù)值范圍為5e-324至1.7976931348623157e+308,如果具體數(shù)值超出上述范圍,將會返回?zé)o窮大(Infinity)。

      1.2 C++

      C語言屬于結(jié)構(gòu)化的中級程序設(shè)計語言,它巧妙地把高級語言的數(shù)據(jù)結(jié)構(gòu)和函數(shù)語句與匯編語言的直接、實用結(jié)合起來。而且它的應(yīng)用范圍十分廣泛,不僅包括簡單游戲、二三維圖形以及強大的計算能力,還可以應(yīng)用到嵌入式系統(tǒng)和單片機開發(fā)當(dāng)中。

      在C語言當(dāng)中,數(shù)值精度由數(shù)據(jù)類型控制。由于位數(shù)限制,float有效數(shù)字的精度只有6~7位10進制,double類型得精度為14位。雖然 printf(“%30.20f”,0.3)的計算機輸出為0.30000001192092896000,但后面的小數(shù)1192092896000沒有實際意義,它是按照格式要求由轉(zhuǎn)換運算產(chǎn)生的,并不是錯誤[5]。

      C語言幾乎由匯編語言編寫,理論上匯編語言速度最快,但是由于某些編譯器存在代碼優(yōu)化功能,在實際編寫中,速度并不一定優(yōu)于C語言。

      1.3 JAVA

      Java中數(shù)值類分為整型和浮點型,具體包括double、float、int、long、byte、short六種類型。每一類型取值范圍都不一樣(見表1)。如果直接使用浮點數(shù)計算,System.out.println(0.01+0.05)的結(jié)果為:0.060000000000 000005,數(shù)據(jù)精度為實際數(shù)據(jù)位數(shù)后16位。

      Java的基本數(shù)據(jù)類型并不能完整反映小數(shù)。如果需要精確計算,必須采用BigDecimal[6]。

      1.4 MATLAB

      MATLAB包含的數(shù)據(jù)類型很多,例如元胞、結(jié)構(gòu)、邏輯、字符串、數(shù)值、類等,數(shù)值類的計算結(jié)果被保存在ans變量中[7]。在實際計算中,如果沒有指定類型,將默認為雙精度型(double),其它數(shù)值類型還有單精度型、無符號整數(shù)、有符號整數(shù)等,此外MATLAB還支持復(fù)數(shù),用i或j表示。

      如果在MATLAB中計算1除以3的結(jié)果,即a=1/3,并設(shè)置計算精度為8位小數(shù),則會顯示為0.33333333;而計算a=a*3的結(jié)果是1。

      這證明了MATLAB在數(shù)據(jù)實際運算中不論輸出格式怎樣都會保持變量精度。[8]如果想對數(shù)據(jù)精度進行設(shè)置,可以使用digit(n)和vpa(S,n)來實現(xiàn),其中n就是要保留的有效位數(shù),S表示數(shù)值變量。

      2 實驗對比分析

      2.1 與主流編程語言對比

      利用常用的編程軟件對比測試計算精度和運行時間。測試核心代碼為一個編程程序中非?;A(chǔ)和常用的for循環(huán);測試函數(shù)為一個二次函數(shù)。為提高數(shù)據(jù)量的可參考性,進行迭代108次。

      JavaScript測試代碼如下:

      var x=4.237,y=0;

      for (var i=0;i<100000000;i++){

      y=y+x*x;}

      ........

      function test(func){

      var start=new Date().getTime();

      func();var end=new Date().getTime();

      return (end-start)+”ms”; }

      var time=test(foo);

      C程序的測試代碼如下:

      int a=clock();//從這開始計時

      int x = 4.237; int y = 0;

      for (var i=0; i<100000000; i++)

      {y = y + x*x;}

      return y;}

      int b=clock();//到這結(jié)束

      int c=b-a;//算出來的單位是毫秒

      Java語言采用Eclipse環(huán)境編寫代碼,測試數(shù)據(jù)如下:

      public class forA {

      public static void main(String args[]){

      long a=System.currentTimeMillis();

      double x=4.237;

      long y=0;

      for(int i=0;i<100000000;i++){y=(long) (y+x*x);}

      System.out.print(y);System.out.println("r

      執(zhí)行耗時 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");}}

      MATLAB測試代碼如下:

      Tic x = 4.237;y = 0;i=0;

      while i<100000000

      i=i+1;y = y + x*x;

      End toc

      經(jīng)過對比分析,可以表示計算能力的運算時間和結(jié)果精度如表1所示。

      在同一計算機上對比計算結(jié)果和運行時間,可以看出:JavaScript的計算速度最快,并且計算精度最高;C++與Java的運行時間相差不大,但Java的計算結(jié)果精度很低;MATLAB運行最慢,計算精度比Java高。

      2.2 主流瀏覽器間的對比

      由于不同瀏覽器采用的內(nèi)核不同,直接導(dǎo)致數(shù)據(jù)運算結(jié)果有一定差異,比如Firefox采用gecko核心,IE瀏覽器系trident核心,Google的瀏覽器Chrome采用的是webkit等。測試平臺均為以JavaScript為計算腳本的當(dāng)下最流行的幾款瀏覽器客戶端軟件,版本號為最新,其中Dreamweaver為Web前端開發(fā)常用的客戶端軟件,結(jié)果如表2所示。

      在同一計算機上對比計算結(jié)果和運行時間,可以看出:所有以JavaScript為腳本語言的平臺計算精度一致,但是計算時間有差異,Dreamweaver的計算速度最慢,比其它平臺慢得多;Firefox、360、Opera、Chrome的運行時間都在100~110ms左右,相較而言,IE的運行時間較慢,在190~200ms之間。

      3 結(jié)語

      JavaScript作為出色的Web前端腳本語言,并非作為編程語言而開發(fā),僅僅是解釋執(zhí)行語言。但在一定的精度和復(fù)雜度計算范圍內(nèi),它仍然可以和C++、Java等主流編程語言相媲美。JavaScript作為一個初等編程語言,仍然有很大的發(fā)展空間,其計算能力未來可以借由類庫或插件予以提升。后續(xù)研究將從以下幾方面展開:①編譯環(huán)境對結(jié)果的影響。對于同一語言,不同的編譯環(huán)境存在著不同的核心算法和代碼優(yōu)化功能,這都會影響具體代碼的執(zhí)行情況。例如JavaScript的解釋執(zhí)行環(huán)境包括各類瀏覽器和editplus、Dreamweaver等軟件,其中Dreamweaver在同一計算機上就比處理其它數(shù)據(jù)速度慢得多;②CPU、內(nèi)存配置等的影響。較大的內(nèi)存空間很明顯可以實現(xiàn)對較大數(shù)據(jù)量代碼的支持,有效避免卡頓現(xiàn)象;③特殊函數(shù)、外部插件對數(shù)據(jù)精度的影響。此外,文中已經(jīng)說明Java自身默認處理數(shù)據(jù)精度并不理想,需要利用BigDecimal提高數(shù)據(jù)精度。JavaScript在調(diào)用外部library方法時也比使用內(nèi)部函數(shù)方法的運行速度慢,需進一步研究。

      參考文獻:

      [1] DAVID A PATTERSON,JOHN L.HENNESSY.計算機組成與設(shè)計:硬件/軟件接口[M].北京:機械工業(yè)出版社,2011:135.

      [2] NICHOLAS C.ZAHAS.JavaScript高級程序設(shè)計[M].北京:人民郵電出版社,2012:689696.

      [3] LOIANE GRONER.學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法[M].北京:人民郵電出版社,2015:1932.

      [4] ADAM FREEMAN.HTML5權(quán)威指南[M].北京:人民郵電出版社,2014:86.

      [5] 鄭莉,董淵,何江舟.C++語言程序設(shè)計[M].北京:清華大學(xué)出版社,2010:44.

      [6] 郎波.Java語言程序設(shè)計[M].北京:清華大學(xué)出版社,2005:60.

      [7] 司守奎,孫璽菁.數(shù)學(xué)建模算法與應(yīng)用[M].北京:國防工業(yè)出版社.2015:9092.

      [8] 卓金武.MATLAB在數(shù)學(xué)建模中的應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2014:811.

      (責(zé)任編輯:陳福時)

      猜你喜歡
      迭代瀏覽器
      反瀏覽器指紋追蹤
      中間件“迭代”
      DNS解析的探究
      漲價與醫(yī)保政策需同步“迭代”
      環(huán)球瀏覽器
      什邡市| 和静县| 疏附县| 湛江市| 天门市| 南开区| 武鸣县| 花莲市| 武宁县| 临澧县| 和政县| 杭州市| 武穴市| 万源市| 彭水| 神池县| 宁波市| 曲阜市| 英德市| 视频| 呼玛县| 屯留县| 香河县| 隆林| 如东县| 曲沃县| 滦平县| 碌曲县| 新干县| 阿勒泰市| 伊宁市| 扶余县| 若羌县| 金寨县| 凤台县| 中卫市| 游戏| 福泉市| 蚌埠市| 固原市| 临邑县|