doT.js,用过的都知道,渲染表格贼快。doT.js特点是快,小,无依赖其他插件。压缩版仅有4K大小。
这部分就是单纯的写在一个js标签中,看着上面的id,必须为ID。然后,在你需要布局的地方写下
var interText = doT.template($("#" + tmpName).text());
$("." + className).html(interText(res));
这样就能够渲染到界面上了,但dot里面没有排序,插件,搜索,就单单的渲染一个表格。
3. 同样的,用vue也做了一个表格渲染的模板,代码如下:
define(['Vue'], function(Vue){
Vue.component('tra-common',{
props:['it','list'],
template: `
交易申请表
所属产品
{{it.FundName}}
交易方式
{{it.TransactionMeans}}
证券名称
{{it.SecurityName}}
发行人性质
{{it.IssuerNature}}
发行期代码
{{it.IssuingCode||"--"}}
正式代码
{{it.SecurityCode||"--"}}
资产类别
{{it.AssetClass}}
主体评级
{{it.IssuerRating}}
债券属性
{{it.WindIndustry}}
债券评级
{{it.DebtRating||"--"}}
票面利率
{{it.CouponRate}}
存续期限
{{it.RemainTerm}}
发行规模(亿元)
{{it.IssueScale}}
买卖方向
{{it.TransactionDirection}}
预计交易时间
{{it.EstimatedTransactionTime}}
交易平台
{{it.TradingPlatform}}
预计交易价格(元)
{{it.TransactionPriceMin}}-{{it.TransactionPriceMax}}
预计交易规模(万元)
{{it.TransactionVolume}}
收益率
{{it.YtmMin}}-{{it.YtmMax}}
代持方式
{{it.AgreementMeans}}
其他需要载明的事项
{{it.Remarks}}
附件
{{list[0]}}
{{item.FileName }}
审核明细
审核人
{{item.Operator}}
审核时间
{{item.OperationTime}}
审核结果
{{item.AuditResult}}
审核意见
{{item.AuditOpinion}}
暂无审核意见
`
}),
Vue.component('fix-thead-table',{
props:['datatable'],
computed: {
col:function(){
return this.datatable.thead.length;
},
field:function(){
return this.datatable.fields;
},
thead:function(){
return this.datatable.thead;
},
tbody:function(){
return this.datatable.tbody
},
theadWidth:function (param) {
var Twidth=null;
$.each(this.datatable.thead,function(index,value){
if(value.width){
Twidth +=value.width.split('p')[0]-0+10;
}
})
return (Twidth+30)+"px"
}
},
beforeCreate:function() {
console.time("vue")
console.time("Updata-vue")
},
mounted:function () {
console.timeEnd("vue")
console.log(1)
},
updated() {
console.log(2)
console.timeEnd("Updata-vue")
},
template:`
{{item.title}}
//注意这里(第一种)↓
{{item.Category}}
{{item.FromLogin}}
{{item.Frequency}}
{{item.Percent}}
//注意这里↑
//注意这里(第二种)↓
{{item[i.field]}}
{{item[i.field]}}
//注意这里↑
`
})
})
这是一个公用组件,写的是一个固定表头的table,传入一个表格的基本数据,然后渲染出来。没什么大问题,原来设想的是做一个datatables组件一样的东西,传入一些基本的数据就可以,实现自定义的配置出一个表格。比如td的宽度,text-align,thead,link地址。后来说是第二种方法双层循环会不会渲染很慢?后来就展开了一系列表格性能检测,先顺便展示一下vue生成表格的核心方法。
var app = new Vue({
el:'#app',
data:{
datatable:[{
thead:[{
title:'功能分类',
align:'left',
field:'Category',
width:"110px",
link :'Url'
},
{
title:'登录跳转次数',
align:'right',
field:'FromLogin',
width:"90px",
},
{
title:'频次',
align:'right',
field:'Frequency',
width:"105px",
link :'CountLink'
},{
title:'百分比',
align:'right',
field:'Percent',
width:"120px"
}],
tbody:{},
height:'264px'
}],
tbody:{}
}]
},
beforeCreate() {
console.time("data")
},
mounted() {
console.timeEnd("data")
},
})
这里的title就是表格的头部显示。field就是第一种方法中我们循环的时候需要的字段。通过 {{item[i.field]}} {{item[i.field]}}
双层循环动态的生成td,这样我们只需要配置好一个表格的基本属性,就可以动态的生成不定列表格。同样双层循环渲染td也带来了很大的时间消耗。
beforeCreate:function() {
console.time("vue")
console.time("Updata-vue")
},
mounted:function () {
console.timeEnd("vue")
},
beforUpdata(){
console.time("Updata2")
},
updated() {
console.timeEnd("Updata-vue")
console.timeEnd("Updata2")
},
这里就是说创建组件到挂载成功,以及更新数据渲染成功,分别打印出时间。
可以看到当加载组件是vue:1.9 ms,然后更新完data以后,重新渲染表格Updata-vue:56.7ms.我们再来看看dot的渲染时间:
renderList: function (tmpName, className, res) {
return new Promise(function (resolve, reject) {
console.time("dot")
var interText = doT.template($("#" + tmpName).text());
$("." + className).html(interText(res));
$(".behaviorAnalysis").unblock();
resolve();
console.timeEnd("dot")
});
},
代码是上面的,运行结果:,
这不是偶然结果,我运行了很多次,vue在挂载组件的时候可能很快,但按照我这样写的双循环去渲染td的时候就是很消耗时间了。但请看到最后–>
//注意这里(第一种)↓ {{item.Category}} {{item.FromLogin}} {{item.Frequency}} {{item.Percent}} //注意这里↑