亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        JavaScript計(jì)算性能對(duì)比研究

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

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

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

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

        DOIDOI:10.11907/rjdk.162059

        中圖分類(lèi)號(hào):TP302

        文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2016)011003303

        0 引言

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

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

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

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

        1.1 JavaScript

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

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

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

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

        1.2 C++

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

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

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

        1.3 JAVA

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

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

        1.4 MATLAB

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

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

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

        2 實(shí)驗(yàn)對(duì)比分析

        2.1 與主流編程語(yǔ)言對(duì)比

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

        JavaScript測(cè)試代碼如下:

        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程序的測(cè)試代碼如下:

        int a=clock();//從這開(kāi)始計(jì)時(shí)

        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;//算出來(lái)的單位是毫秒

        Java語(yǔ)言采用Eclipse環(huán)境編寫(xiě)代碼,測(cè)試數(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í)行耗時(shí) : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");}}

        MATLAB測(cè)試代碼如下:

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

        while i<100000000

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

        End toc

        經(jīng)過(guò)對(duì)比分析,可以表示計(jì)算能力的運(yùn)算時(shí)間和結(jié)果精度如表1所示。

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

        2.2 主流瀏覽器間的對(duì)比

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

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

        3 結(jié)語(yǔ)

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

        參考文獻(xiàn):

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

        [2] NICHOLAS C.ZAHAS.JavaScript高級(jí)程序設(shè)計(jì)[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++語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2010:44.

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

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

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

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

        猜你喜歡
        迭代瀏覽器
        反瀏覽器指紋追蹤
        電子制作(2019年10期)2019-06-17 11:45:14
        基于最小二乘的視野區(qū)域運(yùn)動(dòng)方向分析
        中間件“迭代”
        DNS解析的探究
        考試周刊(2016年64期)2016-09-22 18:18:03
        漲價(jià)與醫(yī)保政策需同步“迭代”
        環(huán)球?yàn)g覽器
        再見(jiàn),那些年我們嘲笑過(guò)的IE瀏覽器
        瀏覽器
        3d动漫精品一区二区三区| 久久久熟女一区二区三区| 无套无码孕妇啪啪| 亚洲av无码xxx麻豆艾秋| 日本一本久道| 中国xxx农村性视频| 毛片无遮挡高清免费久久| 青青青草视频手机在线| 音影先锋中文字幕在线| 久久精品国产亚洲av高清热| 99久久久久国产| 亚洲中文一本无码AV在线无码| 久久精品国产亚洲av热东京热| 国产精品无码一区二区三区在 | 国产成人综合久久精品推荐免费 | 激情五月开心五月啪啪| 久久久久亚洲av无码专区喷水| 久久久久亚洲av无码观看| 麻豆国产成人AV网| 国产网红一区二区三区| 人妻少妇av中文字幕乱码| 18禁黄污吃奶免费看网站| 亚洲不卡av不卡一区二区| 蜜桃一区二区免费视频观看| 国产一区二区三区亚洲avv| 亚洲精品成人网线在线播放va| 在线人妻无码一区二区| 日韩精品免费观看在线| 亚洲国产精品日本无码网站| 久久综合伊人77777麻豆| 日韩一区二区三区人妻免费观看| 亚洲va韩国va欧美va| 色欲麻豆国产福利精品| 中国老太老肥熟女视频| av色一区二区三区精品| 尤物视频在线观看| 亚洲一级电影在线观看| 男人天堂插插综合搜索| 中文字幕一区二区三区的| 精品国产一区二区三区av片| 亚洲精品aⅴ无码精品丝袜足|