js分離存儲
『壹』 高人看下JS給我裝系統時的硬碟分區對不對是不是丟了一部分存儲啊我想重新劃分怎麼劃分啊
500G硬碟的話
C: 50G
D:150G
E:150G
F:100G
G:剩餘
C裝系統 D放應用程序、游戲之類
E放圖片 音樂和視頻 F做軟體的安裝程序備份和其他備份
G一般保留就行。G這個空間,要麼可以在裝系統時設置為系統保留空間,要麼就乾脆留著放個GHOST的鏡像。 畢竟500G這么大很難用光的,理論上講分五個區剛好。
至於怎麼分,你可以在裝vista或win7的時候直接去分,很簡單。裝xp前可以用PQ來分,裡面都是漢字,也很好認。
『貳』 .js是什麼文件格式
.js文件是javaScript語言文件的擴展名。
JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。JavaScript已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。它是世界上最流行的腳本語言,在電腦、手機、平板上瀏覽的網頁,以及基於HTML5的手機App,交互邏輯都是由JavaScript驅動的。
(2)js分離存儲擴展閱讀:
javascript腳本語言的主要特點:
1、解釋性:javascript是一種解釋語言,源代碼不需要經過編譯,直接在瀏覽器上運行時被解釋。
2、基於對象:javascript是一種基於對象的語言,能運用自己已經創建了的對象,許多功能可以來自於腳本環境中對象的方法與腳本的相互作用。
3、事件驅動:JavaScript可以直接對用戶或客戶輸入做出響應,無需經過web服務程序。他對用戶的響應,是以事件驅動的方式進行的,所謂事件驅動,指的是在主頁執行了某種操作所產生的動作,此動作稱為「事件」。
4、跨平台:JavaScript依賴於瀏覽器本身,與操作環境無關。只要能運行瀏覽器的計算機,並支持JavaScript的瀏覽器就可以正確執行。
5、安全性:JavaScript是一種安全性語言。它不允許訪問本地的磁碟,並不能將數據存入伺服器上;不允許對網路文本進行修改和刪除,只能通過瀏覽器實現信息瀏覽或動態交互。可有效的防止數據丟失。
『叄』 JS,不使用資料庫,如何存儲多個字元串,求思路
想臨時存儲的話,就存在數組里邊都行。
也可以看看json的。你網路一下。
那就用cookie吧。
如果你只要求用JS腳本寫東西,且不使用資料庫,其他怎麼寫都行的話……
呵呵,那你可以用js腳本把東西存進一個excel文件的。除了這兩點,我想不到其他的了。
本來就是鍵值對的存儲方式,可以直接想讀出哪一個就讀出哪一個的,你在想什麼?
『肆』 javascript垃圾回收方法
一、垃圾回收的必要性
下面這段話引自《JavaScript權威指南(第四版)》
由於字元串、對象和數組沒有固定大小,所有當他們的大小已知時,才能對他們進行動態的存儲分配。JavaScript程序每次創建字元串、數組或對象時,解釋器都必須分配內存來存儲那個實體。只要像這樣動態地分配了內存,最終都要釋放這些內存以便他們能夠被再用,否則,JavaScript的解釋器將會消耗完系統中所有可用的內存,造成系統崩潰。
這段話解釋了為什麼需要系統需要垃圾回收,JS不像C/C++,他有自己的一套垃圾回收機制(Garbage Collection)。JavaScript的解釋器可以檢測到何時程序不再使用一個對象了,當他確定了一個對象是無用的時候,他就知道不再需要這個對象,可以把它所佔用的內存釋放掉了。例如:
var a = "before";
var b = "override a";
var a = b; //重寫a
這段代碼運行之後,「before」這個字元串失去了引用(之前是被a引用),系統檢測到這個事實之後,就會釋放該字元串的存儲空間以便這些空間可以被再利用。
二、垃圾回收原理淺析
現在各大瀏覽器通常用採用的垃圾回收有兩種方法:標記清除、引用計數。
1、標記清除
這是javascript中最常用的垃圾回收方式。當變數進入執行環境是,就標記這個變數為「進入環境」。從邏輯上講,永遠不能釋放進入環境的變數所佔用的內存,因為只要執行流進入相應的環境,就可能會用到他們。當變數離開環境時,則將其標記為「離開環境」。
垃圾收集器在運行的時候會給存儲在內存中的所有變數都加上標記。然後,它會去掉環境中的變數以及被環境中的變數引用的標記。而在此之後再被加上標記的變數將被視為准備刪除的變數,原因是環境中的變數已經無法訪問到這些變數了。最後。垃圾收集器完成內存清除工作,銷毀那些帶標記的值,並回收他們所佔用的內存空間。
關於這一塊,建議讀讀Tom大叔的幾篇文章,關於作用域鏈的一些知識詳解,讀完差不多就知道了,哪些變數會被做標記。
2、引用計數
另一種不太常見的垃圾回收策略是引用計數。引用計數的含義是跟蹤記錄每個值被引用的次數。當聲明了一個變數並將一個引用類型賦值給該變數時,則這個值的引用次數就是1。相反,如果包含對這個值引用的變數又取得了另外一個值,則這個值的引用次數就減1。當這個引用次數變成0時,則說明沒有辦法再訪問這個值了,因而就可以將其所佔的內存空間給收回來。這樣,垃圾收集器下次再運行時,它就會釋放那些引用次數為0的值所佔的內存。
但是用這種方法存在著一個問題,下面來看看代碼:
function problem() {
var objA = new Object();
var objB = new Object();
objA.someOtherObject = objB;
objB.anotherObject = objA;
}
在這個例子中,objA和objB通過各自的屬性相互引用;也就是說這兩個對象的引用次數都是2。在採用引用計數的策略中,由於函數執行之後,這兩個對象都離開了作用域,函數執行完成之後,objA和objB還將會繼續存在,因為他們的引用次數永遠不會是0。這樣的相互引用如果說很大量的存在就會導致大量的內存泄露。
我們知道,IE中有一部分對象並不是原生JavaScript對象。例如,其BOM和DOM中的對象就是使用C++以COM(Component Object
Model,組件對象)對象的形式實現的,而COM對象的垃圾回收器就是採用的引用計數的策略。因此,即使IE的Javascript引擎使用標記清除的策略來實現的,但JavaScript訪問的COM對象依然是基於引用計數的策略的。說白了,只要IE中涉及COM對象,就會存在循環引用的問題。看看下面的這個簡單的例子:
var element = document.getElementById("some_element");
var myObj =new Object();
myObj.element = element;
element.someObject = myObj;
上面這個例子中,在一個DOM元素(element)與一個原生JavaScript對象(myObj)之間建立了循環引用。其中,變數myObj有一個名為element的屬性指向element;而變數element有一個名為someObject的屬性回指到myObj。由於循環引用,即使將例子中的DOM從頁面中移除,內存也永遠不會回收。
不過上面的問題也不是不能解決,我們可以手動切斷他們的循環引用。
myObj.element = null;
element.someObject =null;
這樣寫代碼的話就可以解決循環引用的問題了,也就防止了內存泄露的問題。
三、減少JavaScript中的垃圾回收
首先,最明顯的,new關鍵字就意味著一次內存分配,例如 new Foo()。最好的處理方法是:在初始化的時候新建對象,然後在後續過程中盡量多的重用這些創建好的對象。
另外還有以下三種內存分配表達式(可能不像new關鍵字那麼明顯了):
{} (創建一個新對象)
[] (創建一個新數組)
function() {…} (創建一個新的方法,注意:新建方法也會導致垃圾收集!!)
1、對象object優化
為了最大限度的實現對象的重用,應該像避使用new語句一樣避免使用{}來新建對象。
{「foo」:」bar」}這種方式新建的帶屬性的對象,常常作為方法的返回值來使用,可是這將會導致過多的內存創建,因此最好的解決辦法是:每一次函數調用完成之後,將需要返回的數據放入一個全局的對象中,並返回此全局對象。如果使用這種方式,就意味著每一次方法調用都會導致全局對象內容的修改,這有可能會導致錯誤的發生。因此,一定要對此全局對象的使用進行詳細的注釋和說明。
有一種方式能夠保證對象(確保對象prototype上沒有屬性)的重復利用,那就是遍歷此對象的所有屬性,並逐個刪除,最終將對象清理為一個空對象。
cr.wipe(obj)方法就是為此功能而生,代碼如下:
// 刪除obj對象的所有屬性,高效的將obj轉化為一個嶄新的對象!
cr.wipe = function (obj) {
for (var p in obj) {
if (obj.hasOwnProperty(p))
delete obj[p];
}
};
有些時候,你可以使用cr.wipe(obj)方法清理對象,再為obj添加新的屬性,就可以達到重復利用對象的目的。雖然通過清空一個對象來獲取「新對象」的做法,比簡單的通過{}來創建對象要耗時一些,但是在實時性要求很高的代碼中,這一點短暫的時間消耗,將會有效的減少垃圾堆積,並且最終避免垃圾回收暫停,這是非常值得的!
2、數組array優化
將[]賦值給一個數組對象,是清空數組的捷徑(例如: arr = [];),但是需要注意的是,這種方式又創建了一個新的空對象,並且將原來的數組對象變成了一小片內存垃圾!實際上,將數組長度賦值為0(arr.length = 0)也能達到清空數組的目的,並且同時能實現數組重用,減少內存垃圾的產生。
3、方法function優化
方法一般都是在初始化的時候創建,並且此後很少在運行時進行動態內存分配,這就使得導致內存垃圾產生的方法,找起來就不是那麼容易了。但是從另一角度來說,這更便於我們尋找了,因為只要是動態創建方法的地方,就有可能產生內存垃圾。例如:將方法作為返回值,就是一個動態創建方法的實例。
在游戲的主循環中,setTimeout或requestAnimationFrame來調用一個成員方法是很常見的,例如:
setTimeout(
(function(self) {
return function () {
self.tick();
};
})(this), 16)
每過16毫秒調用一次this.tick(),嗯,乍一看似乎沒什麼問題,但是仔細一琢磨,每一次調用都返回了一個新的方法對象,這就導致了大量的方法對象垃圾!
為了解決這個問題,可以將作為返回值的方法保存起來,例如:
// at startup
this.tickFunc = (
function(self) {
return function() {
self.tick();
};
}
)(this);
// in the tick() function
setTimeout(this.tickFunc, 16);
相比於每次都新建一個方法對象,這種方式在每一幀當中重用了相同的方法對象。這種方式的優勢是顯而易見的,而這種思想也可以應用在任何以方法為返回值或者在運行時創建方法的情況當中。
4、高級技術
從根本上來說,javascript本身就是圍繞著垃圾收集來設計的。隨著我們工作的進行,避免內存垃圾變得越來越困難。因為很多方便實用的Javascript庫方法也會產生一些新的對象。對於這些庫方法產生的垃圾,我們束手無策,只能重新翻看文檔,並且檢查方法的返回值。例如,數組的slice方法返回一個新的數組(在不修改原數組的基礎上,截取出一部分作為新數組),字元串的substr方法返回一個新的字元串(在不修改原字元串的基礎上,截取出一部分字元串作為返回值)等等。
調用這些庫方法,將會創建內存垃圾,而你能做的,只有避免調用這些方法,或者用不創建系統垃圾的方式重寫這些方法(有點極端啦~)。
例如,在Construct 2引擎中,從數組中利用下標來刪除一個元素,是經常進行的操作。最初我們是用下面這種方式來實現的:
var sliced = arr.slice(index + 1);
arr.length = index;
arr.push.apply(arr, sliced);
然而,slice方法會返回一個新的數組對象(數組中的元素是原數組中刪掉的部分),並且會通過arr.push.apply方法將元素重新復制回原數組,但是在此操作之後,該數組就成為了一片內存垃圾。由於這是我們引擎中的垃圾產生的熱點代碼(使用頻率非常很高),因此我們利用了迭代的方式重寫了上述代碼:
for (var i = index, len = arr.length – 1; i < len; i++)
arr[i] = arr[i + 1];
arr.length = len;
顯然,重寫大量的庫函數是非常痛苦的,因此你必須仔細權衡方法的易用性和內存垃圾產生情況。如果產生大量內存垃圾的方法在動畫的每一幀中被多次調用,你可能就會興高采烈的重寫庫函數啦。
在遞歸函數中,通過{}構造空對象,並在遞歸過程中傳遞數據,雖然是很方便的。但是更好的方式是:利用一個單獨的數組對象作為堆棧,在遞歸過程中對數組進行push和pop操作。更進一步,不要調用array的pop方法(pop將會使得array的最後一個元素將會變成內存垃圾),而應該使用一個索引來記錄數組的最後一個元素的位置,在pop時簡單的將索引減一即可;類似的,將索引加1來代替array的push操作,只有當索引對應的元素不存在時,才執行真正的push為數組加入一個新元素。
另外,在任何時候,都應該避免使用向量對象(例如:包含x和y屬性的vector2對象)。有些方法將向量對象作為方法返回值,既可以支持返回值的再次修改,又能夠將需要的屬性一次性返回,使用起來非常方便。但是有時候在一幀動畫中,創建了成百上千個這樣的向量對象,從而導致嚴重的垃圾回收性能問題,也是非常常見的。因此最好將這些方法分離成具有獨立職責的功能個體,例如:利用getX()和getY()方法(返回具體數據)代替getPosition()方法(返回一個vector2對象)。
四、總結
在Javascript中,徹底避免垃圾回收是非常困難的。垃圾回收機制與實時軟體(例如:游戲)的實時性要求,從根本上就是對立的。
但是,為了減少內存垃圾,我們還是可以對javascript代碼進行徹底檢查,有些代碼中存在明顯的產生過多內存垃圾的問題代碼,這些正是我們需要檢查並且完善的。
我認為,只要我們投入更多的精力和關注,實現實時的、低垃圾收集的javascript應用還是很有可能的。畢竟,對於可交互性要求較高的游戲或應用來說,實時性和低垃圾收集,兩者都是至關重要。
『伍』 js本地存儲怎麼實現
userData
語法:
XML<Prefix: CustomTag ID=sID STYLE="behavior:url('#default#userData')" />
HTML<ELEMENT STYLE="behavior:url('#default#userData')" ID=sID>
Scriptingobject .style.behavior = "url('#default#userData')"
object .addBehavior ("#default#userData")
屬性:
expires 設置或者獲取 userData behavior 保存數據的失效日期。
XMLDocument 獲取 XML 的引用。
方法:
getAttribute() 獲取指定的屬性值。
load(object) 從 userData 存儲區載入存儲的對象數據。
removeAttribute() 移除對象的指定屬性。
save(object) 將對象數據存儲到一個 userData 存儲區。
setAttribute() 設置指定的屬性值。
localStorage
方法:
localStorage.getItem(key):獲取指定key本地存儲的值
localStorage.setItem(key,value):將value存儲到key欄位
localStorage.removeItem(key):刪除指定key本地存儲的值
localData={
hname:location.hostname?location.hostname:'localStatus',
isLocalStorage:window.localStorage?true:false,
dataDom:null,
initDom:function(){//初始化userData
if(!this.dataDom){try{this.dataDom=document.createElement('input');//這里使用hidden的input元素
this.dataDom.type='hidden';this.dataDom.style.display="none";this.dataDom.addBehavior('#default#userData');//這是userData的語法
document.body.appendChild(this.dataDom);varexDate=newDate();
exDate=exDate.getDate()+30;this.dataDom.expires=exDate.toUTCString();//設定過期時間
}catch(ex){returnfalse;
}
}returntrue;
},
set:function(key,value){if(this.isLocalStorage){
window.localStorage.setItem(key,value);
}else{if(this.initDom()){this.dataDom.load(this.hname);this.dataDom.setAttribute(key,value);this.dataDom.save(this.hname)
}
}
},
get:function(key){if(this.isLocalStorage){returnwindow.localStorage.getItem(key);
}else{if(this.initDom()){this.dataDom.load(this.hname);returnthis.dataDom.getAttribute(key);
}
}
},
remove:function(key){if(this.isLocalStorage){
localStorage.removeItem(key);
}else{if(this.initDom()){this.dataDom.load(this.hname);this.dataDom.removeAttribute(key);this.dataDom.save(this.hname)
}
}
}
}
『陸』 JS裡面獲取、存儲、刪除緩存裡面的數據的具體代碼是什麼
js如何設置緩存及獲取設置的緩存
代碼如下:
//設置緩存,獲取設置的緩存,鍵值對形式,namevalue
//獲取鍵的值
varr
r=localStorage.getItem("key");
//設置鍵的值
localStorage.setItem("key",1);
//刪除鍵
localStorage.removeItem("key");
『柒』 怎麼用js實現把數據存儲到本地
可以用localstorge或者是瀏覽器本地資料庫,這對瀏覽器有要求,低版本的IE是不支持的
『捌』 js批量刪除本地存儲localStorage中部分值的方法
新一代瀏覽器普遍支持的 localStorage 介面,用來緩存token和一些業務數據,可避免重復請求服務端對伺服器造成的壓力,是一個非常有用的功能。但是它只提供了賦值、全部清空等功能,並沒有按鍵名模糊查詢批量刪除某一組緩存的介面。
在使用js清除localStorage時,我們希望能夠通過鍵名特徵進行批量刪除。這樣可以避免直接清空時,誤傷部分有用緩存的問題。
如:我們要刪除鍵名含有 testLog 字元的存儲內容,則調用如下:
如果本文對您有用,請點贊轉發。歡迎評論留言交流。
『玖』 draft-js 怎麼存儲內容
富文本內容的結構化存儲一個顯而易見的好處是表現力更強
以用 Python 判斷富文本中有沒有圖片為例。用傳統的 HTML 方式存儲富文本:
# 依賴用來渲染頁面的 HTML tag 及 CSS class,或許應該寫個更嚴謹的正則表達式,如果要取圖片地址之類的元信息則更麻煩
hasImage = '<img class="RichText-image"' in richContent
Draft.js:
# 語義清晰,和渲染邏輯無關
hasImage = any(entity.type == 'image' for entity in richContent.entityMap)
富文本內容的結構化存儲的另一個好處是內容的存儲和渲染邏輯分離
分離能夠帶來更高的靈活性
例如知乎站上用 <a href="/people/s0s0">@李奇</a> 來存儲富文本中對 urlToken 為 s0s0 的用戶的 mention,當加入支持用戶修改自定義的 urlToken 的功能後,如果 urlToken 被修改,那麼原先的鏈接就失效了。解決方案是把鏈接的存儲方式改為 <a href="memberHash">@李奇</a>,其中 memberHash 是唯一的不變的值,為此我們不得不支持 /people/:memberHash 形式的個人主頁鏈接。
另一種思路是存 memberHash,在渲染之前根據 member_hash 去讀取現在的 urlToken。在 Draft.js 中為 mention 創建 entity 如下:
{
type: 'mention',
data: {
menberHash: 'abc',
}
}
存儲和渲染的邏輯分離更容易保證渲染結果的確定性
以一段既加粗又傾斜的文本為例,對於一般的基於 HTML 存儲的富文本編輯器,如果先傾斜後加粗,很可能得到這個結果:
<b><i>我被加粗了,也被傾斜了</i></b>
如果先加粗後傾斜,則是:
<i><b>我被加粗了,也被傾斜了</b></i>
Draft.js:
{
"inlineStyleRanges": [
{"offset": 0, "length": 5, "style": "BOLD"},
{"offset": 0, "length": 5, "style": "ITALIC"}
]
}
<i> 和 <b> 標簽的順序由渲染邏輯中決定,我們甚至可以改用 CSS class 或者 inline style 來添加樣式(Draft.js 默認的做法)。
內容的存儲和渲染邏輯分離帶來的另一個可能的好處是多端復用
比如在 app 端做原生渲染,結構化數據比 HTML 更利於解析。