目录
什么是 Fluent API?
性能怎么样?
首页 web前端 js教程 JavaScript:掌握流畅 API 的艺术

JavaScript:掌握流畅 API 的艺术

Sep 04, 2023 am 08:09 AM

在设计 Babylon.js v2.0 时 (a 用于在网络上构建 3D 的库),我最近发现自己希望更多 API流畅——也就是说,我希望社区能够更容易地阅读, 理解并以工作为基础,同时花更少的时间在技术文档上。

在本教程中,我将介绍流畅的 API:要考虑什么、如何 编写它们,以及跨浏览器性能影响。

什么是 Fluent API?

JavaScript:掌握流畅 API 的艺术

流畅的 API,正如这篇 Wikipedia 文章所述,是 面向对象的 API,旨在提供更具可读性的代码。 JQuery 是一个很好的例子,展示了流畅的 API 可以让您做什么:

 $('<div></div>')

     .html("Fluent API are cool!")

     .addClass("header")

     .appendTo("body");
登录后复制

流畅的 API 可让您进行链接 通过返回此对象来调用函数。

我们可以轻松创建一个 流畅的 API 像这样:

var MyClass = function(a) {

    this.a = a;

}



MyClass.prototype.foo = function(b) {

    // Do some complex work   

    this.a += Math.cos(b);

    return this;

}
登录后复制

正如你所看到的,技巧 只是返回 this 对象(引用当前实例 在本例中)以允许链继续。

如果您不知道 “this”关键字在 JavaScript 中的工作原理,我建议阅读这篇很棒的文章 文章作者:迈克·韦斯特

然后我们可以链式调用:

var obj = new MyClass(5);

obj.foo(1).foo(2).foo(3);
登录后复制

在尝试执行以下操作之前 与 Babylon.js 相同,我想确保这不会生成一些 性能问题。

性能怎么样?

所以我做了一个基准测试!

var count = 10000000;



var MyClass = function(a) {

    this.a = a;

}



MyClass.prototype.foo = function(b) {

    // Do some complex work   

    this.a += Math.cos(b);

    return this;

}



MyClass.prototype.foo2 = function (b) {

    // Do some complex work   

    this.a += Math.cos(b);

}



var start = new Date().getTime();

var obj = new MyClass(5);

obj.foo(1).foo(2).foo(3);

for (var index = 0; index < count; index++) {

    obj.foo(1).foo(2).foo(3);

}

var end = new Date().getTime();



var start2 = new Date().getTime();

var obj2 = new MyClass(5);

for (var index = 0; index < count; index++) {

    obj2.foo2(1);

    obj2.foo2(2);

    obj2.foo2(3);

}

var end2 = new Date().getTime();



var div = document.getElementById("results");



div.innerHTML += obj.a + ": With return this: " + (end - start) + "ms<BR>";

div.innerHTML += obj2.a + ": Without return this: " + (end2 - start2) + "ms";
登录后复制

作为 您可以看到,foofoo2 执行完全相同的操作。唯一的 区别在于 foo 可以链接,而 foo2 则不能。

显然是调用链 之间的不同之处在于:

obj.foo(1).foo(2).foo(3);
登录后复制

obj2.foo2(1);

obj2.foo2(2);

obj2.foo2(3);
登录后复制

鉴于此代码,我运行了它 在 Chrome、Firefox 和 IE 上确定我是否需要关注 性能。

JavaScript:掌握流畅 API 的艺术

这是结果 我得到:

  • Chrome 上,常规 API 比 Fluent API 慢 6%
  • Firefox 上, 两个 API 的运行速度几乎相同(Fluent API 慢 1%)。
  • IE上, 两个 API 的运行速度几乎相同(Fluent API 慢 2%)。

问题是我在函数 (Math.cos) 中添加了一个操作 模拟函数所做的某种处理。

如果我删除所有内容 只需保留 return 语句,在所有浏览器上都没有 差异(实际上 10,000,000 次尝试只有一到两毫秒)。你 可以跨浏览器亲自测试一下。如果您没有 设备方便,dev.modern.IE 上有很多免费工具。只是不要对虚拟机进行性能测试 针对真实设备。

所以我的结论是: 加油!

流畅的 API 很棒 - 它会生成更可读的代码,并且您可以使用它而不会出现任何问题或性能损失!

更多实践 JavaScript

这可能会让你有点惊讶,但是微软 有很多关于许多开源 JavaScript 主题的免费学习内容,我们正在 随着 Microsoft Edge 的到来,我们的使命是创造更多东西。看看我自己的:

  • 使用 HTML5 和 WebGL 3D 简介 巴比伦.JS
  • 使用以下命令构建单页应用程序 ASP.NET 和 AngularJS
  • HTML 中的尖端图形

或者我们团队的学习系列:

  • 实用的性能技巧,让您的 HTML/JavaScript Faster(由七部分组成的系列,从响应式设计到 休闲游戏到性能优化)
  • 现代网络平台快速入门(基础知识 HTML、CSS 和 JavaScript)
  • 开发通用 Windows 应用程序 HTML 和 JavaScript Jump Start(使用您已经创建的 JS 构建一个应用程序)

以及一些免费工具:Visual Studio Community、Azure Trial 以及适用于 Mac、Linux 或 Windows 的跨浏览器测试工具 Windows。

本文是网络开发技术的一部分 来自微软的系列。我们很高兴与您分享 Microsoft Edge 和新的 EdgeHTML 渲染引擎。免费 虚拟机或在 Mac、iOS、Android 或 Windows 设备上进行远程测试 @ http://dev.modern.ie/

以上是JavaScript:掌握流畅 API 的艺术的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
JavaScript引擎:比较实施 JavaScript引擎:比较实施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python vs. JavaScript:学习曲线和易用性 Python vs. JavaScript:学习曲线和易用性 Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

从C/C到JavaScript:所有工作方式 从C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在行动中:现实世界中的示例和项目 JavaScript在行动中:现实世界中的示例和项目 Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

了解JavaScript引擎:实施详细信息 了解JavaScript引擎:实施详细信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python vs. JavaScript:开发环境和工具 Python vs. JavaScript:开发环境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

See all articles