让我们假设这样一种情况,即使用一些javascript逻辑从一个小字符串生成一个巨大的字符串,然后强制在浏览器上下载该文本文件.
这可以通过将其作为href使用八位字节流下载来实现,如本答案中所述:
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
pom.click();
}
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案要求在推送下载之前完全生成"文本",因此它必须完全保存在浏览器内存中.
是否可以在使用CLIENT SIDE LOGIC生成文本时对其进行流式传输?
例如 :
var inputString = "A";
var outStr = "";
for(var i = 0; i < 10000000 ; i++)
{
/* concatenate inputString to output on the go */
}
Run Code Online (Sandbox Code Playgroud) 如何在mongoDB中获取最后50个文档?
我有一个由...制作的集合
db.createCollection("collection",{capped:true, size:300000});
Run Code Online (Sandbox Code Playgroud)
从这个"集合"
我想有最后50个文件而不是前50个文件.
我知道我可以通过使用获得前50个文档
db.collection.find().limit(50);
Run Code Online (Sandbox Code Playgroud)
但是如何才能获得最近50份文件?
这可以通过MongoDB API简单地完成,还是应该通过编程来实现?
我想要复制的行为就像grep with -A和-Bflags.例如,它grep -A 2 -B 2 "hello" myfile.txt会给我所有在其中有"你好"的行,但也包括前面的2行和后面的2行.让我们假设这个表模式:
+--------+-------------------------+
| id | message |
+--------+-------------------------+
| 1 | One tow three |
| 2 | No error in this |
| 3 | My testing message |
| 4 | php module test |
| 5 | hello world |
| 6 | team spirit |
| 7 | puzzle game |
| 8 | social game |
| 9 | stackoverflow |
|10 …Run Code Online (Sandbox Code Playgroud) 如果我决定使用javascript或css文件的last_modified_time,并使用它的unix时间戳作为修改文件时胸围缓存的名称中的键.以下两种做法有什么区别?filename是:my_script.js,时间戳是:1321951817
1/File包含在:
<script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script>
因此,每次v更改时,查询字符串参数都会创建一个新的缓存.
2 /文件包含为:
<script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script>
文件名随每次修改而变化,重写规则删除时间戳并将请求的URL指向my_script.js
3/更新:基于以下答案的更多方法:文件被重命名并包括在:
<script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script>
文件名被更改并且使用NO REWRITE RULE.
问题:这两种技术本质上是否相同,或者使用查询字符串参数而不是直接文件名有任何优点/缺点.
Django 1.4提供了几种维护django会话的方法:
我对使用的看法:
i)仅缓存:不可取,用户会话可能会从memcache中清除.
ii)Db + cache(cached_db):优选,简单和安全的解决方案.
iii)签名cookie会话:优先,没有数据库命中.
假设会话数据非常小,即将其存储在cookie中没有问题.在数据库+ memcache驱动的会话引擎上使用签名cookie是否有任何性能优势?对于N个并发新用户,将保存N个数据库命中的顺序.这将减少数据库服务器每单位时间必须处理的总查询.
更新:我们发现redis或aerospike是django真正强大且高吞吐量的会话后端.我们正在使用redis会话后端
要求:具有2-3级嵌套的Python对象,包含基本数据类型,如整数,字符串,列表和dicts.(没有日期等),需要作为json存储在redis中以对照密钥.什么是可用于将json压缩为低内存占用的字符串的最佳方法.目标对象不是很大,平均有1000个小元素,或者转换为JSON时大约有15000个字符.
例如.
>>> my_dict
{'details': {'1': {'age': 13, 'name': 'dhruv'}, '2': {'age': 15, 'name': 'Matt'}}, 'members': ['1', '2']}
>>> json.dumps(my_dict)
'{"details": {"1": {"age": 13, "name": "dhruv"}, "2": {"age": 15, "name": "Matt"}}, "members": ["1", "2"]}'
### SOME BASIC COMPACTION ###
>>> json.dumps(my_dict, separators=(',',':'))
'{"details":{"1":{"age":13,"name":"dhruv"},"2":{"age":15,"name":"Matt"}},"members":["1","2"]}'
Run Code Online (Sandbox Code Playgroud)
1 /还有其他更好的方法来压缩json以节省redis内存(同时确保轻量级解码).
2/msgpack [http://msgpack.org/]的候选人有多好?
3 /我还要考虑泡菜这样的选择吗?
我曾尝试
voluptuous和schema,这两者都是在验证简单和伟大的,但他们都做基于异常的错误报告,即它们无法在第一个错误.有没有办法可以在Voluptuous或Schema中获得数据的所有验证错误?
我发现jsonschema似乎匹配了一些要求,但没有验证对象键和基于自定义函数的验证(例如lambdas).
需求:
def myMethod(input_dict):
#input_dict should abide to this schema ->
# { 'id' : INT , 'name':'string 5-10 chars','hobbies': LIST OF STRINGS }
# for incorrect input like
# {'id': 'hello','name':'Dhruv','hobbies':[1,2,3] }
# I should be able to return all errors like
# ['id' is not integer,'hobbies' is not list of strings ]
Run Code Online (Sandbox Code Playgroud) 以下是浏览器控制台(包括firefox和chrome)的结果,
false == {}可以正常工作,但是{} == false会出现语法错误.
>> false == []
true
>> false == {}
false
>> 0 == false
true
>> false == []
true
>> false == {}
false
>> [] == false
true
>> {} == false
Uncaught SyntaxError: Unexpected token ==
Run Code Online (Sandbox Code Playgroud) 我有一些小模板字符串,它们将通过同一页面上的Mustache.js呈现.我不需要为模板创建单独的html文件.
存储模板的选项:
存储在javascript变量中:破解多行字符串,大量转义引号.
存储为隐藏div的innerHTML.
我尝试了方法#2,但它似乎无法正常工作.
小提琴:http: //jsfiddle.net/RHwnq/2/
<html>
<head></head>
<body>
<div id='templates' class='hide' align="">
<div id='tableTemplate'>
<table class="table">
{{#name_list}}
<tr><td> {{name}} </td></tr>
{{/name_list}}
</table>
</div>
</div>
<script>
var template = $('#tableTemplate').html();
console.log(template);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这个日志:
{{#name_list}}
{{name}}
{{/name_list}}
<table class="table"><tbody><tr><td></td></tr></tbody></table>
Run Code Online (Sandbox Code Playgroud)
代替 :
<table class="table">
{{#name_list}}
<tr><td> {{name}} </td></tr>
{{/name_list}}
</table>
Run Code Online (Sandbox Code Playgroud)
这可能是由于浏览器进行了一些标记更正.在HTML页面中存储HTML模板有哪些其他好的技巧?
假设我的页面结构是:
1. one.html :
includes -> a.js , b.js , c.js ,d.js
2. two.html :
includes -> a.js , b.js, x.js, y.js, z.js
3. three.html :
includes -> a.js , b.js, s.js, x.js, y.js
Run Code Online (Sandbox Code Playgroud)
等等.有些页面访问量比其他页面更多,比如3页提供了网站所有页面浏览量的99%.
我正在寻找一个解决方案:
i)组合并最小化可以包含在页面中的组中的文件.
ii)具有将组的文件名映射到最终组合文件名的逻辑.
iii)包括像Google Closure编译器/ YUI压缩器这样的缩小器.
我看过的一个解决方案是: PHP缩小
它完成了大部分工作.但是它对我有以下缺点:
i)我将在CDN服务器上托管我的静态组合文件,而不是托管PHP minify的同一个Web服务器,因此PHP按组名缩小服务器文件的逻辑对我来说不起作用.
ii)PHP Minify使用PHP CGI来处理和提供脚本,而我希望我的缩小内容直接从CDN服务器提供.
PHP Minify是否有一些功能可以将组名映射到组合文件名,我可以在我的网页中使用它来直接设置组合JS文件的CDN路径.例如
<?php
$groupName = array("onePage" => array('a.js','b.js','c.js','d.js');
?>
<script type="text/javascript" src="http://www.MYSTATICSERVER.com/js/<?php getMergedFileName($groupName)"></script>
Run Code Online (Sandbox Code Playgroud)
而不是调用PHP Minify的PHP脚本来获取组的文件,这实际上是一个PHP页面调用,然后从以前生成的文件中提供javascript内容:
<script type="text/javascript" src="http://www.MYWEBSERVER.com/min/?g=onePage" ></script>
Run Code Online (Sandbox Code Playgroud)
(我同意大部分可以通过将不同的解决方案与自定义部署脚本和缩小工具相结合来实现,例如ANT,FABRIC + YUICompressor/ClosureCompiler,但我正在寻找一个我可能错过的完善的可配置解决方案)
javascript cdn minify yui-compressor google-closure-compiler
javascript ×5
python ×2
cdn ×1
django ×1
json ×1
jsonschema ×1
lastinsertid ×1
minify ×1
mongodb ×1
msgpack ×1
mustache ×1
mysql ×1
redis ×1
session ×1
versioning ×1