찾다
웹 프론트엔드H5 튜토리얼静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?

移动端完全没有兼容问题,只要写版本更新判断就行。
PC端支持到IE8,不支持则请求。
目前一个新项目准备这样架构,但隐隐担忧有什么致命缺点,因为现在还没有被广泛应用。

回复内容:

谢邀。经常用,所以过来回答一下。

我的看法是:PC上用的价值不大,移动端单页面应用(也有叫webapp)值得尝试。

这里要首先提出一个关于静态资源管理和SEO(搜索引擎优化)方面的关联问题:如果要做SEO,那么CSS必然不能进行LS(localstorage)的本地缓存优化。这个原因很简单:

要进行SEO,必须直接输出完整HTML,因此必须让样式在头部以link标签加载。如果先输出HTML,后用js从本地缓存读取样式再插入,会出现严重的阻塞和闪烁问题,相信正常人是不会这么干的。

然后再更正一件事,就是取出localstorage的代码不一定要eval,eval很evil,一个eval函数很有可能影响整个js文件的压缩(出现eval之后不能对变量名进行替换),当然,我们可以通过一些hack避免这种压缩问题,不过我喜欢这样搞:
<span class="kd">var</span> <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">'script'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">code</span> <span class="o">=</span> <span class="s1">'!function(){'</span> <span class="o">+</span> <span class="nx">getCodeFromLocalStorage</span><span class="p">()</span> <span class="o">+</span> <span class="s1">'\n}();'</span><span class="p">;</span>
<span class="nx">script</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">createTextNode</span><span class="p">(</span><span class="nx">code</span><span class="p">));</span>
<span class="nb">document</span><span class="p">.</span><span class="nx">head</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span>
先说说主要会面临的问题
1、执行速度,读取后使用eval或创建<script>标签的时间会比浏览器直接加载慢。<br>2、版本控制,需要自己写一套版本控制机制。<br>3、localStorage是公共资源,如果你的产品域名下有很多应用共享这份资源会有风险。<br>4、localStorage以页面的域名划分,而常见的静态资源都以资源本身的域名来缓存,意味着如果你的应用有多个等价域名,它们之间的localStorage不互通,会造成缓存多份浪费。<br>5、兼容性需要处理(不支持、隐私模式、写满、http/https、写的正确性等等)<br><br>=====================================<br><b>下面开始胡扯时间!<br>如果上述2、3、4、5你觉得都不是问题的话,1一定程度上是可以量化来评估的。<br><b>方案1:使用原始的缓存机制<br>做静态资源缓存率的收集得到比例:A%<br>完整请求所需时间:t0<br>304所需时间:t1<br>在使用浏览器内建机制的情况下代码执行所需时间:t2<br><b>那么使用浏览器内建机制所需的时间期望就是:T1 = t0 * (1-A%) + t1 * A% + t2<br>* 如果使用expires方式的HTTP缓存可以让t1为0<br><br><b>方案2:使用自定义的localStorage缓存机制<br>做localStorage缓存命中率测试得到比例:B%<br>在使用localStorage读取并执行的情况下代码执行所需时间:t3<br>使用localStorage的缓存命中情况比较复杂,可以稍微梳理一下:<br>1、B%概率命中localStorage,所需时间为t3<br>2、(1-B%)概率未命中localStorage,A%概率命中HTTP缓存,所需时间为t1 + t2<br>3、(1-B%)未命中localStorage,(1-A%)概率未命中HTTP缓存,所需时间为t0 + t2<br>其中2和3加起来就是(1-B%) * T1对吧<br><b>那么使用localStorage缓存机制所需的时间期望就是:T2 = t3 * B% + T1 * (1-B%)<br><br>* 上面忽略了localStorage缓存机制的加载器自己加载的时间、它的逻辑内部消耗和写入localStorage等时间。<br><br><b>不严谨,不过我觉得还是有参考价值的<br>从上面的两个时间上看,我们预期是T2 < T1<br>delta = T2 - T1 = t3 * B% - T1 * B% = (t3 - T1) * B%<br>因为B%肯定>=0,要让delta<0,只要t3比T1小就行了(B%会决定收益有多大)<br>其实说了这么半天,也就是楼上@小爝 所言<br><div class="highlight"><pre class='brush:php;toolbar:false;'>读localstorage再eval的速度比直接加载304缓存在当成js的执行速度要慢,而且不少……呵呵。。。 </pre> 浏览器都帮你缓存好了,干嘛多此一举缓存到LS里?<br>耗费成本是多少?解决了多少问题?价值几何?维护是否方便?是否简单易用?有足够的开发时间么?<br><br>如果你真的很闲,并且要炫酷吊炸天,搞起吧 <span class="invisible">https://<span class="visible">mtjs.github.io/<span class="invisible"><i class="icon-external"><br><br>在快速迭代版本过程中,我们有时候只修改了某个js中的几行代码,却需要用户下载整个js文件,这在重视流量的移动端显得非常浪费,mt独创的增强更新算法实现了修改多少代码就只下载修改代码的功能,为用户和公司节省大量流量<br><br>localstorage里面存储的上个版本的js内容和版本号,当本次版本号和上次版本号不一致的时候,mt拼接出增量文件url去拉取增量文件,并和上个版本的js内容合并生成新版本内容。整个方案得核心在于增量文件得计算和合并<br><br>吊炸天 两年前看到这篇文章,有些启发:<span class="invisible">http://www.<span class="visible">mobify.com/blog/smartph<span class="invisible">one-localstorage-outperforms-browser-cache<span class="ellipsis"><i class="icon-external"><br><br>不过貌似现在这个网站有点问题,我贴几张文章中比较核心的数据比较图,两年前的文章了,不知道现在是否还适用:<br><br><noscript><img class="origin_image zh-lightbox-thumb lazy" src="/static/imghwm/default1.png" data-src="https://pic4.zhimg.com/d8672f62a69ed08093f2d0511ae5f477_b.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="576" data-original="https://pic4.zhimg.com/d8672f62a69ed08093f2d0511ae5f477_r.jpg" alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" >20% trimmed mean results of native browser cache vs localStorage performance. Mean performance for localStorage is always faster than the browser's native cache and for iOS 5 & 6, dramatically so.<img class="origin_image zh-lightbox-thumb lazy lazy" src="/static/imghwm/default1.png" data-src="//zhstatic.zhihu.com/assets/zhihu/ztext/whitedot.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="576" data-original="https://pic4.zhimg.com/d8672f62a69ed08093f2d0511ae5f477_r.jpg" data-actual alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" >20% trimmed mean results of native browser cache vs localStorage performance. Mean performance for localStorage is always faster than the browser's native cache and for iOS 5 & 6, dramatically so.<br><noscript><img class="origin_image zh-lightbox-thumb lazy" src="/static/imghwm/default1.png" data-src="https://pic1.zhimg.com/6302146d6bdfde10d3f07e2a2d3f7ec0_b.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="576" data-original="https://pic1.zhimg.com/6302146d6bdfde10d3f07e2a2d3f7ec0_r.jpg" alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" ><img class="origin_image zh-lightbox-thumb lazy lazy" src="/static/imghwm/default1.png" data-src="//zhstatic.zhihu.com/assets/zhihu/ztext/whitedot.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="576" data-original="https://pic1.zhimg.com/6302146d6bdfde10d3f07e2a2d3f7ec0_r.jpg" data-actual alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" ><noscript><img class="origin_image zh-lightbox-thumb lazy" src="/static/imghwm/default1.png" data-src="https://pic1.zhimg.com/ec659820b44451269920b9fc43555550_b.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="630" data-original="https://pic1.zhimg.com/ec659820b44451269920b9fc43555550_r.jpg" alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" ><img class="origin_image zh-lightbox-thumb lazy lazy" src="/static/imghwm/default1.png" data-src="//zhstatic.zhihu.com/assets/zhihu/ztext/whitedot.jpg" data-raw style="max-width:90%" data-raw style="max-width:90%" width="630" data-original="https://pic1.zhimg.com/ec659820b44451269920b9fc43555550_r.jpg" data-actual alt="静态资源(JS/CSS)存储在localStorage有什么缺点?为什么没有被广泛应用?" ><br><br>stdDev 是标准方差的意思。<br><br><br>另外说到容量问题,之前貌似是5mb,不知道现在啥情况了- - 目前主流的网站的静态文件都使用了缓存,比如在 nginx 中只需要加几行配置就可以实现。只要浏览器不清空,某个固定链接的静态文件只需要加载一次。除非文件链接改变后,或者页面强制刷新,浏览器才会从服务器端重新读取静态文件。<br>从这个方面看,使用 localStorage 和传统缓存实际上是差不多的,并不能带来较明显的好处。另外还要考虑改造成本和兼容性等。<br><br>而一些移动站点(貌似包括腾讯首页)是使用 localStorage 来存储 js/css 静态文件,每次 js/css 升级时,只需要从服务器端获取一份包含静态文件变动信息的文件就好了。这样避免了静态文件升级一次,浏览器就要从服务器完整地加载一份新版本的静态文件。<br>如此采取 localStorage,可以为移动用户节省一些流量。<br><br>但是后面的这种方式有一定成本和门槛。<br><br>以上抛个砖。 是时候做广告了,基于localstorage的js存储更新解决方案,可以做到字符级别的资源增量更新:mtjs/mt · GitHub<i class="icon-external"> 偶凑热闹的,碎碎念几句。<br><br>首先不是移动端完全没有兼容问题,问题还是有的。<br>1、Safari 处于隐私模式时,LS set 数据会抛异常<br>2、不同移动端浏览器,对单次set数据大小是有区别的,印象(懒得换机器查PPT了)中是 3-5M 不等<br>3、不同移动端浏览器对LS总容量大小是有区别的,印象(懒得换机器查PPT了)中是 5-10M 不等(这里指的是单子域限制)<br><br>其次,IE 上可以封装userData作为兼容。<br><br>最后,关键不在于LS,而在LS的控制是个问题。<br>如:<br>1、一个项目,LS 任何人可CURD。其中值被其他功能修改以及删除很有可能,导致难查找的问题。<br>2、多人写LS,可能会写满,LS 总量控制如何监控,不超限<br>3、LS 过期问题,都写LS,过期机制是怎么样的,过期了优先删除哪些腾出空间<br>4、都没过期的情况下,有新数据进来,删除哪些腾出空间<br>5、如有LS控制器封装控制以上问题,但第三方代码(如接入的广告js)不使用控制器直接写LS如何处理 ls叫做本地存储,不叫本地缓存loadcache,还是有他一定道理的。证明他更多的作用在于存储数据,而不是缓存资源!HTML5针对缓存已经有了一套方案。其次,把js,CSS代码存在ls,意义不大。把其中的数值存在ls,意义会更大些。因为ls在用户浏览器中,有些交互体验的个性数值,你可以存在ls中。或者APP形式的页面更有意义了。把东西用得恰到好处,叫充分利用资源。避免弄巧成拙。 localStorage是一个js对象,而浏览器的缓存技术是基于浏览器的。<br>你说是js快还是浏览器快。 </script>
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
기본 이외 : H5 코드의 고급 기술기본 이외 : H5 코드의 고급 기술May 02, 2025 am 12:03 AM

