MIP个性化组件提交规范

MIP个性化组件一般用来实现前后端数据传输或特殊的交互效果,由广大开发者贡献。出于性能、可维护性等方面的考虑,开发者在新增组件或升级组件时,请遵守以下规范。

规范中的必须(MUST),禁止(MUST NOT),应该(SHOULD),不应该(SHOULD NOT),建议(MAY),不建议(MAY NOT)关键词使用遵循TFC2119规范。

新增组件

速度&展现相关
1.1 不应该使用 jQuery(SHOULD NOT)

MIP是主要用在移动端,应该使用原生JS或Zepto。jQuery代码过于庞大冗余。如有特殊依赖,需在注释中说明。

define(function (require) {// 推荐var $ = require('zepto'); // 特殊情况:使用jQuery的xx特性,Zepto不支持var $ = require('jquery'); 
});
1.2 不应该使用外链JS (SHOULD NOT)

为了更好的页面性能,不建议以外链的方式引入JS。开发者本站维护的脚本必须封装为组件或AMD方式引入。广告,第三方统计等JS,请在代码注释中说明用途及服务提供商。未来会上线第三方JS引入机制,新机制上线后不允许引用更多外链JS。

1.3. 组件生命应该使用 firstInviewCallback(SHOULD)

为了首屏元素优先展示,加速页面显示速度。组件声明周期应该统一使用 firstInviewCallback。如有特殊情况需要使用其它声明周期,请在代码注释中说明。

// 推荐:组件进入首屏时加载
customElement.prototype.firstInviewCallback = function () {var ele = this.element;
};// build说明: 导航组件,在首屏展示,需要尽快加载
customElement.prototype.build = function () {var ele = this.element;
};
1.4 不应该提交重复功能组件 (SHOULD NOT)

应该使用官方组件,官方组件会测试各个常见浏览器兼容性。
第三方提供的通用服务(广告,统计,评论等其他网站也会用到的功能),不应该自己封装。请到GitHub提交issue,MIP项目组会联系通用服务提供方开发组件。

1.5 异步请求使用建议(MAY)

异步请求建议使用核心代码提供的 fetch 和 fetchJsonp,文档:https://www.mipengine.org/doc/3-widget/6-help/1-introduce.html

1.6 建议将非固定属性写入配置(MAY)

数字如果经常变化,可以作为配置写在组件属性中,在组件内部读取属性并使用。避免未来属性变化还需要升级组件。

// html: 在DOM中配置 data-target 变量
<mip-aa data-target="#id1"></mip-aa>// 组件JS:获取 data-target 变量用于后续逻辑
customElement.prototype.firstInviewCallback = function () {var _element = this.element;this.target = _element.getAttribute('data-target');
}
1.7 CSS样式,style标签建议和HTML,JavaScript分离(MAY)

为了分离JS,HTML和CSS,增强代码的可维护性,请不要在页面内使用内联style;建议在head中含有mip-custom属性的style标签内自定义样式。

1.8 不建议在循环中绑定事件(MAY NOT)

为了更好的页面性能,不建议循环绑定事件,建议使用官方方法将事件代理到element,文档:https://www.mipengine.org/doc/3-widget/6-help/1-introduce.html

// 不推荐
var list = document.querySelectorAll('.unorder li');
for(var i=0; i<list.length; i++) {list[i].addEventListener('click', clickHandler);
}// 推荐
var util = require('util');
var delegate = util.event.delegate(document, document.querySelectorAll('.unorder li'),'click',clickHandler);
1.9 不应该使用 document.writedocument.writeln(SHOULD NOT)

不应该使用严重影响页面性能的操作。

1.10 建议使用框架接口调用localStoragesessionStorage (MAY)

使用方式:https://www.mipengine.org/doc/3-widget/6-help/6-storage.html

1.11 MIP 组件操作应该遵循分离原则 (SHOULD)

当前组件 JS 脚本只为当前组件容器服务,不应该处理组件以外的 dom 和交互。

customElement.prototype.firstInviewCallback = function () {// 不应该这样使用, 全局选择var lists = document.querySelectorAll('li');// 推荐, 组件内选择var ele = this.element;var lists = ele.querySelectorAll('li');
}

代码维护相关

2.1 完整填写readme.md(MUST)

