小编par*_*sim的帖子

比eval更快的替代方案?

我正在处理一个使用本土模板系统的Web应用程序,该系统允许将Perl代码嵌入到HTML中.这些语句由模板解析器在运行时使用执行eval EXPR.

这非常灵活,但这些陈述遍布各地,并且执行得很多.eval EXPR(相反eval BLOCK)需要Perl每次启动解释器,我的分析显示它们是减速的一个相当重要的来源.

许多嵌入式Perl语句非常简单.例如,模板可能有这样的行:

<p>Welcome, <!--E: $user->query('name') -->.
Run Code Online (Sandbox Code Playgroud)

要么:

<p>Ticket number <!--E: $user->generate_ticket_number() --> has been generated.
Run Code Online (Sandbox Code Playgroud)

也就是说,他们只是调用对象方法.但是,也有更复杂的问题.

我希望能够优化这一点,到目前为止有两个想法,这两个想法都很糟糕.首先是重写所有模板替换标记一样简单的调用USER:NAMEUSER:GENERATETICKETNUMBER,其中解析器将然后扫描,并调用合适的对象方法.但是,我没有处理混合HTML和Perl的模板,而是使用混合HTML,Perl和令牌的模板.

第二个想法是尝试解析嵌入的Perl,弄清楚语句想要做什么,如果它足够简单,通过符号引用调用适当的对象方法.这显然是疯了.

我有什么逻辑解决方案可以忽略吗?

perl performance eval

11
推荐指数
1
解决办法
1118
查看次数

HTML5 画布椭圆中的 startAngle 是什么意思?

在绘制画布椭圆时,我惊讶地发现 'startAngle' 实际上似乎并未指定与椭圆原点的角度。如下面的代码片段所示,两个具有相同“startAngle”但半径值不同的椭圆在非常不同的位置开始它们的弧。

从原点开始测量,高椭圆似乎从 50 或 60 度角开始,而宽椭圆的角度看起来像 15 或 20 度。

那么“startAngle”究竟是什么?

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/ellipse

var c = document.getElementById("canvas");
var ctx = c.getContext("2d");

var startAngle = 0.5;
var endAngle = Math.PI * 2;

ctx.beginPath();
ctx.ellipse(70, 150, 50, 140, 0, startAngle, endAngle);
ctx.stroke();

ctx.beginPath();
ctx.ellipse(300, 150, 140, 50, 0, startAngle, endAngle);
ctx.stroke();
Run Code Online (Sandbox Code Playgroud)
<html>
<body>

<canvas id="canvas" width="500" height="300">

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

html javascript canvas

5
推荐指数
1
解决办法
311
查看次数

标签 统计

canvas ×1

eval ×1

html ×1

javascript ×1

performance ×1

perl ×1