H5에 대한 고급 팁에는 다음이 포함됩니다. 1. 복잡한 그래픽 사용, 2. 웹 워크를 사용하여 성능 향상, 3. WebStorage, 4. 응답 디자인 구현, 5. WebRTC를 사용하여 실시간 커뮤니케이션을 달성하기 위해, 6. 성능 최적화 및 모범 사례를 수행하십시오. 이 팁은 개발자가보다 역동적이고 대화식 및 효율적인 웹 응용 프로그램을 구축 할 수 있도록 도와줍니다.

H5 : 웹 컨텐츠 및 디자인의 미래H5 : 웹 컨텐츠 및 디자인의 미래May 01, 2025 am 12:12 AM

H5 (HTML5)는 새로운 요소와 API를 통해 웹 컨텐츠와 디자인을 개선합니다. 1) H5는 시맨틱 태깅 및 멀티미디어 지원을 향상시킵니다. 2) 웹 디자인을 풍부하게하는 캔버스 및 SVG를 소개합니다. 3) H5는 새로운 태그와 API를 통해 HTML 기능을 확장하여 작동합니다. 4) 기본 사용에는이를 사용하여 그래픽 생성이 포함되며, 고급 사용량은 WebStorageapi와 관련이 있습니다. 5) 개발자는 브라우저 호환성 및 성능 최적화에주의를 기울여야합니다.

