웹 프론트엔드 JS 튜토리얼 HTML5 웹 캐싱 및 애플리케이션 캐싱

HTML5 웹 캐싱 및 애플리케이션 캐싱

Jan 13, 2018 am 11:13 AM
h5 html5 web

이 글에서는 주로 HTML5 웹 캐싱과 애플리케이션 캐싱(쿠키, 세션)에 대해 소개하고 있는데, 편집자가 꽤 좋다고 생각해서 지금 공유하고 참고용으로 올려보겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

HTML5 웹 캐싱을 소개하기 전에 쿠키와 세션에 대해 알아봅시다:

세션:

HTTP는 무국적이므로 당신은 누구입니까? 당신은 무엇을 했나요? 죄송합니다. 서버에서는 알 수 없습니다.

그래서 나중에 사용할 수 있도록 사용자 정보(예: 사용자 이름, 장바구니 구매 등)를 서버에 저장하는 세션이 나타납니다.

하지만 세션은 일시적이며 사용자가 웹사이트를 떠나면 삭제됩니다. 정보를 영구적으로 저장하려면 데이터베이스에 저장할 수 있습니다!

세션 작동 방식: 각 사용자에 대한 세션 ID(core!!!)를 만듭니다. 세션 ID는 쿠키에 저장됩니다. 즉, 브라우저가 쿠키를 비활성화하면 세션이 무효화됩니다! (그러나 URL을 통해 세션 ID를 전달하는 등 다른 방법으로 구현할 수도 있습니다.)

사용자 확인은 일반적으로 세션을 사용합니다.

쿠키:

목적: 사용자를 식별하기 위해 웹사이트에서 클라이언트 측에 로컬로 저장한 데이터(일반적으로 암호화됨).

  1. 사용자가 웹페이지를 방문하면 쿠키에 이름이 기록됩니다.

  2. 사용자가 다음번에 웹페이지를 계속 방문할 때 쿠키에서 사용자 액세스 기록을 읽을 수 있습니다.

쿠키는 동일한 출처의 http 요청에서 (필요하지 않은 경우에도) 전달됩니다. 즉, 클라이언트와 서버 간에 앞뒤로 전달됩니다!

쿠키의 데이터 크기는 4k를 초과하지 않습니다.

쿠키 유효 기간: 설정된 쿠키는 브라우저가 닫혀도 유효 시간까지 유효합니다!

localStorage & sessionStorage:

초기에는 쿠키를 로컬 캐싱에 주로 사용했지만 웹 스토리지는 더 안전하고 빨라야 합니다!

이 데이터는 서버(클라이언트에 저장)에 저장되지 않으며 서버 성능에 영향을 미치지 않습니다!

sessionStorage 및 localStorage 데이터 저장소에도 크기 제한이 있지만 쿠키보다 훨씬 크며 5M 이상에 도달할 수 있습니다!

localStorage: 시간 제한 없는 데이터 저장!

sessionStorage: 영어 의미에서 알 수 있듯이 세션의 데이터 저장 공간이므로 사용자가 브라우저(탭/창)를 닫은 후에는 데이터가 삭제됩니다!

HTML5 웹 저장소 지원:

IE8 이상, 최신 브라우저.

데이터는 키-값 쌍으로 저장됩니다.

localStorage 및 sessionStorage에는 다음과 같은 메서드가 있습니다.

  1. localStorage.setItem(key, value): 데이터를 설정(저장)합니다. localStorage.key=value!

  2. localStorage.getItem(key): 데이터 가져오기

  3. localStorage.removeItem(key): 단일 데이터 삭제

  4. localStorage.clear(): 모든 데이터 삭제

  5. localStorage.key(index): 가져오기 특정 인덱스의 키 값


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<!DOCTYPE html>

<html lang="en">

 

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>web storage</title>

</head>

 

