首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类实例与接口与一般对象-性能

类实例与接口与一般对象-性能
EN

Stack Overflow用户
提问于 2016-09-20 09:30:06
回答 1查看 200关注 0票数 0

我正在创建模拟数据,以便对前端进行编码。

这些数据可以是类实例或接口,只是普通的旧javascript对象。就我个人而言,我宁愿把它作为javascript对象来做,因为我不喜欢锅炉板代码。

我需要决定是否对模拟数据和实际数据使用类或接口或泛型javascript对象。

哪个更有表现力?

下面是一个我目前正在决定是否应该只是javascript对象的类的例子:

类:

代码语言:javascript
运行
复制
export class Result {
  id: number;
  brand: string;
  name: string;
  description: string;
  image: string;
  rating: number;
  categories: string[];
  averagePrice: number;
  amount: string;
  reviews: Review[];
}

模拟数据:

代码语言:javascript
运行
复制
import { Result } from './result';
export const RESULTS: Result[] = [
  { id: 11, 
    name: 'dairy free parmesan alternative original', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_parmesan_alternative_original.jpg",
    rating: 4.3,
    categories: ["dairy"],
    averagePrice: 6.60
  },
  { id: 12, 
    name: 'dairy free mozzarella alternative', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_mozzarella_alternative.jpg",
    rating: 3.9,
    categories: ["dairy"],
    averagePrice: 3.70
  },
  { id: 13, 
    name: 'dairy free tasty cheese sauce', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_tasty_cheese_sauce.jpg",
    rating: 3.7,
    categories: ["dairy", "condiment"],
    averagePrice: 5.50
  },
  { id: 14, 
    name: 'dairy free mild cheese mix', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_mild_cheese_mix.jpg",
    rating: 4.4,
    categories: ["dairy", "TV dinner"],
    averagePrice: 4.86,
    amount: "400g"
  },
  { id: 15, 
    name: 'sugar free dark chocolate salted caramel', 
    brand: "alpro", 
    image: "result-images/sugar_free_dark_chocolate_salted_caramel.png",
    rating: 4.2,
    categories: ["dessert", "Baking"],
    averagePrice: 4.32,
    amount: "400g"
  },
  { id: 16, 
    name: 'drink for professionals', 
    brand: "Alpro", 
    image: "result-images/alpro_drink_for_professional.jpg",
    rating: 2.1,
    categories: ["beverage"],
    averagePrice: 3.50,
    amount: "400g"
  },
  { id: 17, 
    name: 'custard', 
    brand: "alpro", 
    image: "result-images/alpro_custard.jpg",
    rating: 4.9,
    categories: ["dairy", "baking", "dessert"],
    averagePrice: 4.50,
    amount: "400g"
  },
  { id: 18, 
    name: 'coconut dessert', 
    brand: "alpro", 
    image: "result-images/alpro_coconut_dessert.jpg",
    rating: 3.1,
    categories: ["dairy", "baking", "dessert"],
    averagePrice: 6.50,
    amount: "400g"
  },
  { id: 19, 
    name: 'creamy caramel', 
    brand: "alpro", 
    image: "result-images/alpro_creamy_caramel.jpg",
    rating: 4.7,
    categories: ["dairy", "dessert"],
    averagePrice: 6.50,
    amount: "400g"
  },
  { id: 20, 
    name: 'dairy free sour cream alternative', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_sour_cream_alternative.jpg",
    rating: 4.5,
    categories: ["dairy", "condiment"],
    averagePrice: 4.8,
    amount: "400g"
  }
];

这意味着我可以摆脱结果类并使其成为JSON对象,当我创建更少的类来只保存可能是JSON或javascript对象的对象时,这将是一个更快的长期目标。那么,摆脱类/接口并使用JSON对象会导致性能下降吗?

读一些关于性能的文章看来,如果让编译器知道对象是,那么它的性能会更好。这个例子有一个数组,但是我觉得它也适用于对象。例:

代码语言:javascript
运行
复制
// Here V8 can see that you want a 4-element array containing numbers:
var a = [1, 2, 3, 4];

// Don't do this:
a = []; // Here V8 knows nothing about the array
for(var i = 1; i <= 4; i++) {
     a.push(i);
}

我猜这是因为编译器不需要在内存中为对象留出很多可用的空间,因为它知道接下来会发生什么。这意味着类实例比没有类的javascript对象更快。

EN

回答 1

Stack Overflow用户

发布于 2016-09-20 09:44:40

如果您只想模拟服务器响应,我建议使用接口而不是类。

代码语言:javascript
运行
复制
export interface IResult {
  id: number;
  brand: string;
  name: string;
  description: string;
  image: string;
  rating: number;
  categories: string[];
  averagePrice: number;
  amount: string;
  reviews: Review[];
}

从‘./接口/实体/结果’导入{ IResult };

代码语言:javascript
运行
复制
export const RESULTS: IResult [] = [
  { id: 11, 
    name: 'dairy free parmesan alternative original', 
    brand: "Angel Foods", 
    image: "result-images/dairy_free_parmesan_alternative_original.jpg",
    rating: 4.3,
    categories: ["dairy"],
    averagePrice: 6.60
  }
  // ...
];

HTTP是一个“应用程序编程接口”,您可以根据它的名称猜测它,它是一个接口,在TypeScript中您可以使用接口来定义它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39590470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档