GVKun编程网logo

javascript – 测试猫鼬模型有意义吗?(猫鼬架构是arm吗)

15

如果您对javascript–测试猫鼬模型有意义吗?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript–测试猫鼬模型有意义吗?的详细内容,我们还将为您解答猫

如果您对javascript – 测试猫鼬模型有意义吗?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于javascript – 测试猫鼬模型有意义吗?的详细内容,我们还将为您解答猫鼬架构是arm吗的相关问题,并且为您提供关于java – 为了垃圾收集而避免创建对象仍然有意义吗?、JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧、javascript – 地图在猫鼬、javascript – 基本的循环逻辑对我来说没有意义的有价值信息。

本文目录一览:

javascript – 测试猫鼬模型有意义吗?(猫鼬架构是arm吗)

javascript – 测试猫鼬模型有意义吗?(猫鼬架构是arm吗)

我是一般的测试新手,虽然我看到像meanjs或ghost测试他们的模型的一些项目,但其中一些对我来说没有多大意义.

例如,我看到有些人这样做:

it( 'should create a new group',function( done ) {
      utils.fixtures.createGroup()
        .then( function( group ){
          group.should.exist;
          done();
        }).catch( function( err ){
          done(err);
        });
    });

在我看来,他们正在测试mongoose而不是测试他们自己的代码.
如果模型包含自定义验证方法等,那么测试它就非常有意义.

所以我的问题是,如果测试与模型相关的任何内容是否有任何意义,除非它是模式方法/钩子?

解决方法

我认为测试基本模型构造仍然有意义,如果只是为了揭示潜在的突破性变化,如果有人试图合并在与模型混淆的工作中.如果您的应用程序假定某些模型存在…如果发生变化,立即找出它是好的,不是吗?如果更改是故意的,那么作者有责任确保所有测试都会在合并后通过.

java – 为了垃圾收集而避免创建对象仍然有意义吗?

java – 为了垃圾收集而避免创建对象仍然有意义吗?

例如,在服务适配器中,您可能:

一个.有一个输入数据模型和一个输出数据模型,甚至可能是不可变的,具有不同的类,并使用Object Mappers在类之间进行转换并创建一些短期对象

湾有一个数据模型,一些类可能是可变的,但为输入创建的相同对象也作为输出发送

还有其他一些用例,你必须在有很多对象的清晰代码和用较少对象的不太清晰的代码之间做出选择,我想知道垃圾收集在这个决定中是否还有权重.

解决方法

我应该将此作为评论作为IMO它不符合答案,但它不适合.

即使答案很可能是 – 做任何事情都会使你的代码更具可读性(并且说实话,我仍然会一直遵循这一点);我们在代码库中遇到过这个GC问题.

假设你想要创建一个用户图(我们不得不 – 大约一半)并在内存中加载它们的所有属性并对它们进行一些聚合和过滤等(这不是我的决定),因为这些图重量很大的对象 – 一旦加载了16GB的堆,JVM就会因OOM或GC而失败,这会占用很大的停顿时间.这是可以理解的 – 大量数据需要大量内存,你不能逃避它.提出并且实际工作的解决方案是使用简单的BitSets对其进行建模 – 其中每个位都是属性,并且可能与其他一些数据相关联;到目前为止,这仍然是不可读的,并且非常复杂.大量的转变,大量的数据内在性 – 你必须始终知道3位意味着什么,例如,没有用于usernameIncome的getter,你可以说 – 你必须做很多转换并将其映射到搜索表等等,但它会使GC保持相当低,至少在我们可以接受的范围内.

所以,除非你能证明GC花了你的应用时间这么多 – 你可能更安全,只需添加更多RAM并增加它(除非你有泄漏).我仍然会选择像99这样的清晰代码.(99)%的时间.

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧

1、防止滥用JavaScript“不管你想通过JavaScript改变哪个网页的行为,都必须三思而后行。首先要确认:为这个网页增加这种额外的行为是否确有必要?”

个人认为,作者的这句话放在当前几乎无处不用JavaScript来增强Web页面交互体验的时代,可以理解为应该适当的使用JavaScript,而不要因为使用了实现酷炫效果的脚本导致网页加载缓慢或者兼容性极差而舍本求末,导致用户无法浏览和使用网站。

2、平稳退化平稳退化是指当用户禁用浏览器JavaScript或浏览器不支持JavaScript(还有吗)时,应该让用户仍然可以正常的浏览网站。

刚看到这个问题的时候,感觉这种情况几乎可以忽略不计,因此看了一些关于这个问题的讨论(知乎)以及博文《javascript不可用的问题探究》,并拿博客园首页做了实验,即在禁用JavaScript的情况下浏览网页,发现虽然无法评论博客、无法正常显示分类效果、当然广告也没了,但是主要的功能(查看博文、分页跳转等)是可以正常使用的。

那么基本可以得出结论:在考虑平稳退化的时候,根据需要至少应该保证网站主要功能可以正常使用。对博客园来说,就是查看博客。

3、禁用"javascript:"伪协议和内嵌事件处理函数虽然在HTML中使用这两种写法,不会带来什么严重问题,但是它会阻止平稳退化(网页行为不一致),并且使脚本的编写方式混乱,增加了代码维护的难度。

