小编Dmi*_*rin的帖子

ES6 Map和WeakMap有什么区别?

看看这个这个 MDN页面,似乎地图和WeakMaps之间的唯一区别是WeakMaps缺少"大小"属性.但这是真的吗?他们之间有什么区别?

javascript ecmascript-harmony weakmap ecmascript-6

83
推荐指数
6
解决办法
2万
查看次数

WebSockets的.丢失互联网,保持活跃的消息,应用程序架构等

嗯,这里有关于websockets的信息.技术本身是惊人的,这一点毫无疑问.在我开始在我的应用程序中使用它们之前,我只想让社区回答以下问题:

"...为了保持存在,应用程序可以在WebSocket上发送保持活动的消息,以防止它因空闲超时而被关闭......"

"...理想情况下,WebSocket的未来版本将支持超时发现,因此它可以告诉应用程序保持活动消息的时间......"

  1. 感觉就像似曾相识.之前我们不得不一次轮询服务器%period_time%以获取所需的更新信息.对于websockets,我们必须使用keep-alive消息在%period_time%上轮询websocket服务器,以确保Internet连接仍处于活动状态/ websocket服务器仍在工作.有什么好处?

    关于这些保持活跃的消息还有另外一件事.Websocket协议的优点是使用比HTTP(S)更少的流量.如果我们发送保持活跃的消息,似乎流量优势消失了.或者可能不是?

  2. 如果我使用websockets,我应该如何处理我的应用程序中的互联网丢失?我的意思是当互联网连接突然丢失时的真实情况(我的意思是没有发生"navigator.offline"事件).我应该使用某种setTimeout函数来查找保持活动消息,还是有更好的方法来处理这种情况?

  3. REST让我们清楚地了解应用程序应该如何工作以及请求应该如何.在websocket驱动的应用程序中执行此操作的最佳方法是什么?我应该用request.action字段(例如)JSON编码的消息吗?应用程序应该如何执行PUT请求?REST模型中有URL资源来处理这个问题,所以我应该使用这些方法的组合,还是可以简化?

javascript html5 xmlhttprequest long-polling websocket

17
推荐指数
2
解决办法
1万
查看次数

Websockets和二进制数据

据我所知,websockets支持二进制数据传输.二进制支持错误是固定的.

那么,是否有支持二进制数据传输的websocket服务器?Socket.io似乎错过了这个机会.也许还有其他一些?

javascript html5 websocket node.js socket.io

14
推荐指数
1
解决办法
1万
查看次数

使用Web Workers(垃圾收集器)可能发生内存泄漏

我有一个应用程序,在按钮单击后调用web worker.计算将移至工作人员以缓解UI并使其在进行计算时响应用户操作.

一切顺利,大约0.8-1.5秒之后工人发出回应.在worker.onmessage中,我执行所有需要的DOM操作.但是在此GC出现之后,根据CPU的不同,实际上会阻止UI 2秒或更长时间.这真让我感到困惑,因为UI阻塞是我想要阻止的.

以下是时间轴/内存控制台选项卡的屏幕截图:http://i.imgur.com/zUoHa.jpg

正如您所看到的,GC事件恰好在所有DOM操作之后发生.实际上只有一个重绘事件(使用DocumentFragment).

主要的js代码:

var sortWorker = new Worker('js/contactsorter.js');
sortWorker.onmessage = function(e) {
    var messages = [];
    e.data.forEach(function(userDoc) {
        var contactSection = _drawContact(userDoc);
        messages.push(contactSection);
    });

    meta.append(messages); // this actually appends document fragment as a child
};

sortWorker.postMessage(postMessageData);
Run Code Online (Sandbox Code Playgroud)

contactsorter.js(worker):

onmessage = function(e) {
    var uid, output = [], usersStat = {};

    // calculations...

    postMessage(output);
    close();
};
Run Code Online (Sandbox Code Playgroud)

有没有办法在这个地方避免这些GC事件?

UPD:在我看来,GC事件的时间取决于发送给工人的数据量.UPD2:关闭和启动后GC事件只发生两次,从而阻止UI不到一秒钟.嗯?

javascript html5 garbage-collection javascript-events web-worker

8
推荐指数
1
解决办法
3288
查看次数

BlobBuilder破坏二进制数据

我有BlobBuilder(Chrome11)的问题我尝试从服务器获取XHR请求的图像.然后我尝试使用BlobBuilder/FileWriter将其保存到本地FS.互联网上的每个例子都是关于使用text/plain mime类型,这些例子工作得很好.但是当我尝试编写使用XHR获得的二进制数据时,文件大小变为原始文件大小的1.5-2倍.它无法在Picasa/Eye of Gnome中查看.

