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.pswp.cn/news/535811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535811.shtml
英文地址,請注明出處:http://en.pswp.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…