4、性能考虑关于性能考虑的最佳实践,还是非常容易理解的。

“尽量少访问DOM和尽量减少标记”。少访问DOM是因为查询DOM的操作会非常耗费性能。多处函数的重复DOM查询应该进行重构,提取为全局变量或者直接作为参数进行传递。减少标记可以减小DOM的规模,从而减少查找DOM树中特定元素的时间。

“合并脚本”。合并外部脚本文件,可以减少加载页面时发送的请求次数。通过观察Chrome开发者工具Network标签,可以非常清楚的看到加载网页的请求次数和时间,下图为请求我的博客的情况,第三方的百度分享插件是最慢被加载的,当然整体加载时间还是可以接受的。不过当引用的文件过多过大,或者依赖的第三方插件请求缓慢时,整个页面就会一直处于加载状态,给人的感觉就是网页加载缓慢,体验就会变差。



另外,“脚本在标记中的位置对页面的初次加载时间也有很大的影响”。就像bootstrap的实例中,引用的JS插件统统放在了页面的尾部,并加了说明。

JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧
因为根据HTTP规范,浏览器每次从同一个域名中最多只能同时下载两个文件,而在脚本下载期间,浏览器不会下载其它任何文件,即使是来自不同域名的文件也不会下载,所有其它的资源都要等脚本加载完毕后才会下载;而通常我们会把脚本文件放在块中,此时该块中的脚本会导致浏览器无法并行加载其它文件(如图片或其它脚本)。

把所有 <script> 标签放在文档的末尾,</script>

javascript – 地图在猫鼬

javascript – 地图在猫鼬

我正在尝试在Mongoose中创建一个具有映射(对象,关联数组,键值对)的模式,但到目前为止还没有成功.
我的架构的文档必须是这样的:

{
    "_id": ObjectId("..."),"groups"
    {
        "groupA":
        {
            "value1": "...","value2": "..."
        },"groupB":
        {
            "value3": "...",},"groupC":
        {
            "value4": "...","value5": "...",...
    }
}

groups是具有可变数量的键的对象.我不提前知道这些密钥,因为它将由用户创建.
组中的每个条目都是另一个对象.和以前一样,我不知道密钥标识符,但我知道值是String(或布尔值,或者数字,无关紧要).
当然,这些键是字符串.

在Mongoose中甚至可能(无论如何构建这样的模式/模型)?

解决方法

最佳做法是将任何动态数据保留在字段名称之外.这种用例的典型方法是使组成为一个数组,并将组的名称移动到包含对象的名称字段中.然后,您可以使用“混合”类型来包含用户定义的值集:

{
    "_id": ObjectId("..."),"groups":
    [
        {
            name: "groupA",values: {
                "value1": "...","value2": "..."
            }
        },{
            name: "groupB",values: {
                "value3": "..."
            }
        },{
            name: "groupC",values: {
                "value4": "...","value5": "..."
            }
        },...
    ]
}

您将架构定义为:

var schema = new Schema({
    groups: [{
        name: String,values: Schema.Types.Mixed
    }]
});

javascript – 基本的循环逻辑对我来说没有意义

javascript – 基本的循环逻辑对我来说没有意义

我一直在努力学习 Javascript最长的时间,这有点令人沮丧.我又回来学习基础知识了,我正在玩这些for循环和数组.

有人可以解释为什么这段代码的输出是[1,2,3,4,5]而不是[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

var game1 = new Array();
for(i = 25; i > "love is like a river".length; i = i - 1) {
  console.log(game1.push(i)); 
}

解决方法

console.log(game1.push(i));

这句话的作用是它向控制台打印被推送元素的索引.结果1,5是数组的长度.

你想要编码的是:

var game1 = [];

for(i = 25; i > "love is like a river".length; i--){

console.log(i);
game1.push(i);
}

在上面的例子中,我切换了数组的声明,因为这是最常见的方式(这不是必需的).它仍然可以正常使用你的声明版本.在for循环中,我已经切换了

i = i - 1;

到速记版本:

i-- or --i

这使’i’减少了1.我也分开了

console.log(i) and game1.push(i) to be separate

这将打印出’i’的结果:25,21
这是因为for循环执行用户在循环结束时定义的操作,因此当循环打印出21并将其推送到数组时,它会递减到20,循环停止.该数组仍将具有数字25,21.但控制台不会记录它.

如果你想要你上面定义的输出,你必须:

var game1 = [];
for(i = 6;i >= 25; i++){
game1.push(i);
console.log(game1[i-6]);
}

在这个你添加’i’到game1导致[6,14 … 25]你并在变量索引’i – 6′.这将导致方括号中的数字为“0,1,5”,从0开始,因为这是所有数组索引的起始位置.

今天关于javascript – 测试猫鼬模型有意义吗?猫鼬架构是arm吗的介绍到此结束,谢谢您的阅读,有关java – 为了垃圾收集而避免创建对象仍然有意义吗?、JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)_javascript技巧、javascript – 地图在猫鼬、javascript – 基本的循环逻辑对我来说没有意义等更多相关知识的信息可以在本站进行查询。

本文标签: