最佳实践
无论您是直接为 Kibana 仓库开发代码还是构建自己的插件,请考虑这些最佳实践。它们旨在支持我们的 Kibana 开发原则。
您是否在规划时考虑了可扩展性?
考虑包含许多字段的数据
考虑包含高基数字段的数据
考虑跨越很长时间范围的大型数据集
您是否在浏览器中加载了最少量的 JS 代码?
- 有关更多指导,请参阅 保持 Kibana 快速。
您是否向服务器发出大量请求?
- 如果是,您是否考虑过使用流式 bfetch 服务?
您是否知道 Kibana 公开发表声明,承诺为残疾人士创建可访问的产品? 我们确实这样做了! 我们所有的应用程序都具有可访问性非常重要。
- 了解 EUI 如何解决可访问性问题
- 如果您不使用 EUI,请遵循相同的 EUI 可访问性标准
Kibana 已翻译成其他语言。 使用我们的 i18n 实用程序,以确保您的面向公众的字符串将被翻译,以确保所有 Kibana 应用程序都已本地化。
- 阅读并遵守我们的 i18n 指南
- 熟悉我们的 风格指南(使用 Typescript!)
- 在 平台上 编写所有新代码,并遵循 约定。
- 始终 使用
SavedObjectClient
来读取和写入保存对象。 - 将
README
添加到您的所有插件和服务。 - 使您的公共 API 尽可能小。您将需要维护它们,并在对其进行任何更改时考虑向后兼容性。
- 将 EUI 用于所有基本 UI 组件,以创建一致的 UI 体验。
过度重构本身可能是一个问题,但了解现有的服务并在有意义时使用它们仍然很重要。我们有面向服务的团队,致力于为我们的解决方案开发人员提供迭代更快所需的工具。他们会处理细节,因此您可以专注于针对特定问题领域的创造性解决方案。 您应该考虑的一些常见服务示例
-
-
- 使用
esSearchStrategy
对 ES 进行原始查询,这将支持异步搜索和部分结果,以及注入正确的高级设置,例如是否包含冻结索引。
- 使用
-
-
- 在您的应用程序中渲染地图、可视化、仪表板
- 注册可以添加到仪表板或 Canvas 工作区或在另一个插件中渲染的新小部件。
-
- 让其他插件将功能注入到您的应用程序中
- 将自定义功能注入到其他插件中
无状态辅助实用程序
状态同步 和
状态容器 实用程序由
kibana_utils 提供,如果您想将您的应用程序状态同步到 URL?
- kibana_react 用于特定于 react 的助手
从每个解决方案来看,重新使用这些服务将有助于在 Kibana 中创建一致的体验。
最终,我们希望向我们的插件开发人员保证,他们的插件不会因次要版本而中断。
每次您创建或更改公共 API 时,请记住这一点,并考虑潜在的向后兼容性问题。虽然我们有一个正式的保存对象迁移系统,并且正在努力添加一个正式的状态迁移系统,但在次要版本中引入状态更改和迁移总是存在风险。在进行次要版本中进行巨大且有风险的更改尤其是保存对象之前,请考虑这一点。
- 您是否正在从注册表中持久化状态? 考虑如果实现的作者更改了他们的接口会发生什么。
- 您是否正在向注册表添加实现? 考虑到可能有人在持久化您的数据,并且更改您的公共接口可能会破坏他们的代码。
更改保存对象或可持久化数据的形状时要非常小心。
从过去的 Kibana 版本导出的保存对象应继续工作。 此外,如果用户依赖于作为您的公共合同的一部分存储在您应用程序 URL 中的状态,请记住您可能还需要为书签 URL 提供向后兼容性。
Kibana 平台提供了一组工具,以帮助开发人员围绕路由和浏览器导航构建一致的体验。 其中一些工具位于 core
中,另一些工具作为各种插件的一部分提供。
请遵循本指南,以了解可用工具和处理路由和浏览器导航的常用方法。
复习