perf: 优化变量页面刷新性能

This commit is contained in:
2248356998 qq.com
2025-10-16 18:15:42 +08:00
parent 9c230c2da9
commit aa1ce08c02
4 changed files with 27 additions and 39 deletions

View File

@@ -1,18 +0,0 @@
//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权除特别声明外的代码归作者本人Diego所有
// 源代码使用协议遵循本仓库的开源协议及附加协议
// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
// 使用文档https://thingsgateway.cn/
// QQ群605534569
//------------------------------------------------------------------------------
namespace ThingsGateway.Gateway.Razor;
public readonly struct CellValue
{
public readonly string Field { get; }
public readonly string Value { get; }
public CellValue(string f, string v) { Field = f; Value = v; }
}

View File

@@ -179,7 +179,7 @@ public partial class VariableRow
}
else
{
return FixedCellClassStringCache.GetOrAdd(col, col => CssBuilder.Default(col.GetFieldName())
return FixedCellClassStringCache.GetOrAdd(col, col => CssBuilder.Default()
.AddClass("fixed", col.Fixed)
.AddClass("fixed-right", col.Fixed && IsTail(col))
.AddClass("fr", IsLastColumn(col))

View File

@@ -87,22 +87,25 @@ public partial class VariableRuntimeInfo
private ITableColumn[] _cachedFields = Array.Empty<ITableColumn>();
[JSInvokable]
public List<CellValue> TriggerStateChanged(int rowIndex)
public List<List<string>> TriggerStateChanged()
{
try
{
if (table == null) return null;
var row = table.Rows[rowIndex];
List<List<string>> ret = new();
if (_cachedFields.Length == 0) _cachedFields = table.GetVisibleColumns.ToArray();
var list = new List<CellValue>(_cachedFields.Length);
foreach (var col in _cachedFields)
foreach (var row in table.Rows)
{
var fieldName = col.GetFieldName();
list.Add(new(fieldName, VariableModelUtils.GetValue(row,fieldName)));
var list = new List<string>(_cachedFields.Length);
foreach (var col in _cachedFields)
{
var fieldName = col.GetFieldName();
list.Add(VariableModelUtils.GetValue(row, fieldName));
}
ret.Add(list);
}
return list;
return ret;
}
catch (Exception)

View File

@@ -1,8 +1,8 @@
export function init(id, invoke, options) {
function getCellByClass(row, className) {
// 直接用 querySelector 精确查找
return row.querySelector(`td.${className}`);
}
//function getCellByClass(row, className) {
// // 直接用 querySelector 精确查找
// return row.querySelector(`td.${className}`);
//}
var variableHandler = setInterval(async () => {
var admintable = document.getElementById(id);
@@ -19,24 +19,26 @@
clearInterval(variableHandler)
return;
}
var rowCount = table.rows.length;
var { method } = options;
var valss = await invoke.invokeMethodAsync(method);
if (valss == null) return;
for (let rowIndex = 0; rowIndex < valss.length; rowIndex++) {
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
const vals = valss[rowIndex];
if (vals == null) continue;
var row = table.rows[rowIndex];
if (!row) continue;
var vals = await invoke.invokeMethodAsync(method, rowIndex);
if (vals == null) continue;
for (let i = 0; i < vals.length; i++) {
const cellName = vals[i].field;
const cellValue = vals[i].value;
const cellValue = vals[i];
if (cellValue == null) continue;
var cell = getCellByClass(row, cellName)
//var cell = getCellByClass(row, cellName)
var cell = row.cells[i + 2]
if (!cell) continue;
@@ -81,12 +83,13 @@
// continue;
//}
//// 默认情况(普通单元格)
//getCellByClass(row, cellName).innerText = cellValue;
//cell.innerText = cellValue;
}
}
}
, 500) //1000ms刷新一次