整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端設(shè)計(jì)-JavaScript中的值、引用傳遞與垃圾

          前端設(shè)計(jì)-JavaScript中的值、引用傳遞與垃圾回收

          avaScript內(nèi)存管理

          在進(jìn)行JavaScript程序編寫過程中,需要使用變量進(jìn)行值的存儲,因此一般我們使用賦值語句完成。如:

          var a=100;
          var c=a;
          var arr=new Aarray(1,2,3,4,5);
          var d=arr;
          

          以上兩種賦值形式本質(zhì)上是有區(qū)別的,分別對應(yīng)值傳遞與引用傳遞兩種類型,JavaScript未能向C++等一樣使用&符號表示應(yīng)用傳遞。但是再語法定義時,規(guī)定了數(shù)字、字符串等基本數(shù)據(jù)類型使用值傳遞,而對數(shù)組,對象等采用引用傳遞。所謂引用傳遞簡單理解是直接傳遞值所在的存儲空間地址。以上變量c與arr賦值過程描述如下圖:

          值傳遞與引用傳遞示意圖

          值傳遞與引用傳遞示意圖如上圖所示,因此對于基本數(shù)據(jù)類型在進(jìn)行賦值與值傳遞時,相互不影響,如在var a=100; var c=a過程中,賦值完a c變量相互沒有關(guān)系。而對引用傳遞類型,變量名指向的都是同一個地址,因此地址中數(shù)據(jù)改變,兩個變量讀取的數(shù)據(jù)也會發(fā)生變化。以下我們通過代碼進(jìn)行說明:

          引用傳遞代碼示例

          如上所示,引用傳遞,由于變量名指向的是同一存儲空間,只要該空間值發(fā)生變化,用變量進(jìn)行讀取時也會發(fā)生變化。最后從內(nèi)存釋放角度對變量使用完,內(nèi)存大的釋放進(jìn)行簡單說明。JavaScript不允許直接操作內(nèi)存,從而實(shí)現(xiàn)內(nèi)存的手工管理。而是通過垃圾回收機(jī)制實(shí)現(xiàn)內(nèi)存的自動化管理。對于一般值類型變量,如字符串、數(shù)字等,用戶無需考慮內(nèi)存釋放的問題,但對于引用類型需要在程序運(yùn)行過程刪除變量,釋放內(nèi)存,我們可以直接使用變量直接等于null,刪除對存儲數(shù)據(jù)空間的引用后,JS會對沒有任何引用的內(nèi)存地址進(jìn)行自動釋放。但對于多個引用時則需要特別重視。如下圖:

          多變量引用情況

          在上面代碼中,數(shù)組存儲空間共有兩個引用,分別是變量名arr與變量名b,我們在程序中通過b=null取消其引用,但是數(shù)組內(nèi)存依然沒有被釋放,原因在于還有變量arr指向該空間地址,引用依然存在。因此我們還可以通過arr訪問地址,獲取數(shù)據(jù)。運(yùn)行結(jié)果證明如下:

          arr獲取數(shù)組元素

          要刪除數(shù)組,釋放其內(nèi)存,需要將所有引用刪除,在上圖例題中需要將arr引用也刪除。如下圖所示:

          刪除引用

          JS程序在運(yùn)行過程中,通過判斷內(nèi)存地址空間是否有引用,如果沒有任何引用,才會調(diào)用自動垃圾回收機(jī)制,釋放該內(nèi)存。因此對于New生成的對象在內(nèi)存釋放時需要注意以上問題。如果程序運(yùn)行過程不關(guān)注內(nèi)存占用情況,可以不處理,待關(guān)閉頁面時也會釋放全部內(nèi)存。


          本頭條號長期關(guān)注編程資訊分享;編程課程、素材、代碼分享及編程培訓(xùn)。如果您對以上方面有興趣或代碼錯誤、建議與意見,可以聯(lián)系作者,共同探討。期待大家關(guān)注!如需案例完整代碼請關(guān)注并私信,往期前端設(shè)計(jì)文章鏈接如下:

          1. 前端設(shè)計(jì)-JavaScript美女拼圖游戲開發(fā)實(shí)例
          2. 前端設(shè)計(jì)- JavaScript驗(yàn)證碼制作及實(shí)例分析
          3. 前端設(shè)計(jì)-Ajax技術(shù)及實(shí)例展示
          4. 前端設(shè)計(jì)-響應(yīng)式頁面開發(fā)基礎(chǔ)
          5. Web開發(fā)前端、后端與全棧的區(qū)別是什么?

          s實(shí)現(xiàn)文件切片上傳,斷點(diǎn)續(xù)傳,js實(shí)現(xiàn)文件切片上傳,js實(shí)現(xiàn)文件分塊上傳,js實(shí)現(xiàn)文件分片上傳,js實(shí)現(xiàn)文件加密上傳,js實(shí)現(xiàn)文件批量上傳,js實(shí)現(xiàn)文件夾上傳,js實(shí)現(xiàn)文件切片上傳解決方案,js實(shí)現(xiàn)文件切片上傳思路,js實(shí)現(xiàn)文件切片上傳源碼,

          js 大文件分割/分片上傳,js 大文件分割上傳,js 大文件分片上傳,js 大文件切片上傳,js 大文件分塊上傳,js 大文件批量上傳,js 大文件加密上傳,js 大文件斷點(diǎn)續(xù)傳,js 文件夾上傳,js 文件夾批量上傳,


          用戶上傳的文件比較大,有20G左右,直接用HTML傳的話容易失敗,服務(wù)器也容易出錯,需要分片,分塊,分割上傳。也就是將一個大的文件分成若干個小文件塊來上傳,另外就是需要實(shí)現(xiàn)秒傳功能和防重復(fù)功能,秒傳就是用戶如果上傳過這個文件,那么直接在數(shù)據(jù)庫中查找記錄就行了,不用再上傳一次,節(jié)省時間,實(shí)現(xiàn)的思路是對文件做MD5計(jì)算,將MD5值保存到數(shù)據(jù)庫,算法可以用MD5,或者CRC,或者SHA1,這個隨便哪個算法都行。

          分片還需要支持?jǐn)帱c(diǎn)續(xù)傳,現(xiàn)在HTML5雖然提供了信息記錄功能,但是只支持到了會話級,也就是用戶不能關(guān)閉瀏覽器,也不能清空緩存。但是有的政府單位上傳大文件,傳了一半下班了,明天繼續(xù)傳,電腦一關(guān)結(jié)果進(jìn)度信息就丟失了,這個是他們的一個痛點(diǎn)。

          切片的話還有一點(diǎn)就是在服務(wù)器上合并,一個文件的所有分片數(shù)據(jù)上傳完后需要在服務(wù)器端進(jìn)行合并操作。

          聊下HTML5吧,怎么說呢,HTML5也就是chrome提供的一個API來實(shí)現(xiàn)文件分片,反正基本的需求,小文件用是能用,但是用起來多多少少還是有點(diǎn)別扭,擴(kuò)展性,安全性,穩(wěn)定性用戶那陣都不太滿意,關(guān)鍵是什么,我們是沒辦法對HTML5進(jìn)行擴(kuò)展,個性化和定制化開發(fā)的,基本上被谷歌給限制死了,這也是現(xiàn)在國產(chǎn)化的意義,希望能夠打破這個限制。不然公司的一些產(chǎn)品和業(yè)務(wù)不太好開展,總不能用戶提個需求,我們就說谷歌Chrome沒提供API,所我們就無法開發(fā)吧。這不是跟客戶扯呢。

          功能的話支持20G文件上傳和續(xù)傳,支持秒傳,支持文件夾上傳,支持在服務(wù)端保存文件夾層級結(jié)構(gòu),支持將文件夾層級結(jié)構(gòu)信息保存到數(shù)據(jù)庫中,支持下載時能夠?qū)⑽募A層級結(jié)構(gòu)下載下來,支持下載文件夾,下載文件夾支持?jǐn)帱c(diǎn)續(xù)傳,支持VUE2,VUE3,React,支持IE,Chrome和信創(chuàng)國產(chǎn)化環(huán)境,比如銀河麒麟,統(tǒng)信UOS,龍芯,支持加密傳輸,包括加密上傳,加密下載,加密算法支持國密SM4,支持云對象存儲,比如華為云,阿里云,騰訊云,七牛云,AWS,MinIO,FastDFS,需要提供手機(jī),QQ,微信,郵箱等聯(lián)系方式,提供7*24小時技術(shù)支持,提供長期技術(shù)支持和維護(hù)服務(wù),提供遠(yuǎn)程1對1技術(shù)指導(dǎo),提供二次開發(fā)指導(dǎo),提供文檔教程,提供視頻教程。

          該項(xiàng)目核心就是文件分塊上傳。前后端要高度配合,需要雙方約定好一些數(shù)據(jù),才能完成大文件分塊,我們在項(xiàng)目中要重點(diǎn)解決的以下問題。

          * 如何分片;

          * 如何合成一個文件;

          * 中斷了從哪個分片開始。

          如何分,利用強(qiáng)大的js庫,來減輕我們的工作,市場上已經(jīng)能有關(guān)于大文件分塊的輪子,雖然程序員的天性曾迫使我重新造輪子。但是因?yàn)闀r間的關(guān)系還有工作的關(guān)系,我只能罷休了。最后我選擇了百度的WebUploader來實(shí)現(xiàn)前端所需。

          如何合,在合之前,我們還得先解決一個問題,我們?nèi)绾螀^(qū)分分塊所屬那個文件的。剛開始的時候,我是采用了前端生成了唯一uuid來做文件的標(biāo)志,在每個分片請求上帶上。不過后來在做秒傳的時候我放棄了,采用了Md5來維護(hù)分塊和文件關(guān)系。

          在服務(wù)端合并文件,和記錄分塊的問題,在這方面其實(shí)行業(yè)已經(jīng)給了很好的解決方案了。參考迅雷,你會發(fā)現(xiàn),每次下載中的時候,都會有兩個文件,一個文件主體,另外一個就是文件臨時文件,臨時文件存儲著每個分塊對應(yīng)字節(jié)位的狀態(tài)。

          這些都是需要前后端密切聯(lián)系才能做好,前端需要根據(jù)固定大小對文件進(jìn)行分片,并且請求中要帶上分片序號和大小。前端發(fā)送請求順利到達(dá)后臺后,服務(wù)器只需要按照請求數(shù)據(jù)中給的分片序號和每片分塊大小(分片大小是固定且一樣的)算出開始位置,與讀取到的文件片段數(shù)據(jù),寫入文件即可。

          為了便于開發(fā),我 將服務(wù)端的業(yè)務(wù)邏輯進(jìn)行了如下劃分,分成初始化,塊處理,文件上傳完畢等。


          最新版本:6.5.40

          在線代碼:https://gitee.com/xproer/up6-asp-net/tree/6.5.40/

          安裝.NET Framework 4.7.2

          https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472


          框架選擇4.7.2




          添加3rd引用



          編譯項(xiàng)目


          NOSQL



          NOSQL無需任何配置可直接訪問頁面進(jìn)行測試

          SQL

          使用IIS

          大文件上傳測試推薦使用IIS以獲取更高性能。

          使用IIS Express

          小文件上傳測試可以使用IIS Express

          創(chuàng)建數(shù)據(jù)庫

          配置數(shù)據(jù)庫連接信息


          檢查數(shù)據(jù)庫配置



          訪問頁面進(jìn)行測試


          相關(guān)參考:

          文件保存位置,


          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報(bào)價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl


          OEM版報(bào)價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

          產(chǎn)品源代碼:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
          授權(quán)生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1


          主站蜘蛛池模板: 亚洲一区精彩视频| 亚洲一区二区三区在线播放| 国产免费一区二区视频| 精品一区二区三区高清免费观看 | 国产乱码伦精品一区二区三区麻豆| 国产无线乱码一区二三区| 亚洲一区二区精品视频| 国产精品高清一区二区三区| 国产伦精品一区二区三区| 激情内射亚州一区二区三区爱妻| 视频一区在线播放| 99精品国产高清一区二区| 日韩一区二区三区射精| 亚洲AV成人精品日韩一区18p| 日本亚洲成高清一区二区三区| 无码丰满熟妇一区二区| 精品国产免费一区二区三区香蕉 | 无码精品一区二区三区| 亚洲国产成人久久一区WWW | 亚洲一区二区免费视频| 久久精品一区二区免费看| 中文字幕一区日韩在线视频 | 亚洲一区二区三区深夜天堂| 天堂一区二区三区精品| 久久一区二区三区免费播放| 国产麻豆媒一区一区二区三区 | 91一区二区三区| 亚洲一区二区三区高清不卡 | 亚洲一区二区三区国产精品无码| 日本一区二区高清不卡| 日本精品一区二区三本中文| 久久精品无码一区二区无码| 国产一区二区三区高清视频 | 国产伦精品一区三区视频| 久久国产精品亚洲一区二区| 日韩熟女精品一区二区三区| 精品无码国产AV一区二区三区 | 中文字幕在线一区二区在线| 国产午夜精品一区二区三区小说| 精品国产日韩一区三区| 亚洲综合激情五月色一区|