1. 前言
今天遇到一个特别难整的问题, 在执行npm run a_task
出错, 报错信息特别简单, 对于查找问题没有任何帮助. 尝试过几种方法来定位问题, 收效很差, 最后不得不祭出npm的大杀器npm debug来一探究竟.
今天遇到一个特别难整的问题, 在执行npm run a_task
出错, 报错信息特别简单, 对于查找问题没有任何帮助. 尝试过几种方法来定位问题, 收效很差, 最后不得不祭出npm的大杀器npm debug来一探究竟.
使用mat-paginator在Angular mat表中进行服务器端分页
在上一篇文章中,我们学习了如何使用 Angular 添加客户端分页。mat-tablemat-paginator
在客户端分页中,我们将从服务器一次获取所有记录并使用 mat-paginator 组件应用分页。
但是,如果我们的数据量很大,即记录数量较多,那么应用客户端分页并不是一个好主意。
这可能会导致严重的性能影响。
在这种情况下,我们将在 Angular mat-table 中实现服务器端分页。
Service Worker 增强了传统的 Web 部署模型,并使应用程序能够提供与 Native application 相当的可靠性,性能和用户体验。将服务工作进程添加到 Angular 应用程序是将应用程序转换为渐进式 Web 应用程序(也称为 PWA)的步骤之一。
简单来说,Service worker 是在 Web 浏览器中运行并管理应用程序缓存的脚本。
Service worker 充当网络代理。它们拦截应用程序发出的所有 HTTP 请求,并可以选择如何响应这些请求。例如,他们可以查询本地缓存并提供缓存的响应(如果有)。代理不仅限于通过编程 API 发出的请求,例如 fetch;它还包括 HTML 中引用的资源,甚至是对 index.html 的初始请求。因此,基于 Service worker 的缓存是完全可编程的,不依赖于服务器指定的缓存标头。
与组成应用程序的其他脚本(如 Angular application bundle)不同,服务工作进程在用户关闭选项卡后仍然保留。下次浏览器加载应用程序时,Service worker 首先加载,并且可以截获每个资源请求以加载应用程序。如果服务工作进程被设计为这样做,它可以完全满足应用程序的加载,而无需网络。
即使在快速可靠的网络中,往返延迟也会在加载应用程序时引入明显的延迟。使用服务工作进程来减少对网络的依赖可以显著改善用户体验。
尽管 Angular Universal 项目的目标是能够在服务器上无缝渲染 Angular 应用程序,但您应该考虑一些不一致之处。首先,服务器和浏览器环境之间存在明显的差异。在服务器上渲染时,应用程序处于短暂或“快照”状态。应用程序被完全渲染一次,返回完整的 HTML,而整个过程中的产生的状态被销毁,直到下一次渲染开始, 再重新计算这些状态。接下来,服务器环境本质上不具有与浏览器相同的功能(也有可能服务器拥有而浏览器没有的功能)。例如,服务器没有任何 cookie 的概念。您可以将此功能和其他功能 polyfill,但没有完美的解决方案来弥合这种差异。在后面的部分中,我们将介绍潜在的缓解措施,以减少在服务器上渲染时的错误机会。
还请注意 SSR 的目标:提高应用程序的初始渲染时间。这意味着,应该避免或充分防范任何可能在初始渲染中降低应用程序速度的情况。同样,我们将在后面的部分中回顾如何实现这一点。
\dist\demo-web\browser...ReferenceError: Image is not defined
当初选择将应用做成 SPA(单页应用)的时候主要是觉得用户体验非常丝滑, 当时也知道 SPA 很难做 SEO, 还是毅然决然的选择做成 SPA 应用. 当时还是 Angularjs 1.X 的时候, 就觉得 Angular 的理念跟自己对前端的看法特别契合, 后来将框架升级到 Angular 11 继而 13, 虽然费了很多时间和精力, 但是收获非常多, 由于本文的重点是 SSR 与 prerendering,所以这里不赘述原因了. 之前也了解到 Angular Universal 是做服务器端渲染的套件(SSR), 乘最近有空刚好将其引入到项目. 实现地过程中虽然遇到问题, 但是还是有些小兴奋的感觉, 一来解决了首次访问应用时白屏的问题, 二来将当初打算舍弃的 SEO 能力也找了回来, 而且整个对引入 SSR 实现 SEO 的过程还是相当轻松的, 特写此文, 以防遗忘, 也希望给后来者有所帮助.
这是一篇很好的关于从零开始创建App的建议的文章, 作者的结构和思路非常清晰, 一个很好的关于创建App的结构性的建议文章. 所以我们将其翻译成中文, 期望读者能进一步以此为蓝本将创建App的想法,思路,建议丰富起来. 同时这也是我们后续编写关于创建app建议文章的蓝本.
译者:philoenglish.com 团队
这是一篇非常好的推广移动应用的想法或者说是策略, 翻译过来分享给大家. 或许有些观点已经很显而易见, 那么就权当是一个总结. 后续会基于此文章陆续更新关于应用推广方面的想法和观点.
译者:philoenglish.com团队; 更多资讯可访问philoenglish.com
由于需要一个富文本编辑器来编辑一些网页内容, 手动编辑后存储到数据库比较麻烦, 所以着手实现一个自己的富文本编辑器, 来编辑和存储一些 html 文件.
这里使用 Angular 框架, 加 Quill 库实现.
ngx-quill: https://github.com/KillerCodeMonkey/ngx-quill
quill 官网: https://quilljs.com/
本文将使用@Injectable 装饰器创建 Angular 服务。Angular 服务是可注入的,注入器可以将其注入到我们 Angular 应用程序中的任何组件或服务中。@Injectable 装饰器在类级别的服务中使用。@Injectable 装饰器帮助注入器考虑可注入的服务。在应用程序模块中的@NgModule 装饰器的提供者元数据中配置我们的服务后,该服务将在整个应用范围内可用。
要在组件中获取服务实例,我们需要为服务构造一个带参数的构造器, 并构造包含一系列可供组件或其他服务调用的方法。
假设我们想要创建一个购物车应用程序。在这种情况下,服务可以包含管理商店的方法、将商品添加到购物车的方法、从购物车中删除商品的方法以及查询商品的方法等。
在上篇文章java实现websocket的五种方式, 我详细讲述了使用java实现websocket的五种方式.
五种方式都集中在服务器端的实现, 客户端我们使用的是一个在线测试工具进行测试的. 只有针对stomp这种方式我自己写了一个javascript版本的客户端. 但是随着项目的推进, 发现整个体系就像魔方或拼图一样, 在完整体系中还缺少了一块, 那就是java客户端去连接stomp websocket服务. 其作用是,在服务器端主动向客户端发送消息时, 通过stomp客户端连接stomp websocket服务, 将消息发布到某个topic, 最终被订阅消息的前端页面接收到. 三者之间的关系 java client -> stomp websocket服务 -> 前端页面. 采用的是消息订阅模式, 消息订阅并不是pull, 实际是push.
通常情况下, 如果想写一些比较通用的应用程序, 我们需要通过表名去了解整个表的情况, 才能编写一些比较通用的数据库工具.
通过表名获取字段名有多种方式:
第一种 我们可以查询系统表或者数据字典来获取表的信息, 其优点是效率比较高, 缺点是所写的工具往往只适用与某种特定的数据库.
第二种 通过一些标准的数据库连接库获取数据库元数据, 从而获取到相应表的结构信息, 这样做的优点是由于程序是面向标准库的API,
无论底层是何种数据库都能够兼容. 在Java领域可以通过Jdbc库提供的接口获取表信息, 在.net领域可以通过odbc, PHP领域可以使用PDO,
SQLAPI ++ 之于C++, database/sql之于golang, sqlx之于Rust等等
本文主要介绍使用jdbc获取数据库字段信息.