## ;(function (global) { 'use strict'; //检查文件类型 var TYPE_RE = /\.(js|css)(?=[?&,]|$)/i; function fileType(str) { var ext = 'js'; str.replace(TYPE_RE, function (m, $1) { ext = $1; }); if (ext !== 'js' && ext !== 'css') ext = 'unknown'; return ext; } //将js片段插入dom结构 function evalGlobal(strScript){ var scriptEl = document.createElement ("script"); scriptEl.type= "text/javascript"; scriptEl.text= strScript; document.getElementsByTagName("head")[0].appendChild(scriptEl) ; } //将css片段插入dom结构 function createCss(strCss) { var styleEl = document.createElement('style'); document.head.appendChild(styleEl); styleEl.appendChild(document.createTextNode(strCss)); } // 在全局作用域执行js或插入style node function defineCode(url, str) { var type = fileType(url); if (type === "js"){ //with(window)eval(str); evalGlobal(str); }else if(type === "css"){ createCss(str); } } // 将数据写入localstorage var setLocalStorage = function(key, item){ window.localStorage && window.localStorage.setItem(key, item); } // 从localstorage中读取数据 var getLocalStorage = function(key){ return window.localStorage && window.localStorage.getItem(key); } // 通过AJAX请求读取js和css文件内容,使用队列控制js的执行顺序 var rawQ = []; var monkeyLoader = { loadInjection: function(url,onload,bOrder){ var iQ = rawQ.length; if(bOrder){ var qScript = {key: null, response: null, onload: onload, done: false}; rawQ[iQ] = qScript; } //有localstorage 缓存 var ls = getLocalStorage(url); if(ls !== null){ if(bOrder){ rawQ[iQ].response = ls; rawQ[iQ].key = url; monkeyLoader.injectScripts(); }else{ defineCode(url, ls) if(onload){ onload(); } } } else { var xhrObj = monkeyLoader.getXHROject(); xhrObj.open('GET', url, true); xhrObj.send(null); xhrObj.onreadystatechange = function(){ if(xhrObj.readyState == 4){ if(xhrObj.status == 200){ setLocalStorage(url, xhrObj.responseText); if(bOrder){ rawQ[iQ].response = xhrObj.responseText; rawQ[iQ].key = url; monkeyLoader.injectScripts(); }else{ defineCode(url, xhrObj.responseText) if(onload){ onload(); } } } } } } }, injectScripts: function(){ var len = rawQ.length; //按顺序执行队列中的脚本 for (var i = 0; i < len; i++) { var qScript = rawQ[i]; //没有执行 if(!qScript.done){ //没有加载完成 if(!qScript.response){ console.error("raw code lost or not load!"); //停止,等待加载完成, 由于脚本是按顺序添加到队列的,因此这里保证了脚本的执行顺序 break; }else{//已经加载完成了 defineCode(qScript.key, qScript.response) if(qScript.onload){ qScript.onload(); } delete qScript.response; qScript.done = true; } } } }, getXHROject: function(){ //创建XMLHttpRequest对象 var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; } }; global.monkeyLoader = monkeyLoader.loadInjection; })(this);
相关推荐
可能的实现方式包括监听网络状态、制定预加载策略(如优先级、最大并发数)、以及对预加载结果的反馈和错误处理。 总的来说,iOS Webview Hybrid开发中的预加载技术是一个关键的优化手段,能够显著提高应用的响应...
预加载是在用户启动应用之前预先加载部分或全部资源,以减少首次使用时的等待时间,提升用户体验。在Sencha Touch中,我们可以采用以下几种策略进行预加载优化: 1. **异步加载**:对于大型应用,可以将数据和组件...
总结来说,移动端网页图片预加载方案需要考虑到各种设备和网络环境的差异。在iOS设备上,由于其特定的图片加载策略,单纯依赖浏览器缓存可能无法达到预期效果。采用Base64编码结合localStorage的方法,可以有效地...
3. **本地存储**:使用HTML5的`localStorage`或`IndexedDB`来存储预加载的资源。这些存储机制允许在客户端持久化大量数据。 4. **检查本地缓存**:在发起请求前,检查本地是否已有预加载的资源,如果有,则直接使用...
- **PreloadJS**: 一个强大的预加载库,不仅支持图片,还能预加载音频和 JSON 等资源。 - **imgpreload**: 简单易用的预加载插件,适用于快速实现图片预加载功能。 - **imagesLoaded**: 主要用于检测图片是否已经...
5. 视频处理:了解如何优化视频编码,设置合适的分辨率和比特率,以及如何处理视频预加载问题。 6. 响应式设计:让H5+C3动画适应不同设备的屏幕尺寸和方向,确保在手机、平板等设备上的良好展示。 7. 测试和调试:...
通过Vue.js构建用户界面,Vuex管理应用状态,localStorage实现数据持久化,Sass提升样式编写效率,Webpack进行资源管理和优化,共同创建了一个功能完善的本地记事本应用,满足了多平台使用的需求。开发者可以在这个...
Service Worker技术更是增强了这一能力,它能在后台运行,拦截网络请求,实现预加载和缓存策略,提高应用响应速度。 表单控件在HTML5中也得到了改进,例如新增的日期选择器、输入类型限制等,这有助于提升移动设备...
7. Unit和E2E测试:可能使用Jest或Mocha等工具进行单元测试和端到端测试,确保应用的功能正确性和稳定性。 综上所述,这个"vue+vuex+localstorage记账小程序应用"是一个全面的前端项目,融合了Vue.js的组件化开发、...
这样,即使在网络断开时,用户仍然可以访问这些预加载的游戏资源,继续他们的游戏。 这个"刽子手"游戏的实现,不仅展示了Canvas的强大绘图功能,还体现了LocalStorage和离线存储在提高Web应用用户体验上的重要作用...
在“bootstrap:使用bootstrap为评论部分创建此模板和localstorage”这个主题中,我们将探讨如何利用Bootstrap创建一个评论系统,并结合localStorage实现数据持久化。 首先,Bootstrap的核心在于其栅格系统,它允许...
例如,当检测到第三方应用不支持localStorage时,可以使用惰性模式立即或首次使用时重定义获取和设置方法,以减少不必要的检查。 3. 使用缓存: 对于频繁访问的数据,使用变量缓存结果可避免重复计算。例如,计算...
通过阅读和分析这些源代码,开发者可以学习到如何结合各种技术实现不同的动态加载效果,如渐进式加载、滚动加载、预加载等。 总的来说,这30个前端动态加载页展示了HTML5、JavaScript、CSS3和小程序技术在构建高...
总的来说,"html5注意力游戏升级版"是一款结合了HTML5核心技术的趣味游戏,通过Canvas绘图、Web Storage管理、图片预加载、事件处理和CSS3动画,为玩家提供了一次愉快且富有挑战性的记忆训练体验。
6. **浏览器缓存和预加载策略**:书中讨论了浏览器缓存机制,如HTTP缓存头、本地存储(localStorage和sessionStorage)以及预加载和预解析技术,帮助开发者更好地利用这些特性提升用户体验。 7. **调试和性能分析**...
3. 使用jQuery监听事件,如点击“添加”按钮,触发函数获取输入框的值,并将其作为新的待办事项添加到页面和localStorage。 4. 对于已完成的待办事项,通过改变CSS类或更新DOM状态,并同步更新localStorage。 5. ...
这包括延迟加载(只在内容即将进入视口时加载)、预加载(预先加载部分数据,减少延迟感)以及智能加载(根据用户滚动速度和习惯调整加载策略)。 4. **数据缓存**:为了避免重复加载相同的数据,前端可以使用...
前端开发面试题解读 本文将详细解读前端开发面试题,涵盖浏览器工作原理、浏览器内核、COOKIE、SESSIONSTORAGE 和 ...可以使用图片懒加载、图片预加载技术、特殊编码的图像等方法优化图片加载,给用户更好的体验。