我有一个简单的node.js服务器,如:
var app = require('express')();
var compression = require('compression');
app.use(compression());
app.get('/', function(request, response) {
response.send('<!DOCTYPE html>.......');
}
app.listen(2345);
Run Code Online (Sandbox Code Playgroud)
我发送的html是2.4kB(压缩时为1.2kB).
当在不同的网络速度上测试时(使用开发工具),我得到了这种意外行为:
50kbps: Latency 600ms, download 1ms
250kbps: Latency 300ms, download 0.6ms
750kbps: Latency 100ms, download 100ms
2Mbps: Latency 10ms, download 200ms
32Mbps: Latency 5ms, download 210ms
Run Code Online (Sandbox Code Playgroud)
我不认为在250kbps之后网络速度增加时下载时间应该会增加.到底是怎么回事?
再看看如果我删除压缩会发生什么:
var app = require('express')();
app.get('/', function(request, response) {
response.send('<!DOCTYPE html>.......');
}
app.listen(2345);
Run Code Online (Sandbox Code Playgroud)
现在该文件只有2.4kB,并查看延迟/下载时间:
50kbps: Latency 550ms, download 230ms
250kbps: Latency 350ms, download 50ms
750kbps: Latency 120ms, download 15ms
2Mbps: Latency 35ms, download 6ms …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习节点,我看到了很多材料(正如那个着名的SO问题所建议的那样),问题是我看到的所有书籍,或者教程要么使用像快递这样的网络框架,要么只是限制自己来解释什么节点并且没有比解释如何创建一个非常基本的http服务器来监听某些端口上的请求更深入.
所以我真的很想知道是否有人使用带有web框架的节点?如果是这样,他们必须在某个地方学到它,所以请你建议我在哪里学习它?
我知道这是非常低级别的,但我不介意,我已经熟悉如何在C中创建服务器.
我真的很想了解我们如何真正为节点提供静态内容(在文件夹中自定义组织)以及我们如何在我们的html中实际引入逻辑(我看了所有这些,但只找到了如何使用Express,其中逻辑是由<%// code%>引入的结果,但这可以在纯节点中完成?).
类似于我的问题已经在这里提出过并没有真正的答案.最好的答案只是建议阅读官方nodejs文档,就像说:
你有一本字典,里面有数百万字的拉丁文,祝你好运.
那么你能否提出一些文档齐全,功能强大的书籍/教程,其中展示了如何使用原始节点创建真实世界的网站?
如果没有,我想我将不得不坚持使用php + Apache并尝试优化那些扩展.
我正在使用该ws模块,我想限制客户端通过websocket发送到1Mb的数据量.这将防止恶意用户发送大量数据(以GB为单位),导致服务器内存不足,从而导致每个普通用户的拒绝服务错误.
例如,示例Express允许指定发布请求主体的最大大小,如下所示:
bodyParser.json({limit:'1Mb'})
Run Code Online (Sandbox Code Playgroud)
我如何做与ws模块类似的事情?
我试过了
var ws = require('ws').Server
var wsserver = new ws({port:8080, limit:'1Mb'})
Run Code Online (Sandbox Code Playgroud)
但这当然不起作用.
我希望中断数据传输(超过1Mb后)并关闭websocket连接.我怎样才能做到这一点?
必须有一种方法来限制来自客户端的数据帧...
我正在使用图标.在Chrome和Opera上他们看起来很好.但是如果我尝试使用Firefox,如果font-size图标小于20px,它们看起来会非常模糊,而在30px之后它们看起来很平滑.有没有办法来解决这个问题?
例如,可以通过旋转非常少量的图像来修复因图像调整大小而导致图像模糊的Firefox问题.类似的东西可以应用于字体图标吗?
要查看它的外观,只需(使用firefox)到任何带有图标的网站(比如字体很棒)并尝试将它们调整为20px,看看它们变得多么模糊.
假设我有一个网站,其中我有自定义字体,所有.otf文件大约是1MB.
现在,当用户访问网站时,将下载字体.问题是,这些字体是否会一直保留在用户的浏览器中?即即使用户关闭浏览器,字体仍会保留在那里?或者.otf文件就像所有.css .html文件一样?哪个可以缓存,但需要再次下载?
如果是后者,我们该如何处理这个问题呢?我的意思是让用户下载1MB字体对UX不利.其他网站如何处理这个问题?是否使用了某种本地存储?
假设我有一个集合,我在字段上创建一个唯一索引:
db.users.createIndex({username: 1}, {unique:true})
Run Code Online (Sandbox Code Playgroud)
如果具有相同用户名的两个文档同时插入集合中会发生什么?
数据库如何防止冲突?我的意思是哪一个插入,哪个导致错误?
假设插入实际上是SIMULTANEOUS,数据库无法知道正在插入两个重复项,对吧?
那么,究竟发生了什么?
我知道Express会检查查询字符串(例如?a = 1&b = 2)并在默认情况下解析它.而req.query是包含键/值对的对象.有没有办法禁用此行为并完全忽略qs?
我需要这个,因为我解析查询字符串客户端,因为我收到大量的请求和qs很长我不想在每次解析查询字符串时浪费服务器资源(这意味着Express需要解码字符串中的URI组件,拆分字符串,为每个键值对执行for循环,为每对键做另一个拆分,创建一个非常昂贵的新对象等.这可能吗?
我正在尝试使用哈希表来实现单词词典,所以我需要将它全局化,并在我的一个头文件中声明它
extern node** dictionary;
Run Code Online (Sandbox Code Playgroud)
节点在哪里
typedef struct node
{
char* word;
struct node* next;
} node;
Run Code Online (Sandbox Code Playgroud)
然后在另一个定义函数的文件中,我包含具有字典声明的标题,并且我也在顶部添加
node** dictionary;
Run Code Online (Sandbox Code Playgroud)
然后在实际加载字典的函数中,我首先为将构成哈希表的链表分配内存
bool load(const char* dict_file)
{
dictionary = malloc(sizeof(node*) * LISTS);
FILE* dict = fopen(dict_file, "r");
if(dict == NULL)
return false;
char buffer[MAX_LEN + 2];
size_dict = 0;
while(fgets(buffer, MAX_LEN + 2, dict) != NULL)
{
node* new_node = malloc(sizeof(node));
int len = strlen(buffer);
new_node->word = malloc(sizeof(char) * (len));
//avoid \n
for(int i = 0; i < len - 1; i++) …Run Code Online (Sandbox Code Playgroud) 所以我有一个简单的node.js服务器,它只提供动态内容:
// app.js
var app = require('express')();
app.get('/message/:poster', function(request, response) {
response.writeHeader(200, {'content-type': 'text/html'});
// some database queries
response.end(""+
"<!DOCTYPE html>"+
"<html>"+
"<head>"+
"<title>messages of "+request.params.poster+"</title>"+
"<script src='http://example.com/script.js'></script>"+
"<link rel='stylesheet' href='http://example.com/style.css'>"+
"</head>"+
"<body>"+
"" // and so on
);
})
app.listen(2345);
Run Code Online (Sandbox Code Playgroud)
现在,假设我想更新我的HTML.
并且进一步假设我不想重新启动服务器.
有没有办法实现这个目标?
我尝试导出部件以发送到外部文件,如:
// lib.js
module.exports.message = function(request, response) {
response.writeHeader(200, {'content-type': 'text/html'})
//some database queries
response.end(""+
"<!DOCTYPE html>"+
"<html>"+
"<head>"+
"<title>messages of "+request.params.poster+"</title>"+
"<script src='http://example.com/script.js></script>"+
"<link rel='stylesheet' href='http://example.com/style.css'>"+
"</head>"+
"<body>"+
"" //and so on
);
}
Run Code Online (Sandbox Code Playgroud)
和 …
无论如何确定外部脚本何时加载并执行?我知道我们可以使用这样的onload事件确定何时加载它:
<script src=script.js async></script>
<script>
document.getElementsByTagName('script')[0].onload = function(){...}
</script>
Run Code Online (Sandbox Code Playgroud)
但是加载和执行呢?
我看不出这样做有什么意义?对我而言,它的渲染方式完全相同,那么我为什么要使用Arial,Helvetica,sans-serif和sans-serif?
我自己没有使用 CDN,但我真的很好奇数据是如何上传到它们的。假设用户将图像上传到 CDN Pop,该图像是否仅存储在该 CDN Pop 上?但如果是这样,如果用户离开并使用另一个 CDN 弹出,图像将不可用?
或者,如果另一个用户想要该图像,但该 CDN 流行音乐距离她/他很远怎么办?
否则图片需要上传到数百个cdn pop上,这会占用大量带宽。因此,10kb 的图像每月可能会占用数十兆字节的可用带宽。
这对我来说没有多大意义。
有人能解决这个问题吗?
所有base64字符串都有一个标题(根据维基百科,它是814字节).我想知道这些标题对于相同类型的数据是否相同,因为我注意到当我在base64中编码JPEG图像时,前500个字符是相同的.
javascript ×6
node.js ×5
express ×4
fonts ×3
css ×2
base64 ×1
browser ×1
c ×1
cdn ×1
dom ×1
duplicates ×1
encoding ×1
file-type ×1
file-upload ×1
firefox ×1
hashtable ×1
header ×1
icons ×1
indexing ×1
jpeg ×1
limit ×1
malloc ×1
mongodb ×1
performance ×1
query-string ×1
valgrind ×1
websocket ×1