var xhr = new XMLHttpRequest();
var photoOrigUrl = 'http://www.google.ru/images/nav_logo72.png';
xhr.open('GET', photoOrigUrl, true);
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        var contentType = xhr.getResponseHeader('Content-type');

        fsLink.root.getFile('nav_logo72.png', {'create': true}, function(fileEntry) {
            fileEntry.createWriter(function(fileWriter) {
                var BlobBuilderObj = new (window.BlobBuilder || window.WebKitBlobBuilder)();
                BlobBuilderObj.append(xhr.responseText);

                fileWriter.write(BlobBuilderObj.getBlob(contentType));
            }, function(resultError) {
                console.log('writing file to file system failed (   code ' + resultError.code + ')');
            });
        });
    }
}

xhr.send();
Run Code Online (Sandbox Code Playgroud)

fsLink存在,这是扩展.

javascript html5 blob google-chrome-extension

7
推荐指数
1
解决办法
7045
查看次数

Chrome窗口类型.他们代表什么?

chrome.windows API讲述了5种窗口类型:"normal","popup","panel","app","shell".

  • 普通窗户是带标签的标准窗户;
  • 弹出窗口是1)带有应用程序的独立窗口(此功能目前在Windows和Linux上可用),2)chrome devtools,如果它的窗口是单独打开的;

但是其他3种窗口类型是什么?官方API提供的信息非常少这个

javascript google-chrome google-chrome-extension

7
推荐指数
1
解决办法
2694
查看次数

永远或域 - 哪个更适合node.js连续工作

我希望我的节点应用程序连续运行.我确信在应用程序工作期间可能会出现一些崩溃.现在我可以看到3种让应用程序连续工作的方法:

  1. 永远启动我的应用程序,所以当应用程序永远崩溃时会自动重启它
  2. 使用模块捕获错误并在发出"error"事件时再次启动应用程序
  3. 不推荐使用 process.on('uncaughtException')

问题是:这三种方式中哪一种更好用.在我看来,这个问题没有确切的答案,所以欢迎任何评论.

在我看来,第一个更合适,因为节点进程内存消耗不会随着时间而增长 - 每次节点进程崩溃永远都会启动另一个.

javascript node.js forever

6
推荐指数
1
解决办法
1315
查看次数

Chrome应用Picasa身份:OAuth2请求失败:服务响应错误:"错误的客户端ID:{0}"

我正在尝试使用chrome.identity.getAuthToken()来获取Picasa网络服务的令牌.我在Google Developer Console中找不到Picasa API,并将其范围设置为manifest.json的" https://picasaweb.google.com/data/"oauth2部分.Picasa文档说我可以跳过此步骤.

chrome.identity.getAuthToken({
    interactive: true
}, function (token) {
    if (chrome.runtime.lastError) {
        console.error(chrome.runtime.lastError);
    } else {
        console.log(token);
    }
});
Run Code Online (Sandbox Code Playgroud)

getAuthToken()始终以错误"OAuth2请求失败:服务响应错误:'错误的客户端ID:{0}'"结束.如果未设置范围,则错误看起来像"OAuth2请求失败".我哪里弄错了?

picasa google-chrome-extension google-oauth google-chrome-app

6
推荐指数
2
解决办法
2876
查看次数

关于偏见的新手问题

我有一个简单的页面,包括头部,菜单,内容和页脚.我需要将它们分成单独的文件.阅读快递文档后我(创建了4个模板)写了这样的东西:

app.get('/', function(req, res) {
    var response = [null, null, null, null]
    , everyNotNull = function(elem) {
        return (elem !== null);
    }, sendResponse = function(type, str) {
        switch (type) {
            case 'head' : response[0] = str; break;
            case 'menu' : response[1] = str; break;
            case 'content' : response[2] = str; break;
            case 'footer' : response[3] = str; break;
        }

        if (response.every(everyNotNull)) {
            res.send(response.join(''));
        }
    };

    res.partial('head', {'title' : 'page title'}, function(err, str) {
        sendResponse('head', str);
    });

    res.partial('menu', {'active' : '/'}, …
Run Code Online (Sandbox Code Playgroud)

ejs node.js express

5
推荐指数
1
解决办法
4835
查看次数

有没有办法在CouchDB文档中搜索子字符串

CouchDB提供了从startkey搜索值的机会,确切的键值对等.但是有没有办法在指定的字段中搜索子字符串?

问题是这样的.我们的新闻数据库包含大约40,000个新闻文件.再说,他们有title,content而且url领域.我们想找到有"餐馆"的新闻文件title.有什么办法吗?

查看排序规则维基页面没有任何说明:(对我来说似乎很奇怪,没有工具可以解决这个问题,我只能用Python,PHP或其他方式解析JSON结果.在MySQL中它只是LOCATE()函数. .

couchdb

4
推荐指数
1
解决办法
2324
查看次数