必须详细填写readme.md文件,说明组件用法、所需属性、注意事项等信息。方便其它开发者直接使用。

// 默认生成,不可直接提交
mip-xxx-xxx 组件说明// 内容太少,未说明清楚
mip-xxx-xxx// 优秀的组件说明
mip-carousel 用来支持 MIP 中图片展示,支持多图轮播。
2.2 命名符合规范(MUST)

组件命名规则:mip-站点域名-功能,尽量简洁。 如mip-mipengine-search

2.3 package.json 描述不全(SHOULD)

在package.json中的description字段中应该添加详细描述:组件功能,当前版本号,组件维护者联系方式。

MIP业务相关
3.1 新增组件应该使用MIP组件平台提交(SHOULD)

新增个性化组件,请确认符合 FECS 规范后,在组件平台提交(使用文档)或在 GitHub/mip-extensions-platform 提交PR. GitHub/mip-extensions仓库仅提交通用的组件。

3.2 前后端通信,服务器地址必须支持HTTPS(MUST)

由于MIP页会在百度搜索结果页的HTTPS环境打开。组件与服务器的数据请求,必须支持https://。但<mip-img> 的src不强制要求HTTPS,在组件代码中有转换逻辑。

3.3 MIP页面使用JS跳转,跳转操作必须使用window.top.location.href=”“(MUST)

由于MIP页会在百度搜索结果页以iframe内嵌形式打开,跳转链接需要使用window.top.location.href来修改iframe外层URL。

升级组件
4.1 旧组件不符合以上规则处理办法(MUST)

已上线组件可以继续使用,但升级组件必须按照上述规则执行,升级组件代码时必须确认修改后代码符合上述规则。

4.2 组件升级改版本号(MAY)

组件升级,为了表明便于维护区分,建议修改package.json中的组件version版本号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jar包在Hadoop集群上测试(MapReduce)

本片使用MapReduce——统计输出给定的文本文档每一个单词出现的总次数的案例进行&#xff0c;jar包在集群上测试 1、添加打包插件依赖 <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.2</versio…

代码实现——MapReduce实现Hadoop序列化

简单介绍 1、什么是序列化 序列化&#xff1a;把内存中的对象&#xff0c;转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化&#xff1a;将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据&#xff0c;转换成内存中的对象。 2、 为…

日常问题——hadoop启动后发现namenode没有启动,但是排除了格式化过度的问题

hadoop启动后发现namenode没有启动&#xff0c;网上说的格式化过度的问题我是没有的&#xff0c;因为我只格式化过一次。之后查看日志 vim /opt/hadoop/logs/namenode对应的log文件 发现 2020-03-03 23:16:21,868 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Na…

Zookeeper3.6.1常用的Shell命令

