You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在TMS WEB Core中如何用Delphi调用performance.now()?

在TMS WEB Core Delphi中使用window.performance.now()计时

问题原因

TMS WEB Core生成的TJSPerformance类仅作为JS对象的类型标识,没有显式声明now方法,直接调用window.performance.now()会触发编译错误,但底层对应的JS原生对象是完整可用的,可通过以下两种方式调用该方法。

方法一:动态调用(快速实现)

利用Delphi对JS对象的动态访问特性,通过索引器调用now方法:

var
  t0, t1: Double;
begin
  t0 := TJSWindow(window).performance['now']();
  // 要计时的业务代码
  for var i := 0 to 99999 do
  begin
    // 示例执行代码
  end;
  t1 := TJSWindow(window).performance['now']();
  console.log(Format('循环执行耗时: %.2f 毫秒', [t1 - t0]));
end;

这种方式无需额外声明,直接借助JS对象的动态特性调用原生方法。

方法二:扩展TJSPerformance类(获得IDE代码补全)

如果希望IDE提供代码补全提示,可以在自定义单元中扩展TJSPerformance类,显式声明now方法:

unit MyWebExtensions;

interface

uses
  Web;

type
  TJSPerformance = class(TJSObject)
  public
    function now: Double; overload;
    function now(originTime: Double): Double; overload; // 对应JS可选参数的重载
  end;

implementation

function TJSPerformance.now: Double;
begin
  Result := Self['now']();
end;

function TJSPerformance.now(originTime: Double): Double;
begin
  Result := Self['now'](originTime);
end;

end.

之后在需要使用的单元中引用MyWebExtensions,即可像JS中一样直接调用:

var
  t0, t1: Double;
begin
  t0 := window.performance.now;
  // 计时业务代码
  t1 := window.performance.now;
  console.log(Format('执行耗时: %.2f 毫秒', [t1 - t0]));
end;

备选方案:使用TMS内置计时工具

如果不需要严格依赖performance.now()的高精度,也可以用Date.now()的Delphi版本实现计时:

var
  t0, t1: Int64;
begin
  t0 := TJSDate.New.now;
  // 计时业务代码
  t1 := TJSDate.New.now;
  console.log(Format('执行耗时: %.2f 毫秒', [(t1 - t0)]));
end;

注意:performance.now()的计时精度比Date.now()更高,适合微秒级的精细计时场景。

内容的提问来源于stack exchange,提问作者Shaun Roselt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:43:24