SPA页面初试】的更多相关文章

之前一直很好奇,SPA应用到底是怎么实现的,昨天无意间看到了有一篇介绍的文章,就想着来试一下水(以下根据我的理解所写,可能会让你看的云里雾里,如果想加深了解,最好先了解下window.location.hash是什么东西) 其实,SPA的原理就是,一开始将一些必要的页面都加载进来,当你在页面输入别的路由的时候,其实还是待在当前的页面,只不过是他识别出你想要去的地址,然后将那个页面的内容获取到,替代掉当前页面的内容,并且相应的改变url地址,这样给人看起来就好像到了另一个页面,实际上你还是在这个页…
背景: 单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用,它将所有的活动均局限于一个Web页面中:这就表示Web应用被加载出来之后,Web中所有的交互和跳转均不会与服务器发生交互,而是使用JS转换HTML中的内容. 实现的原理: 1. 使用 hashchange 可以检测路由的变化情况 2. 使用 location.hash 路由,然后根据路由选择需要渲染的页面内容 SPA Demo: <!DOCTYPE html> <h…
AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVVM.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 第一次接触angularjs大概是半年前开发一个微信公众号,就深深的被他的给种特性吸引,下面将介绍使用require+angularjs搭建一个大型单页面应用. 下面是项目结构: 下面看看index.html的结构: <!do…
场景,左图,又字段的布局 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/mui/mui.min.css"/> <style type="te…
部署到线上的步骤: 拿到打包之后的文件,删除服务器上的文件,再放上去的. 测试1: 更改js文件,删除并上传新包. 额外发现1:如果用户在上传期间,仍然在系统之内,此时即使将服务器上的包删除掉,用户不会跳出系统,只会在控制台上报错. 报错内容: 只是在报错服务器上没有指定的html文件 额外发现2: 已经被缓存了的页面html 刚进页面时会进行从服务器200取到,随后删除服务器的包,已经被缓存下来的html页面是可以正常操作的. 此时再上传新包,用户仍然在已经缓存的页面里,按照老系统正常跑.访问…
1. 快速启动 —— 极大提升加载速度(important) 快速启动应用,并行发起 Bundle 加载&拉取初始数据.相信大家已经发现了,SPA 初始化时候,不得不等待 bundle 返回并执行后,才会发起数据加载. 由于在移动设备上(即便有缓存)bundle 加载极为耗时,我们可以充分利用这段时间将数据进行预加载.这项特性,使得后面的优化起到更加明显的效果. 如下示例代码: // app.js Promise.all([load('bundle'), load('data')]) 2. 根据…
今天我们尝试创建一个默认的Blazor应用. 1.安装 .Net Core 3.0需要Visual Studio 2019 的支持. 安装.Net Core 3.0 预览版 SDK版本,注意预览版对应的VS版本,我这里安装的是v3.0.0-preview6. 一定要开启预览选项才能使用Net Core Preview,在工具> 选项>预览功能 中开启. 2.尝试创建项目 新建Asp.net Core Web 应用程序,项目名称:BlazorDemo 目前Blazor只能创建基于服务器端渲染的项…
关于热图 在网站分析行业中,网站热图能够很好的反应用户在网站的操作行为,具体分析用户的喜好,对网站进行针对性的优化,一个热图的例子(来源于ptengine) 上图中能很清晰的看到用户关注点在那,我们不关注产品中热图的功能如何,本篇文章就热图的实现做一下简单的分析和总结. 热图主流的实现方式 一般实现热图显示需要经过如下阶段: 获取网站页面 获取经过处理后的用户数据 绘制热图 本篇主要聚焦于阶段1来详细的介绍一下主流的在热图中获取网站页面的实现方式 使用iframe直接嵌入用户网站 抓取用户页面保…
- 了解spa页面跳转方式:(2种) spa: 单页跳转方式 开发(hash模式): https://www.baidu.com/#2313213 生产(h5利于seo): history.pushState('','','/test'); 只更改url,不会刷新,手动刷新后可能会404 npm install vue vue-router axios bootstrap - vue-router 1.创建vue-router实例 2.在vm里关联 3.手动访问, 链接后追加#/home 或 #…
前言 单页应用的优点在于一次载入全部页面资源,利用本地计算能力渲染页面.提高页面切换速度与用户体验.但缺点在于全部页面资源将被一次性下载完,此时封装出来的静态资源包体积较大,使得第一次打开SPA页面时候须要的载入时间较长. 在上一篇文章Angular2 单页应用一些优化总结 中提到的利用压缩.混淆.开启gzip传输后,我们成功将3.5兆的资源包压缩到350k.可是假设SPA应用的页面数进一步添加,100个甚至1000个页面的时候,还是无法避免巨大的首页资源包载入的问题. 所以350k的资源包是否…
前言 前端框架时代,为开发体验.效率与页面性能带来,非常大的革命.大家纷纷拿起一系列打包工具(webpack/parcel etc.),配合一系列加载器快速搭建起一个 SPA 页面. SPA 应用带来的好处非常明显: 提升页面切换体验 降低切换时间 易于部署&前后端分离 但是也带来一系列性能问题: 初始加载脚本较大 首屏空白时间较长 页面返回时,数据被动重新拉取 这些问题是使用 SPA 模式不可避免的,通过了解 SPA 加载运行过程,可以逐渐看清楚引起性能问题的根本原因,通过精细化应用加载,来解…
前言 前端框架时代,为开发体验.效率与页面性能带来,非常大的革命.大家纷纷拿起一系列打包工具(webpack/parcel etc.),配合一系列加载器快速搭建起一个 SPA 页面. SPA 应用带来的好处非常明显: 提升页面切换体验 降低切换时间 易于部署&前后端分离 但是也带来一系列性能问题: 初始加载脚本较大 首屏空白时间较长 页面返回时,数据被动重新拉取 这些问题是使用 SPA 模式不可避免的,通过了解 SPA 加载运行过程,可以逐渐看清楚引起性能问题的根本原因,通过精细化应用加载,来解…
同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击(可以参考我的这篇文章). SOP要求两个通讯地址的协议.域名.端口号必须相同,否则两个地址的通讯将被浏览器视为不安全的,并被block下来.比如“http页面”和“https页面”属于不同协议:“qq.com”.“www.qq.com”.“a.qq.com”都属于不同域名(或主机):“a.com”和“a.com:8000”属于不同端口…
一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多说,直接进入主题. 二.整体架构设计介绍 首先看下整个项目的架构设计图: 从上图可以看出整个项目的一个整体结构,接下来,我来详细介绍了项目的整体架构: 采用Asp.net Web API来实现REST 服务.这样的实现方式,已达到后端服务的公用.分别部署和更好地扩展.Web层依赖应用服务接口,并且使…
编者按:感谢 @小小小杜 投稿,原文链接Juglans' Blog.如果你也想体验 flow.ci 的自动化持续部署,来 http://flow.ci 首页提交申请,邀请码随后会发送到邮箱:) flow.ci是一个持续集成(CI)的saas服务平台,就是中国的Travis CI,作用是把你Github上的代码拉过来,通过容器技术自动化完成代码的构建.测试.交付和部署.整个对flow.ci使用下来的感受就是简单,对源码的侵入少,虽然也用了SPA页面,但是速度相当让人满意,连loading都看不见,…
同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击(可以参考我的这篇文章). SOP要求两个通讯地址的协议.域名.端口号必须相同,否则两个地址的通讯将被浏览器视为不安全的,并被block下来.比如“http页面”和“https页面”属于不同协议:“qq.com”.“www.qq.com”.“a.qq.com”都属于不同域名(或主机):“a.com”和“a.com:8000”属于不同端口…
非常多人都想.甚至曾使用HTML5开发跨平台App.而且想达到原生App的体验. 最后的结果都是无奈的放弃.HTML5貌似美好,但坑太多.想做到原生App的体验差点儿不可为. 也曾有过著名的facebook放弃HTML5改用原生做App的事件. 可是坑多不怕,就怕没人填. 本系列文章.就将我在开发中的各种HTML5的坑怎样解决.一一道给大家. HTML5的性能体验比原生差.体如今非常多方面.比方切页时白屏.Android上列表滚动不流畅.下拉刷新和上拉翻页卡顿. 尤其在低端Android手机上,…
React 同构 搬运 https://segmentfault.com/a/1190000004671209 究竟什么是同构呢? 同构就是希望前端 后端都使用同一套逻辑 同一套代码 Nodejs出现后 这一设计方式的实现更加容易了 后端同样可以根据路径来加载js文件渲染指定的页面 而React又拥有renderToString 以及 renderToStaticMarkup方法 可以将react组建渲染成html字串 renderToString VS renderToStaticMarkup…
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多说,直接进入主题. 二.整体架构设计介绍 首先看下整个项目的架构设计图: 从上图可以看出整个项目的一个整体结构,接下来,我来详细介绍了项目的整体架构: 采用Asp.net Web API来实现REST 服务.这样的实现方式,已达到后端服务的公用.分别部署和更好…
窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟.我们首先来看第一个问题,如何避免切页白屏. 浏览器的页面在切换时,由于其页面加载机制,在跳转到下一个页面时,先要请求联网.载入页面代码.构建dom.渲染,最后才显示出来.在最终结果渲染完毕前,会出现几十毫秒甚至数秒的白屏.原生App是没有这个问题的.虽然使用SPA单页应用模型,即ajax+div切…
引言 使用webpack有一段时间了,对其中的热更新的大概理解是:对某个模块做了修改,页面只做局部更新而不需要刷新整个页面来进行更新.这样就能节省因为整个页面刷新所产生开销的时间,模块热加载加快了开发的速度.具体效果可以先看下下图的效果: 可是最近,亲自搭建一个webpack应用项目时,在实现开发环境的模块热更新时,遇到这样那样的问题.由于之前都是使用第三方插件来实现应用的热更新,它们都封装了实现热更新的一些细节,导致在不用第三方插件实现模块热更新时出现问题,其实还是理解的不够深入.于是在搞明白…
作者:威威(沪江前端开发工程师) 本文原创,转载请注明作者及出处. 背景 最近, 产品同学一如往常笑嘻嘻的递来需求文档, 纵使内心万般拒绝, 身体倒是很诚实. 接过需求,好在需求不复杂, 简单构思 后决定用Vue, 得心应手. 切好图, 挽起袖子准备撸代码的时候, SEO同学不知何时已经站到了背后. "听说你要用Vue?" "恩..." "SEO考虑了吗?整个SPA出来,网页的SEO咋办?" "奥..." 换以前, 估计只能无…
前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如ramda,lodash等等,后台服务估计会使用### fastify 这个库,目测非常方便,尝试尝试. 基础只是还是以官方文档为主,尝试过程中如果有什么问题可以留言,看到会回复,文章如有错误,欢迎指正. 预处理器的使用 安装需要的loader后指定lang就可以直接使用. npm i less l…
最近又把vue的demo拿出来整理下,正好要做"微信分享"功能,于是遇到新的问题: 由于hash模式下,带有"#",导致微信分享的签证无效:当改成history的模式后,分享ok: 但是问题来了,history模式下相当操蛋: 刷新页面,页面报错404:这不是扯犊子吗?[不过这个问题,可以在后台解决,这里就不说了] assets下的img文件,引入路径失败: 对于上面的问题,我是直接不能忍啊,所以history模式是肯定不行的:我决定依旧用hash模式:histor…
写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. vuejs是一个优秀的前端mvvm框架,它的易用性和渐进式的理念可以使每一个前端开发人员感到舒服,感到easy.它内部的实现机制值得让我们深究,比如obServer的实现原理,为什么vue能够实现组件化等等,我们需要理解它内部的运行机制,代码结构,这样才能更深入的理解vue的优秀之处,能更好的贴合业务实际写出更恰当的代码. 说明: 在展开本章之前,博主需要对自己看的源码文件进行一个简短的说明: 博主最终选择首先阅…
由于项目要做seo优化,而用vue写成的spa页面谷歌浏览器等是抓取不到数据的.介于ssr和预渲染来说,后者相对来说要简单许多.所以采用了预渲染方式.采用插件prerender-spa-plugin使用 第一步:修改配置文件webpack.prod.conf.js 在 const webpackConfig = merge(baseWebpackConfig, {plugins: [ new webpack.DefinePlugin({ new PrerenderSpaPlugin(// Req…
前言 JavaScript(后面统称JS)在过去五年得到飞速地增长,早期JS实现类似微博的“点赞”这样的功能都需要刷新一次页面. 后来开发者通过JS来制作SPA(单页面应用程序),在浏览器加载一次,后续视图都是通过JS动态生成的.webpack技术出现,解决了SPA页面加载过慢的问题,提升了性能与用户体验(但我觉得是因为4G和1M+宽带的普及). 尽管JS最初是一门弱类型浏览器语言,但现在,在互联网各个领域都大展身手:毫无疑问JS已经成为一门一流的编程语言. 最近我看到斯坦福大学做的一份JS现状…
一.介绍及安装 1.1 介绍 Moment.js是一个优秀的JavaScript 日期处理类库. 如果没有Moment.js之类的日期处理库,我们如果需要获得格式化后的日期.往往需要通过new Date().getMonth()...之类方法进行拼接, 或者使用JQ封装的函数. 但现在但SPA页面不怎么使用JQ.所以掌握靠谱的Moment.js还是很有必要的 举个小小例子: 请听题: 通过原生js和moment.js分别获取moment().format('YYYY-MM-DD HH:mm:ss…
之前写的Vue项目,有个问题困扰了好久.新闻板块有推荐.精华.最新等几个Tab,设想通过切换Tab,改变路由参数(get/news/:tab)去获取对应数据,然后渲染到页面(用的是同一套组件),问题来了:当切换Tab时,数据并没有更新,后来看了Vue-router官网,有这么一句话:提醒一下,当使用路由参数时,例如从 /user/foo 导航到 user/bar,原来的组件实例会被复用.因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效.不过,这也意味着组件的生命周期钩子不会再被调用…
窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟.我们首先来看第一个问题,如何避免切页白屏. 浏览器的页面在切换时,由于其页面加载机制,在跳转到下一个页面时,先要请求联网.载入页面代码.构建dom.渲染,最后才显示出来.在最终结果渲染完毕前,会出现几十毫秒甚至数秒的白屏.原生App是没有这个问题的.虽然使用SPA单页应用模型,即ajax+div切…