1、客户端连接 zkCli.sh zkCli.sh -server host:port2、显示节点信息 -s状态 -w监听器 -R递归 ls [-s] [-w] [-R] path3、创建节点 -s加序列号 -e临时节点 create [-s] [-e] path [data]4、获取节点值 -s状态 -w监听器 get [-s] [-w] path5、设置节点值 -s状态 set [-s] […

CentOS7下MySQL5.7的安装

1、下载MySQL 安装包&#xff1a; wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmyum -y localinstall mysql57-community-release-el7-11.noarch.rpm 2、在线安装MySQL yum -y install mysql-community-server 3、启动mysql 服务 systemct…

CentOS7下Hive的安装配置

0、安装前提 安装配置jdk与hadoop安装配置好mysql 1、下载上传 下载hive&#xff0c;地址:http://mirror.bit.edu.cn/apache/hive/上传到指定位置scp apache-hive-3.1.2-bin.tar.gz rootCarlota1:/usr/local/apps 2、解压安装 tar -zxvf apache-hive-3.1.2-bin.tar.gzmv a…

Hive常用的操作命令

Hive常用的交互命令 hive 进入数据库hive -e 不进入hive的交互窗口执行sql语句hive -f 执行sql脚本hive -help 查看帮助 Hive常用数据库的操作命令 show databases;查看hive中的所有数据库use default;用default数据库create database myhive ;创建数据库create database if…

Hive常见的属性配置

配置文件 默认配置文件&#xff1a;hive-default.xml 用户自定义配置文件&#xff1a;hive-site.xml 用户自定义配置会覆盖默认配置。另外&#xff0c;Hive也会读入Hadoop的配置&#xff0c;因为Hive是作为Hadoop的客户端启动的&#xff0c;Hive的配置会覆盖Hadoop的配置。配…

什么是集群(cluster)

1、集群 1.1 什么是集群 简单的说&#xff0c;集群(cluster)就是一组计算机&#xff0c;它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是&#xff0c;用户从来不会意识到集群系统底层的节点&#xff0c;在他/她们看来&am…

Kafka:集群部署

0、环境准备 安装jdk&#xff0c;配置环境提前安装zookeeper 1、解压安装 将tar压缩包上传tar -zxvf kafka_2.12-2.5.0.tgz 2、配置变量环境 vi /etc/profile #kafka export KAFKA_HOME/usr/local/apps/kafka_2.12-2.5.0 export PATH$PATH:$KAFKA_HOME/binsource /etc/pr…

集群(cluster)amp;高可用性(HA)概念

1.1 什么是集群 简单的说&#xff0c;集群&#xff08;cluster&#xff09;就是一组计算机&#xff0c;它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点&#xff08;node&#xff09;。一个理想的集群是&#xff0c;用户从来不会意识到集群系…

Kafka:常用命令

启动Kafka&#xff1a;kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties创建一个叫test的话题&#xff0c;有两个分区&#xff0c;每个分区3个副本&#xff1a;kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 …

MySQL Cluster 群集安装环境介绍

MySQL Cluster 群集安装环境介绍 MySQL 群集支持的操作系统:* Linux (Red Hat, Novell/SUSE) * Sun Solaris * IBM AIX * HP-UX * Mac OS X MySQL 软件:* MySQL Max 版本 (並不是指 MaxDB)* MySQL NDB Cluster 系统最低需求&#xff1a; OS&#xff1a; Linux ( Turbolinux…

八股文打卡day9——计算机网络(9)

面试题&#xff1a;HTTP1.0和HTTP1.1的区别&#xff1f; 我的回答&#xff1a; 1.长连接&#xff1a;HTTP1.1引入了长连接的机制&#xff0c;connection&#xff1a;keep-alive。一个TCP连接可以进行多次请求和响应。而HTTP1.0每次请求响应一次都得建立连接、断开连接。 引入…

使用ogg实现oracle到kafka的增量数据实时同步

Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件&#xff0c;它通过解析源数据库在线日志或归档日志获得数据的增量变化&#xff0c;再将这些变化应用到目标数据库&#xff0c;从而实现源数据库与目标数据库同步。 0、本篇中源端和目标端的一些配置信息&#xf…

转载:35岁前成功的12条黄金法则

习惯的力量是惊人的。习惯能载着你走向成功&#xff0c;也能驮着你滑向失败。如何选择&#xff0c;完全取决于你自己。 1.习惯的力量&#xff1a;35岁以前养成好习惯 你想成功吗&#xff1f;那就及早培养有利于成功的好习惯。 习惯的力量是惊人的&#xff0c;35岁…

JDK源码解析之 Java.lang.Object

Object类是Java中其他所有类的祖先&#xff0c;没有Object类Java面向对象无从谈起。作为其他所有类的基类&#xff0c;Object具有哪些属性和行为&#xff0c;是Java语言设计背后的思维体现。 Object类位于java.lang包中&#xff0c;java.lang包包含着Java最基础和核心的类&…

将z-blog改成英文blog所遇到的问题

1.将z-blog中文章日期中的“年,月,日”改成英文 相关模板:b_article-multi.htmlb_article-single.html默认用的时间标签是<#article/posttime/longdate#> 即 "2007年1月13日" 这样的形式你可以换成 <#article/posttime/shortdate#>即 "2…

JDK源码解析之 Java.lang.String

String 类代表字符串。Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作为此类的实例实现。 字符串是常量&#xff1b;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的&#xff0c;所以可以共享。 一、类定义 p…

看到一个blog的标语,有意思!

"上世纪80年代勇气&#xff0c;90年代靠关系&#xff0c;现在必须靠知识能力&#xff01;挣钱靠1、兴趣广泛&#xff1b; 2、感觉敏锐&#xff1b; 3、集中力强&#xff1b; 4、个性不脆弱&#xff08;坚韧性&#xff09;&#xff1b; 5、能在瞬间了解因果关系&#xff1b…