从需求谈起:在 MIP 页中异步加载数据

MIP(移动网页加速器)加速原理 除了靠谱的 MIP-Cache CDN 加速外,最值得一提的就是组件系统。所有 JS 交互都需要使用 MIP 组件实现,保证页面中所有 JS 都是最精简高效的,避免一个导航效果需要引用 jquery.js,bootstrap.js,bootstrap-some-nav.js 等多个 JS 实现。

诚然,“所有交互都要使用组件,或自己封装组件” 对于大部分开发者朋友来说,是有些不自由的。很多 MIP 开发者会有类似的疑问:

我想从服务器获取数据,渲染到页面上。是不是要自己封装 MIP 组件啦?

又或者:

推荐数据是实时计算的,并且有很多条,要做瀑布流加载效果,我的 JS 要怎么引入到页面里来?

这些合理合法的异步数据加载需求,MIP 都已经支持了,而且不需要写一行 JS 代码!

异步加载数据-通用解决方案

在直接将用法之前,先感性地认识一下异步加载数据的通用方案。虽然每个网站的后端请求地址不同,数据库操作方式不同。但大家的需求是相同的:

异步加载数据,并呈现在页面上。

为了实现这个效果,大家也不约而同地选择了类似方案:

  1. 发送一个异步请求获取 JSON 数据
  2. 根据返回的数据 status 确认请求是否有效
  3. 解析有效的 JSON 数据,拼接在 HTML 标签中插入文档

写成伪代码是这个样子的:

// 第一步:发送异步请求,获取数据
var data = 异步请求 ('https://m. 域名 .com/ 请求地址 ', ' 体育新闻 ',' 第一页数据 ');
// 第二步:解析数据,拼装 DOM
var 实际内容 = [];
if(data.status == ' 请求成功 ') {
for(var i in data. 新闻数组) {
var 单个新闻 = data. 新闻数组 [i];
var 实际内容 [i] = '<a href = 单个新闻 . 链接> 单个新闻 . 标题 </a>'
}
}
// 第三步:将拼装好的 DOM 插入到文档流
document.querySelector(' 新闻 wrapper').innerHTML(实际内容 .join(''));

上述步骤中,异步请求拼装,for 循环数据处理,最终 DOM 操作都是通用的,真正变化的只有以下三个变量:

  • 异步请求链接
  • 返回数据格式
  • 插入位置

MIP 组件非常贴心地将所有通用 JS 封装起来,露出几个配置接口,供开发者直接使用。由于应用场景和交互要求区别,共实现了两个组件:MIP 列表组件和 MIP 无限下拉。

推荐 1:异步数据 MIP 组件--列表组件

列表组件 名称为<mip-list>,可用于将页面中配置的 JSON 数据渲染到页面中,也可以发送异步请求,并拼装数据插入到页面中。通常用于可变化数据的显示,如天气信息,阅读量等。

用法如下(有所简略):

<mip-list src="https:// 后端异步请求地址 " preLoad>

    <!-- template 标签为 html 模板,不会显示。每条数据按照这个模板的格式插入页面 -->
<template type="mip-mustache">
<a href="{{数据中的链接}}">{{数据中的新闻标题}}</a>
</template> </mip-list> <!-- mip-list 组件执行依赖以下两个 JS -->
<script src="https://c.mipcdn.com/static/v1/mip-list/mip-list.js"></script>
<script src="https://c.mipcdn.com/static/v1/mip-mustache/mip-mustache.js"></script>

配置服务器返回请求,对应的数据格式为:

