gpt4 book ai didi

javascript - 减少 nodejs 服务器上的 CPU 使用率

转载 作者:搜寻专家 更新时间:2023-11-01 00:33:47 25 4
gpt4 key购买 nike

我正在研究降低 CPU 使用率的有趣方法在 NodeJS 服务器上。

在我的研究过程中,我发现了以下文章: http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile

这些都是很好的提示,但我有一个关于提示#4。

这是否真的意味着用户正在请求“JavaScriptTemplate.html”然后随后请求所有 JSON(此处未实现)?

假设所有动态内容都应该在没有用户的情况下可用交互(例如在按钮点击事件上请求 JSON)什么是实现这一目标的最佳方式?我可以考虑加载额外的 JS 依赖项(requirejs) 执行函数以请求 JSON 内容的位置。

由于没见过大网站调用静态html文件但是而不是请求路由到他们的应用程序服务器有多常见上面的链接建议的解决方案是什么?他们真的使用服务器端模板浪费 CPU 利用率主要是静态文本内容???

对于 Node (expressJS) 这一定是一种次优的方式,尤其是如果要生成的 HTML 相当复杂......理想情况下Node 应该只是作为提供 JSON 数据的 API 服务器运行。

你有什么想法要分享吗?

最佳答案

感谢分享这篇文章 - 这是一篇很棒的文章(对我来说非常及时)。

您实际上是在问两个问题 - 1) 如何在没有客户端交互的情况下加载数据以呈现 html 客户端,以及 2) 如何在用户实际请求路由时将静态文件发送到浏览器。

在没有用户交互的情况下呈现页面和客户端 MVC 上的 ¢2

1) 您需要运行所有初始化/数据加载/渲染代码以在页面加载后渲染页面。如果您在客户端中使用 jQuery(就像大多数 Web 应用程序一样):

$(document).ready(function(){
// Your code here
});

它只是从jQuery docs复制过来的.

大多数人使用 backbone/underscore 在客户端构建 MVC 层。尽管有很多更高级(而且看起来更强大)的客户端框架可以做到这一点,但这对夫妇为您提供了足够的功能,而不会限制您的选择或降低您在某些时候肯定需要的灵 active 。 Underscore(无论如何都是 Backbone 依赖)除了许多非常有用的功能(如果你花一个小时阅读整个一页手册,你会惊讶于 JavaScript 的可能性)有它自己的模板,这些模板看似简单但同时time 非常强大,因为它们只是在模板中运行所有 javascript。

虽然在模板中包含应用程序逻辑通常是一件坏事(正如下划线所允许的,而大多数更高级和“更强大”的模板引擎则不允许),但通常非常方便并且能够添加一些更好当您发现自己陷入困境时(您经常会这样),在模板中添加逻辑比重新设计大量应用程序逻辑或添加其他模板要好。

此外,我的意见是避免使用 require.js 或任何其他模块加载器(直到你真的必须使用它们),正如我写的 here .

为任何路由提供静态 html 并为 node-as-api 提供 nginx 配置

2) 您需要重写对所有路由的请求,以使用相同的静态 html 文件(或多个依赖于路由的 html 文件)进行响应。根据您的偏好或应用程序要求,它可以是具有空主体的文件(在这种情况下,用户将看到一个空白页面,直到您的数据被加载并且页面被呈现/插入到主体中),一些欢迎页面甚至是一些模板页面,其中显示的不是数据,而是纺车。

重写请求的方式取决于您用来提供静态内容和代理请求的网络服务器。如果您使用 Apache(不太可能选择 Node,因为它是同步的),您需要使用 .htaccess 文件。如果你像大多数使用 node 的人一样使用 Nginx,你需要在配置文件的服务器 block 内使用 rewrite 指令,就像下面的例子一样:

server {
listen 80;
server_name example.com;
root html/example;

access_log logs/example.log;

# location block below sends specific static assets from inside your app's
# public directory when routes /img, /js, /css, /views are requested
location ~ /(img|js|css|views)/ {
rewrite ^(.*)$ /public/$1 break;
}

# location block below proxies all data requests (/api route) to your node app
location /api {
proxy_pass http://localhost:3000/;
proxy_redirect http://localhost:3000/ http://example.com;
proxy_connect_timeout 30s;
proxy_read_timeout 30s;
proxy_cookie_domain localhost example.com;
#proxy_http_version 1.1;
}

# location block below rewrites all other routes to a specific html file
# that is sent to the client and that is supposed to load all JS and
# static assets to render a page
location / {
rewrite ^(.*)$ /public/app.html;
}
}

您在客户端呈现页面的方式(以及您从服务器请求的数据)将取决于用户请求的路由(您可以在 javascript 中访问/更改以及您可以设置/访问/更改cookies)。应用程序内部的所有导航(当用户单击任何按钮或内部链接时 - 您需要捕获所有单击事件)在没有对已加载的页面或静态 Assets 的额外请求的情况下发生,仅将数据请求发送到服务器。

希望对你有帮助。

SEO更新

nginx 的建议配置仅适用于您不需要由机器人索引的任何页面以及其他需要您的静态 html 的网络应用程序可见的页面,例如 facebook,例如对于您希望被索引的页面,您需要添加条件以不同方式路由来自机器人的请求(基于 $http_user_agent),并为这些路由呈现一些静态 html。但它可以是不同的纯语义 html(更小,没有设计图像、布局 div/类、UI 元素和 javascript,以减少来自爬行机器人和网络应用程序的请求)。

关于javascript - 减少 nodejs 服务器上的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com