object{key:value} 타입으로 저장이 된다.
<body>
키 : <input type="text" id="key">
값 : <input type="text" id="data">
<br><br>
<input type="button" onclick="saveData()" value="데이터 저장">
<br><br>
<div id="result"></div>
<script>
var key = document.getElementById("key");
var data = document.getElementById("data");
function saveData()
{
localStorage.setItem(key.value, data.value);
document.getElementById("result").innerHTML = "데이터 저장 완료";
}
</script>
</body>
key값을 불러오는 방식
var data = localStorage.getItem(key)
var data = localStorage.key;
var data = localStorage.[key];
<body>
키 : <input type="text" id="key">
값 : <input type="text" id="data">
<br><br>
<input type="button" onclick="saveData()" value="데이터 저장">
<input type="button" onclick="loadData()" value="데이터 읽기">
<br><br>
<div id="result"></div>
<script>
var key = document.getElementById("key");
var data = document.getElementById("data");
function saveData()
{
localStorage.setItem(key.value, data.value);
document.getElementById("result").innerHTML = "데이터 저장 완료";
}
function loadData()
{
document.getElementById("result").innerHTML = "";
for(var i = 0; i < localStorage.length; i++)
{
var myKey = localStorage.key(i);
document.getElementById("result").innerHTML +=
myKey + " : " + localStorage.getItem(myKey) + "<br>";
}
}
</script>
</body>
localStorage.removeItem(key)
delete localStorage.key
delete localStorage[key]
도메인 : 사이트 하나가 하나의 도메인이 된다.
크롬 브라우저의 로컬 스토리지가 존재하는 것이 아니라 구글, 네이버의 로컬 스토리지가 각각 다름.
세션 스토리지는 브라우저 단위로 존재함.
1개의 프로세스, 적어도 1개의 스레드
백그라운드에서 실행시키기 위한 기술
워커 객체를 통해 제공되는 메소드와 이벤트
postMessage() 메소드
postMessage() 메소드에 메시지를 전달인자로 넘긴다.
이 메시지는 워커로 전달된다.
onmessage 이벤트
postMessage() 메소드에 의해 전달된 메시지를 event로 받는다.
postMessage()를 통해 메시지를 전달한 곳으로 다시 메시지 전달 가능.
이벤트가 발생하면 실행되는 콜백함수. 콜백함수에는 전달인자가 꼭 들어온다.
<body>
<button onclick="stopOperation()">워커 미적용 수행</button>
<button onclick="awake()">깨어날 시간</button>
<div id="result"></div>
<script>
function stopOperation()
{
var endTime = new Date().getTime() + 5000;
while(new Date().getTime() < endTime){};
document.getElementById("result").innerHTML = "일어날 시간입니다.";
}
function awake()
{
alert("일어날 시간");
}
</script>
</body>
worker = new Worker("worker.js");
코드를 통해 객체 생성 시 worker.js 파일을 가져온다.스레드 : 비동기방식
요청이 들어올 때마다 처리가 되면 좋겠지만 시간이 오래 걸리는 요청을 처리하기 위해 기다려야 하는 경우 , 빨리 처리 가능한 일을 먼저 처리하고 오래 걸리는 작업을 별도로 처리함
비동기와 동기를 구분하는 방법
함수를 호출 했을 때 리턴값이 없어도 다음 시퀀스에 영향을 주지 않는다면 비동기
리턴값이 있어야 다음 시퀀스로 진행할 수 있는 경우 동기
코드의 양이 많아져 복잡도가 증가하면 이에 대한 오류를 검출하기 쉽지 않다.
이에 웹 워커는 에러를 확인하고 에러 정보를 리턴하는 이벤트를 제공한다.
onerror 이벤트 사용법
error 이벤트를 통해 얻을 수 있는 정보
어플리케이션 캐시란 인터넷 연결 없이 오프라인에서도 웹 사이트를 사용할 수 있도록 리소스를 캐시하는 것.
리소스의 요소 : HTML, CSS, javascript, 이미지, 파일, 폰트 등
리소스를 서버로부터 가져오는 것이 아니라 캐시되어있는 리소스를 이용.
오프라인 어플리케이션의 대표 사례가 구글 메일인 gmail 오프라인이다.
네트워크 연결이 없는 상황에서도 메일의 내용을 확인할 수 있다.
*.manifest
로 저장하는 것이 관례다.appCache.html, appCache.css, appCache.js 세 개의 파일이 존재하고, appCache.html문서에서 각각의 css와 js 파일을 로딩하는 형태.
오프라인에서 이 파일을 열려고 한다면 '페이지를 표시할 수 없습니다' 표시
= 세 개의 파일을 캐시 매니페스트에 추가한 형태
웹 서버를 동작시킨다. 그리고 우리가 작성한 리소스 파일(html, js, js, 이미지) 및 manifest 파일을 웹 서버 위치인 htdocs에 넣어놓는다.
웹 브라우저를 실행시키고, 로컬서버로 접속해 우리가 작성한 웹 페이지가 정상적으로 수행되는지 확인한다.
웹 서버를 중단시킨다. (웹 서버가 원격에 위치하고 있다면 랜선을 뽑아 네트워크를 끊어도 같은 효과이다.)
서버와 클라이언트가 한 PC에 공존하고 있기 때문에, 웹 서버를 중단시켜야 네트워크가 끊어진 효과를 얻을 수 있다.
다시 웹 브라우저를 실행시키고, 로컬 서버로 접속한다.
웹 페이지가 정상적으로 수행되는지 확인한다.
offapp.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입 페이지</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<s1>
<div id="wrapper">
<form>
<table border="0" cellpadding="3" cellspacing="1" bgcolor="#6CAEFC" align="center">
<tr>
<td bgcolor="#B6CFF1" align="center">
<b>사용자 프로필 사진</b>
</td>
<td bgcolor="#FFFFFF">
<img src="gosim.png">
</td>
</tr>
<tr>
<td bgcolor="#B6CFF1" align="center">
<b>사용자 이름</b>
</td>
<td bgcolor="#FFFFFF">
<input type="text" name="id" size="15">
</td>
</tr>
<tr>
<td bgcolor="#B6CFF1" align="center">
<b>희망 아이디</b>
</td>
<td bgcolor="#FFFFFF">
<input type="text" name="id" size="15">
</td>
</tr>
<tr>
<td bgcolor="#B6CFF1" align="center">
<b>닉네임</b>
</td>
<td bgcolor="#FFFFFF">
<input type="text" name="nickname" size="15">
</td>
</tr>
<tr>
<td bgcolor="#B6CFF1" align="center">
<b>비밀번호</b>
</td>
<td bgcolor="#FFFFFF">
<input type="password" name="pw" size="15">
</td>
</tr>
</table>
<br>
<center>
<!-- <a href="message.html">회원가입</a> -->
<input type="button" value="회원가입">
</center>
</form>
</div>
</s1>
</body>
</html>
cache.manifest
CACHE MANIFEST
#version 1.0
CACHE:
offapp.html
style.css
gosim.png
NETWORK:
FALLBACK:
style.css
s1 {
font-size : 14pt;
font-family: 굴림;
}
bitnami 설치 후 htdocs 폴더에 파일들을 옮기고 로컬서버로 한 번 접속한 후, apache서버를 끈 후 다시 접속하면 저장된 캐시로 인해 서버가 꺼져도 정상적으로 접속된다.