{
"status": 0,
"data":
{
"items": [
{
" 数据中的链接 ": "https://a.xx.com/001",
" 数据中的新闻标题 ": "001_ 这是一个新闻标题 ",
},
{
" 数据中的链接 ": "https://a.xx.com/002",
" 数据中的新闻标题 ": "002_ 这是另一个新闻标题 ",
}
}
}

最终,mip-list 组件根据数据,拼装 DOM 插入页面,最终效果为:

<mip-list src="https:// 后端异步请求地址 " preLoad>
<template type="mip-mustache">
<a href="{{数据中的链接}}">{{数据中的新闻标题}}</a>
</template> <div class="mip-fill-content" role="list">
<!-- 开始:根据异步请求返回值,渲染出的 HTML -->
<a href="https://a.xx.com/001">001_ 这是一个新闻标题 </a>
<a href="https://a.xx.com/002">002_ 这是另一个新闻标题 </a>
<!-- 结束:根据异步请求返回值,渲染出的 HTML -->
</div>
</mip-list>

除了上文介绍的用法,<mip-list>列表组件支持渲染同步数据,点击加载更多等功能。可以参照 MIP 官网 mip-list 文档 说明来使用。

推荐 2:异步数据 MIP 组件--无限下拉

无限下拉 组件名称为<mip-infinitescroll>,当用户滚动到页面底部,或距离页面底部有一定距离时,自动发送异步请求获取更多数据,并插入页面。通常用于正文后的相关文章推荐,“你可能感兴趣” 栏目。

用法如下(有所简略):

<mip-infinitescroll data-src="https:// 后端异步请求地址 " template="myTemplate">

	<!-- template 标签为 html 模板,不会显示。每条数据按照这个模板的格式插入页面 -->
<template type="mip-mustache" id="myTemplate">
<a href="{{数据中的链接}}">{{数据中的新闻标题}}</a>
</template> <!-- mip-infinitescroll-results 是拼装完毕结果的插入位置 -->
<div class="mip-infinitescroll-results">
</div> </mip-infinitescroll> <!-- mip-infinitescroll 组件执行依赖以下两个 JS -->
<script src="https://c.mipcdn.com/static/v1/mip-infinitescroll/mip-infinitescroll.js"></script>
<script src="https://c.mipcdn.com/static/v1/mip-mustache/mip-mustache.js"></script>

配置服务器返回请求,对应的数据格式为:

{
"status": 0,
"data":
{
"items": [
{
" 数据中的链接 ": "https://a.xx.com/001",
" 数据中的新闻标题 ": "001_ 这是一个新闻标题 ",
},
{
" 数据中的链接 ": "https://a.xx.com/002",
" 数据中的新闻标题 ": "002_ 这是另一个新闻标题 ",
}
}
}

MIP 无限下拉会遍历 data.items 每条数据(Key-Value),根据 Key 查找槽位,将对应的 Value 渲染到页面.mip-infinitescroll-results中。最终的结果如下:

<mip-infinitescroll data-src="https:// 后端异步请求地址 " template="myTemplate">
<template type="mip-mustache" id="myTemplate">
<a href="{{数据中的链接}}">{{数据中的新闻标题}}</a>
</template>
<div class="mip-infinitescroll-results"> <!-- 开始:根据异步请求返回值,渲染出的 HTML -->
<a href="https://a.xx.com/001">001_ 这是一个新闻标题 </a>
<a href="https://a.xx.com/002">002_ 这是另一个新闻标题 </a>
<!-- 结束:根据异步请求返回值,渲染出的 HTML --> </div>
</mip-infinitescroll>

mip-infinitescroll 组件的具体使用方法见 MIP 官网-无限下拉,除了上述的用法,还支持个性化配置以下字段:

  • 每次插入到页面的结果条数
  • 插入页面的结果总条数
  • 异步请求服务器过期时间
  • “加载中……” 文案
  • “没有更多内容了 >o<” 文案

建议,讨论,参与开发

MIP 是开源的项目,欢迎各位开发者参与组件维护,共同优化千万站点使用的组件。

mip-list 的组件源码在 github/mip-list, mip-infinitescroll 的组件源码在 github/mip-infinitescroll, 可以通过 提交 PR 的方式直接参与开发,也可以 新建 Issue 提出建议。

MIP 组件哥,立正,鞠躬,在 MIP 前端技术 QQ 群(580967494)等你。

新手教程:不写JS,在MIP页中实现异步加载数据的更多相关文章

  1. highcharts.js两种数据绑定方式和异步加载数据的使用

    一,我们先来看看异步加载数据的写法(这是使用MVC的例子) 1>js写法 <script src="~/Scripts/jquery-2.1.4.min.js"> ...

  2. iScroll.js 向上滑动异步加载数据回弹问题

    iScroll是一款用于移动设备web开发的一款插件.像缩放.下拉刷新.滑动切换等移动应用上常见的一些效果都可以轻松实现. 现在最新版本是5.X,官网这里:http://iscrolljs.com/ ...

  3. 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案

    关于使用Iscroll.js异步加载数据后不能滑动到最底端,拉到最下边又弹回去的问题困扰了我老半天,相信很多朋友都遇到了.我刚好不小心解决了,和大家分享一下.由于各种忙,下边就直接上代码吧. (前提是 ...

  4. js如何使浏览器允许脚本异步加载

    js如何使浏览器允许脚本异步加载 如果脚本体积很大,下载和执行的时间就会很长,因此造成浏览器堵塞,用户会感觉到浏览器“卡死”了,没有任何响应.这显然是很不好的体验,所以浏览器允许脚本异步加载,下面就是 ...

  5. ExtJS入门教程05,grid的异步加载数据

    上一篇演示了extjs grid的基本用法,并加载了本地数据.今天我们将演示如何加载异步数据. 所谓异步,就是通过ajax的方式将服务器端的数据加载到我们的grid中.为了提供数据,我们先定义一个数据 ...

  6. js 窗口滚动到一定高度时加载数据

    <script type="text/javascript"> //当窗口滚动到一定高度时 某块页面开始加载数据 window.onload = function() ...

  7. js滚动异步加载数据的思路

    <body> <div style="width:200px; height:1000px; border:1px solid red;" id="to ...

  8. 异步加载数据——turn.js

    var tostore = GetQueryString("tostore"); var photo_id = GetQueryString("photo_id" ...

  9. 网页性能优化之异步加载js文件

    一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件.在谈异步加载之前,先来看看浏览器加载js文件的原理. 浏览器加载 JavaScript 脚本,主要通过<scri ...

随机推荐

  1. Java Spring Boot 上传文件和预览文件地址解析

    @RequestMapping(value ="/upload",method = RequestMethod.POST) @Permission(isAjax=false) pu ...

  2. Flask类的属性和方法大全

    Flask Property__class____dict____doc____module__app_ctx_globals_classconfig_classdebugdefault_config ...

  3. manifold tangent classifier

    The Manifold Tangent Classifier (MTC) Putting it all together, here is the high level summary of how ...

  4. vue项目 构建 打包 发布 三部曲

    一.vue项目的创建 1.首先第一肯定是要有Node.js及npm这个不多说了2.安装脚手架 此时可以直接浏览-但是现在肯定有很多小白想将他发布到gitHub上并可以浏览,使用vue全家桶制作自己的博 ...

  5. JDK1.8的新特性

    JAVA8新特性 接口改善 现在接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实 ...

  6. FPA笔记三 数据功能的识别

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://welkinhu.blog.51cto.com/447606/115477     ...

  7. Zookeeper学习

    http://www.cnblogs.com/caosiyang/archive/2012/11/09/2763190.html   http://www.cnblogs.com/haippy/tag ...

  8. Hibernate入门----配置文件

    一.Hibernate简介 hibernate是一个开源的,轻量级的,持久成ORM框架. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数 ...

  9. Tiny4412MMU内存管理

    MMU是Memory Management Unit的缩写,中文名是内存管理单元,MMU是由ARM芯片中的cp15协处理器管理,它的作用是负责虚拟内存到物理内存的映射 要将虚拟内存映射为物理内存,就要 ...

  10. SSM-SpringMVC-15:SpringMVC中小论注解式开发之通配符篇

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 此处改了下标题,小论,为什么不说大话了呢?哎,质量不够啊,通配符篇提取不出更多可以讲的滔滔不绝的套路 通配符 ...