H5 : 웹 개발을위한 새로운 기능 및 기능H5 : 웹 개발을위한 새로운 기능 및 기능Apr 29, 2025 am 12:07 AM

H5는 여러 가지 새로운 기능과 기능을 제공하여 웹 페이지의 상호 작용 및 개발 효율성을 크게 향상시킵니다. 1. Enhance SEO와 같은 시맨틱 태그. 2. 멀티미디어 지원은 오디오 및 비디오 재생 및 태그를 단순화합니다. 3. 캔버스 드로잉은 역동적 인 그래픽 드로잉 도구를 제공합니다. 4. 로컬 스토리지는 LocalStorage 및 SessionStorage를 통해 데이터 스토리지를 단순화합니다. 5. Geolocation API는 위치 기반 서비스의 개발을 용이하게합니다.

H5 : HTML5의 주요 개선H5 : HTML5의 주요 개선Apr 28, 2025 am 12:26 AM

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.

HTML5 : 표준과 웹 개발에 미치는 영향HTML5 : 표준과 웹 개발에 미치는 영향Apr 27, 2025 am 12:12 AM

HTML5의 핵심 기능에는 시맨틱 태그, 멀티미디어 지원, 오프라인 저장 및 로컬 스토리지 및 형태 향상이 포함됩니다. 1. 코드 가독성 및 SEO 효과를 향상시키는 시맨틱 태그 등. 2. 레이블로 멀티미디어 임베딩을 단순화하십시오. 3. ApplicationCache 및 LocalStorage와 같은 오프라인 스토리지 및 로컬 스토리지는 네트워크없는 작동 및 데이터 저장을 지원합니다. 4. 양식 향상은 처리 및 검증을 단순화하기 위해 새로운 입력 유형 및 검증 속성을 도입합니다.