<body>

    <p id="test"></p>

    <script>

        if (typeof (Storage) != undefined) {

            localStorage.name = &#39;xiao ming&#39;;

            localStorage.setItem(&#39;name1&#39;, &#39;Apple&#39;);

            document.getElementById(&#39;test&#39;).innerHTML = "you are: " + localStorage.name;

            console.log("first:" + localStorage.name1 + "," + localStorage.key(0));

            localStorage.removeItem(&#39;name1&#39;);

            console.log("second: " + localStorage.name1);

            console.log("third: " + localStorage.getItem(&#39;name&#39;));

            localStorage.clear();

            console.log("last:" + localStorage.name);

        } else {

            document.getElementById(&#39;test&#39;).innerHTML = "更新浏览器吧!目前浏览器不支持stroage";

        }

         

    </script>

</body>

</html>

로그인 후 복사

프로그램 실행 결과:

참고: 키-값 쌍은 문자열로 저장되며 필요에 따라 유형을 변경해야 합니다. 예를 들어 덧셈을 하려면 숫자형으로 변경하세요) .

HTML5 애플리케이션 캐시:

캐시 매니페스트 파일을 생성하면 웹 애플리케이션을 캐시하고 네트워크 상태 없이 액세스할 수 있습니다!

애플리케이션 캐시 장점:

1. 오프라인 검색
2. 더 빠른 속도: 캐시된 리소스가 더 빠르게 로드됩니다.
3. 클라이언트는 서버에서 변경된 리소스만 다운로드하거나 업데이트합니다.

IE10 이상, 최신 브라우저.

사용:

1

2

3

<!DOCTYPE html>

<html manifest="demo.appcache">

</html>

로그인 후 복사

참고: 애플리케이션 캐시를 활성화하려면 매니페스트 속성(확장자: .appcache)을 지정해야 합니다. 매니페스트 속성이 지정되지 않으면 페이지가 캐시되지 않습니다. )

매니페스트 파일은 서버에서 MIME 유형: text/cache-manifest로 올바르게 구성되어야 합니다.

매니페스트 파일:

매니페스트는 브라우저에 캐시된 것과 캐시되지 않은 것을 알려주는 간단한 텍스트 파일입니다!

매니페스트는 세 부분으로 나눌 수 있습니다:

캐시 매니페스트: 이 항목에 나열된 파일은 첫 번째 다운로드 후 캐시됩니다!

NETWORK: 이 항목에 나열된 파일은 서버에 대한 네트워크 연결이 필요하며 캐시되지 않습니다!

FALLBACK: 이 항목은 페이지에 접근할 수 없을 때(예: 404 페이지) 대체 페이지를 나열합니다!

test.appcache:

1

2

3

4

5

6

7

8

9

10

11

12

13

CACHE MANIFEST

#2017 11 21 v10.0.1

/test.css

/logo.gif

/main.js

 

NETWORK

/login.php

/register.php

 

FALLBACK

#/html/目录中文件无法访问时,用/offline.html替代

/html/ /offline.html

로그인 후 복사

애플리케이션 캐시 업데이트:

1. 사용자가 브라우저 캐시를 지웁니다! 2. 매니페스트 파일이 변경됩니다. (#: 주석을 나타내며, #2018 1 1 v20.0.0으로 변경되면 브라우저가 다시 캐시됩니다!)
3. 프로그램이 애플리케이션 캐시를 업데이트합니다! 웹 작업자:

웹 작업자는 다른 스크립트와 독립적으로 백그라운드에서 실행되는 자바 스크립트이므로 페이지 성능에 영향을 주지 않습니다!

일반 HTML 페이지에서 스크립트를 실행할 때 스크립트를 로드하지 않으면 페이지가 응답하지 않습니다!

支持情况:IE10以上,现代浏览器

示例:html文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>web worker</title>

</head>

<body>

    <p>计数:<output id="count"></output></p>

    <button onclick="startWorker()">开始</button>

    <button onclick="overWorker()">结束</button>

 

    <script>

        var w;

        function startWorker(){

            // 检测浏览器是否支持web worker

            if(typeof(Worker)!==&#39;undefined&#39;){

                if(typeof(w)==&#39;undefined&#39;){

                    //创建web worker对象

                    w=new Worker(&#39;testWorker.js&#39;);

                }

                // 事件持续监听(即使外部脚本已经完成),除非被终止

                w.onmessage=function(event){

                    document.getElementById(&#39;count&#39;).innerHTML=event.data;

                };

            }else{

                document.getElementById(&#39;count&#39;).innerHTML=&#39;浏览器不支持web worker&#39;;

            }

        }

        function overWorker() {

            // 终止web worker对象,释放浏览器/计算机资源

            w.terminate();

            w=undefined;

        }

    </script>

</body>

</html>

로그인 후 복사

testWorker.js文件:


1

2

3

4

5

6

7

8

var i=0;

function timedCount() {

    i+=1;

    // 重要的部分,向html页面传回一段信息

    postMessage(i);

    setTimeout(&#39;timedCount()&#39;,500);

}

timedCount();

로그인 후 복사

注意1:通常web worker不是用于如此简单的任务,而是用在更耗CPU资源的任务!

注意2:在chrome中运行会产生“cannot be accessed from origin 'null'”的错误,我的解决方法是:xampp中开启apache,用http://localhost/进行访问。

web worker缺点:

由于web worker位于外部文件中,所以它无法访问下列javascript对象:

  1. window对象;

  2. document对象;

  3. parent对象。

HTML5 server-sent events(服务器发送事件):

server-sent事件是单向信息传递;网页可以自动获取来自服务器的更新!

以前:网页先询问是否有可用的更新,服务器发送数据,进行更新(双向数据传递)!

支持情况:除IE以外的现代浏览器均支持!

示例代码:html文件:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>sever sent event</title>

</head>

<body>

    <p>sever sent event informations</p>

    <p id="test"></p>

    <script>

        // 判断浏览器是否支持EventSource

        if(typeof(EventSource)!==undefined){

            // 创建EventSource对象

            var source=new EventSource("test.php");

            // 事件监听

            source.onmessage=function(event){

                document.getElementById(&#39;test&#39;).innerHTML+=event.data+"<br>";

            };

        }else{

            document.getElementById(&#39;test&#39;).innerHTML="sorry,浏览器不支持server sent event";

        }

    </script>

</body>

</html>

로그인 후 복사

test.php:


1

2

3

4

5

6

7

8

<?php

header(&#39;Content-Type:text/event-stream&#39;);

header(&#39;Cache-Control:no-cache&#39;);

 

$time=date(&#39;r&#39;);

echo "data:The server time is: {$time} \n\n";

// 刷新输出数据

flush();

로그인 후 복사

注意:后面没有内容,php文件可以不用"?>"关闭!

HTML5 WebSocket:

  1. WebSocket是HTML5提供的一种在单个TCP连接上建立全双工(类似电话)通讯的协议;

  2. 浏览器和服务器之间只需要进行一次握手的操作,浏览器和服务器之间就形成了一条快速通道,两者之间就可直接进行数据传送;

  3. 浏览器通过javascript建立WebSocket连接请求,通过send()向服务器发送数据,onmessage()接收服务器返回的数据。

 WebSocket如何兼容低浏览器:

  1. Adobe Flash Socket;

  2. ActiveX HTMLFile(IE);

  3. 基于multipart编码发送XHR;

  4. 基于长轮询的XHR

WebSocket可以用在多个标签页之间的通信!

相关推荐:

Nginx的Web缓存服务与新浪网的开源NCACHE模块

Web缓存杂谈_html/css_WEB-ITnose

基于反向代理的Web缓存加速可缓存的CMS系统设计_PHP

위 내용은 HTML5 웹 캐싱 및 애플리케이션 캐싱의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

See all articles