H5 코드 예제 : 실제 응용 프로그램 및 튜토리얼H5 코드 예제 : 실제 응용 프로그램 및 튜토리얼Apr 25, 2025 am 12:10 AM

H5는 다양한 새로운 기능과 기능을 제공하여 프론트 엔드 개발 기능을 크게 향상시킵니다. 1. 멀티미디어 지원 : 미디어를 포함하고 요소를 포함하여 플러그인이 필요하지 않습니다. 2. 캔버스 : 요소를 사용하여 2D 그래픽 및 애니메이션을 동적으로 렌더링합니다. 3. 로컬 스토리지 : LocalStorage 및 SessionStorage를 통해 지속적인 데이터 저장을 구현하여 사용자 경험을 향상시킵니다.

H5와 HTML5 사이의 연결 : 유사성과 차이H5와 HTML5 사이의 연결 : 유사성과 차이Apr 24, 2025 am 12:01 AM

H5 및 HTML5는 다른 개념입니다. HTML5는 새로운 요소 및 API를 포함하는 HTML의 버전입니다. H5는 HTML5를 기반으로 한 모바일 애플리케이션 개발 프레임 워크입니다. HTML5는 브라우저를 통해 코드를 구문 분석하고 렌더링하는 반면 H5 응용 프로그램은 컨테이너를 실행하고 JavaScript를 통해 기본 코드와 상호 작용해야합니다.

H5 코드의 빌딩 블록 : 주요 요소 및 그 목적H5 코드의 빌딩 블록 : 주요 요소 및 그 목적Apr 23, 2025 am 12:09 AM

HTML5의 주요 요소에는 최신 웹 페이지를 작성하는 데 사용되는 ,,,,, 등이 포함됩니다. 1. 헤드 컨텐츠 정의, 2. 링크를 탐색하는 데 사용됩니다. 3. 독립 기사의 내용을 나타내고, 4. 페이지 내용을 구성하고, 5. 사이드 바 컨텐츠 표시, 6. 바닥 글을 정의하면, 이러한 요소는 웹 페이지의 구조와 기능을 향상시킵니다.

See all articles

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.