- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 knockout 应用程序,其中“估算”是页面的主要对象。该估计包含 WorkOrder 对象 (WorkOrdersDTO) 的 observableArray,但一次仅显示一个 WorkOrder 对象以供编辑。用户可以通过从选择列表中进行选择来选择显示哪个工作订单以进行编辑。我遇到的问题是我正在使用名为 CurrentWorkOrder 的对象来引用当前正在编辑的 WorkOrder。设置此对象时,我遇到了一些性能问题。估计包含的工作订单越多,这些性能问题就越严重。当用户添加工作订单时会出现最大的问题。这是该过程的代码:
self.addWorkOrder = function () {
tempWOId += 1;
var workOrder = new WorkOrder();
workOrder.WorkOrderId(tempWOId);
workOrder.WorkOrderNo(self.SetWorkOrderNo());
self.estimate().WorkOrdersDTO.push(workOrder);
self.estimate().CurrentWorkOrder($.grep(self.estimate().WorkOrdersDTO(), function (wo) { return wo == workOrder })[0]);
};
该函数的最后一行是花费最多时间的一行。我也尝试过使用这个,但它甚至更慢。
self.estimate().CurrentWorkOrder(self.estimate().WorkOrdersDTO()[self.estimate().WorkOrdersDTO().length - 1]);
我还删除了 html 中的“with”绑定(bind),但没有看到任何结果。我什至注释掉了发生绑定(bind)的整个 html,以确保性能问题不是由此引起的,并且性能没有变化。
有什么想法吗?
我返回并用几种不同的方式对该行代码进行计时,结果如下:当前工作订单($.grep) - 613.000ms
当前工作订单(WorkOrdersDTO.length) - 740.000ms
当前工作订单(工作订单) - 689.000 毫秒
CurrentWorkOrder($.grep) 没有 html 引用 - 317.000ms
当绑定(bind)到 CurrentWorkOrder 的 HTML 被删除时,性能会好得多,这让我相信这就是问题所在。这是该部分的完整 HTML:
<div id="work-order-details">
<div class="work-order-details" data-bind='with: estimate' style="margin-bottom:5px;">
<table style="width:100%">
<tr>
<td>
<table>
<tr>
<td style="text-align:right;">
Group
</td>
<td>
<select class="k-input" data-bind='options: WorkOrderGroupsDTO, value: CurrentWorkOrder().WorkOrderGroupId, optionsValue: "WorkOrderGroupId", optionsText: "GroupName", optionsCaption: "--Select--"'></select>
</td>
<td>
<span id="AddWorkOrderGroupButton"><span class="icon-add" data-bind='click: $root.addWorkOrderGroup'></span>
</td>
<td>
Service Date
</td>
<td>
<input style="width:120px;" id='service-date' data-bind="value: CurrentWorkOrder().ServiceDateDisplay" />
</td>
</tr>
</table>
</td>
<td style="text-align:right;">
Additional Work Orders <select id='workOrderSelect' class="k-input num-textbox" data-bind="options: WorkOrdersDTO, optionsValue: 'WorkOrderId', optionsText: 'WorkOrderNo'"></select>
</td>
</tr>
</table>
</div>
<div class="work-order-details" data-bind='with: estimate'>
<table class="table-container" style="border:solid 1px darkgray;">
<tr>
<th class="table-cell-2 estimate-wo-header" colspan="2">INSTRUCTIONS</th>
</tr>
<tr class="table-row">
<td colspan='2'>
<textarea class="textarea" name="" id="estimate-textarea" rows="4" data-bind='value: CurrentWorkOrder().Instructions' placeholder='Enter Instructions...'></textarea>
</td>
</tr>
<tr>
<th class="table-cell-2 estimate-wo-header labor-tasks">LABOR INFORMATION
<a href="#" data-bind='click: $root.addWorkOrderLaborTask'>Add</a>
</th>
<th class="table-cell-2 estimate-wo-header packing-materials">PACKING MATERIALS<a href="#" data-bind='click: $root.addWorkOrderPackingMaterial'>Add</a></th>
</tr>
<tr class="table-row">
<td class="table-cell-3 labor-tasks" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Task</td>
<td>Qty</td>
<td>Hours</td>
<td>RT Rate</td>
<td>OT Rate</td>
<td>PT Rate</td>
<td>Cost</td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderLaborTasksDTO">
<tr>
<td>
<select class="k-input smaller-textbox" data-bind='options: LaborTaskData, value: LaborTaskId, optionsValue: "LaborTaskId", optionsText: "Task", optionsCaption: "--Select--"'/>
</td>
<td>
<input type="number" min='0' class="k-textbox num-textbox" style="width:40px;" data-bind='value: Quantity' onkeypress="return numeric_only(event)" />
</td>
<td>
<input type="number" min='0' class="k-textbox num-textbox" data-bind='value: TotalHours' onkeypress="return numeric_only(event)" />
</td>
<td>
$0.00
</td>
<td>
$0.00
</td>
<td>
$0.00
</td>
<td>
<span data-bind='text: TotalCostDisplay'></span>
</td>
<td>
<a href='#' data-bind='click: $root.removeWorkOrderLaborTask'>X</a>
</td>
</tr>
</tbody>
</table>
</td>
<td class="table-cell-2 packing-materials" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Material</td>
<td>Qty</td>
<td>Unit Price</td>
<td>Cost</td>
<td></td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderPackingMaterialsDTO">
<tr>
<td><select style="width:275px;" class="k-input" data-bind="options: PackingMaterialData, value: MaterialId, optionsValue: 'MaterialId', optionsText: 'Description', optionsCaption: '--Select--'"></select></td>
<td><input type="number" min='0' class="k-textbox num-textbox" data-bind='value: Quantity' onkeypress="return numeric_only(event)" /></td>
<td><span data-bind='text: UnitPrice'></span></td>
<td><span data-bind='text: CostDisplay'></span></td>
<td><a href='#' data-bind='click: $root.removeWorkOrderPackingMaterial'>X</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th class="table-cell-2 estimate-wo-header installation-products">INSTALLATION <a id='add-installation-product' href="#" data-bind="click: $root.addWorkOrderInstallationProduct">Add</a></th>
<th class="table-cell-2 estimate-wo-header unitized-items">UNITIZED PRICING <a id='add-installation-product' href="#" data-bind="click: $root.addWorkOrderUnitizedItem">Add</a></th>
</tr>
<tr class="table-row">
<td class="table-cell-2 installation-products" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Manufacturer</td>
<td>Product Line</td>
<td>Cost</td>
<td></td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderInstallationProductsDTO">
<tr>
<td hidden data-bind='text: WorkOrderInstallationProductId'></td>
<td>
<select class="k-input larger-textbox select-mfr" data-bind="options: ManufacturerData, value: ManufacturerId, optionsValue: 'ManufacturerId', optionsText: 'Name', optionsCaption: '--Select--'"></select>
</td>
<td>
<select data-bind="options: ProductLines, value: ProductId, optionsValue: 'ProductLineId', optionsText: 'Name', optionsCaption: '--Select--'" id="" class="k-input big-textbox"></select>
</td>
<td data-bind="text: CostDisplay"></td>
<td>
<a href='#' data-bind='click: $root.editWorkOrderInstallationProduct'>Edit</a>
<a href='#' data-bind='click: $root.removeWorkOrderInstallationProduct'>X</a>
</td>
</tr>
</tbody>
</table>
</td>
<td class="table-cell-2 unitized-items" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Service</td>
<td>Qty</td>
<td>Unit Price</td>
<td>Cost</td>
<td></td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderUnitizedItemsDTO">
<tr>
<td><select style="width:275px;" class="k-input" data-bind="options: UnitizedItemData, value: UnitId, optionsValue: 'UnitId', optionsText: 'Description', optionsCaption: '--Select--'"></select></td>
<td><input type="number" min='0' class="k-textbox num-textbox" data-bind='value: Quantity' style="width:40px;" onkeypress="return numeric_only(event)" /></td>
<td><span data-bind='text: UnitPrice'></span></td>
<td><span data-bind='text: CostDisplay'></span></td>
<td><a href='#' data-bind='click: $root.removeWorkOrderUnitizedItem'>X</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th class="table-cell-2 estimate-wo-header storage">STORAGE & HANDLING <a id='add-storage' href="#" data-bind="click: $root.addWorkOrderStorage">Add</a></th>
<th class="table-cell-2 estimate-wo-header tech-services">TECH SERVICES<a href="#" data-bind='click: $root.addWorkOrderTechService'>Add</a></th>
</tr>
<tr class="table-row">
<td class="table-cell-2 storage" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Inventory</td>
<td>Storage</td>
<td>Handling</td>
<td>Valuation</td>
<td>Cost</td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderStoragesDTO">
<tr>
<td class="storage-cell"><span data-bind="text: InventoryTypeName"></span></td>
<td class="storage-cell"><span data-bind="text: EstimatedStorage"></span></td>
<td class="storage-cell"><span data-bind="text: HandlingIn"></span></td>
<td class="storage-cell"><span data-bind='text: ValuationTypeCharges'></span></td>
<td class="storage-cell"><span data-bind='text: EstimatedStorage'></span></td>
</tr>
</tbody>
</table>
</td>
<td class="table-cell-2 tech-services" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class="estimate-table">
<tr class="header-row">
<td>Service</td>
<td>Qty</td>
<td>Unit Price</td>
<td>Cost</td>
<td></td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderTechServicesDTO">
<tr>
<td><select style="width:275px;" class="k-input" data-bind="options: TechServiceData, value: UnitId, optionsValue: 'UnitId', optionsText: 'Description', optionsCaption: '--Select--'"></select></td>
<td><input type="number" min='0' class="k-textbox num-textbox" data-bind='value: Quantity' onkeypress="return numeric_only(event)" /></td>
<td><span data-bind='text: UnitPrice'></span></td>
<td><span data-bind='text: CostDisplay'></span></td>
<td><a href='#' data-bind='click: $root.removeWorkOrderTechService'>X</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th class="table-cell-2 estimate-wo-header other-services">OTHER SERVICES <a id='add-other-service' href="#" data-bind='click: $root.addWorkOrderOtherService'>Add</a></th>
<th class="table-cell-2 estimate-wo-header third-party-services">THIRD PARTY SERVICES <a id='add-third-service' href="#" data-bind='click: $root.addWorkOrderThirdPartyService'>Add</a></th>
</tr>
<tr class='table-row'>
<td class="table-cell-2 other-services" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class='estimate-table'>
<tr class="header-row">
<td>Description</td>
<td>Cost</td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderOtherServicesDTO">
<tr>
<td><input style="width:360px;" class="k-textbox" type="text" data-bind="value: Description" /></td>
<td><input class="k-textbox smaller-textbox" data-bind='value: CostDisplay' onkeypress="return numeric_only(event)" /></td>
<td><a href='#' data-bind='click: $root.removeWorkOrderOtherService'>X</a></td>
</tr>
</tbody>
</table>
</td>
<td class="table-cell-2 third-party-services" style="border:solid 1px darkgray;padding-left:10px;padding-bottom:10px;">
<table class='estimate-table'>
<tr class="header-row">
<td>Description</td>
<td>Source</td>
<td>Src Cost</td>
<td>Cost</td>
</tr>
<tbody class='table-body' data-bind="foreach: CurrentWorkOrder().WorkOrderThirdPartyServicesDTO">
<tr>
<td><input class="k-textbox" type="text" data-bind="value: Description" /></td>
<td><input class="k-textbox smaller-textbox" type="text" data-bind="value: Source" /></td>
<td><input class="k-textbox mini-textbox" type="text" data-bind="value: SourceCost" /></td>
<td><input class="k-textbox mini-textbox" data-bind='value: CostDisplay' style="width:40px;" /></td>
<td><a href='#' data-bind='click: $root.removeWorkOrderThirdPartyService'>X</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
</div>
我认为不使用表格可以使标记渲染速度更快,但我一直犹豫是否要切换它,因为这是其他开发人员更喜欢的。
最佳答案
你的最后一行实际上只是一种复杂且耗时的做法
self.estimate().CurrentWorkOrder(workOrder);
由于 workOrder
是使用构造函数实例化的,因此它将是数据中唯一可以与自身进行比较的对象,因此无需搜索它。
关于javascript - Knockout - 绑定(bind)到引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537948/
我有一个 foo 类,它有一个 bar 方法,它接受可调用的东西(函数指针/仿函数)。这个可调用的东西应该作为绑定(bind)元素传递给另一个方法 doit 和第三个方法 bar_cb 方法。 #in
我正在尝试在我的 WPF 4.0 应用程序(使用 VS 2010 Pro RTM)中创建自定义 TabItem 模板/样式,但尽管一切似乎都正常工作,但我注意到跟踪窗口中存在绑定(bind)错误。 我
作为一名刚接触 Android 的开发人员,我想我可能误解了绑定(bind)服务。 我创建了一项服务来结束对服务器的访问。作为此服务的一部分,该服务正在监听多播地址,以识别本地网络上的设备何时出现和消
这个问题在这里已经有了答案: What is the use of the JavaScript 'bind' method? (23 个回答) 关闭 7 年前。 所以我一直在尝试了解一些 JS 上
我不明白这三种语法之间的区别: where a = f (b) do a <- f (b) do let a = f (b) 我确实明白了a <- f(b)与其他两个不同,在大多数情况下,我尝试了所有
我在将 Cocoa 项目从手动同步接口(interface)模型转换为绑定(bind)模型时遇到问题,这样我就不必担心接口(interface)粘合代码。 我关注了 CocoaDevCentral C
我正在尝试找出一种好的方法来对处理大数据集的代码进行并行化,然后将结果数据导入 RavenDb。 数据处理受 CPU 限制和数据库导入 IO 限制。 我正在寻找一种解决方案,以对 Environmen
我正在 foreach 循环中生成单选按钮。我试图将选中的属性绑定(bind)到父级中的基本可观察值。不幸的是,当单击单选按钮时,父级的属性似乎没有在单击处理程序中更新。 基于一些previous w
在我的 Windows Phone 应用程序中,我有两个 LongListSelectors并排在页面上。我想做到这一点,以便当用户滚动其中一个时,另一个滚动相同的量。 两个 LongListSele
我在网上看到这个问题准备面试: Given a non-preemptive kernel which type of process will get affected morein terms o
我有一个 foreach 绑定(bind),如下所示: Summary Permitting 原因是有两个选项卡始终存在,并且我根据是否添加了其他选项卡来添加其他选项
任何人都有绑定(bind)相同的情况DataContext到 TextBlock 中的 Text 属性(例如)。 我必须分配 DataContext以我的风格反射(reflect)基于 Datacon
给定以下代码: Login 和下面的javascript $(function () { $('#btnLogin').click(function () { co
我使用 boost::asio 创建了一个服务器。我在绑定(bind)到端点时遇到问题。所以,如果我在构造函数中初始化一个接受器: Server::Server(QWidget *parent) :
我正在将现有项目从 MySQL 转换为 Postgres。代码中有相当多的原始 SQL 文字使用 ? 作为占位符,例如 SELECT id FROM users WHERE
似乎在绑定(bind)某些数据时出错了,有人可以帮我解决我哪里出错了,尽管我无法弄清楚。 真的不需要在这里显示太多,这是 Binding,我已经通过移除背景并在其中放置颜色来测试背景,效果很好。 编辑
我正在尝试使用 wcf 构建一个 http 监听器(web 服务)。这个监听器是一个更大的桌面应用程序的一部分。此桌面应用程序还会调用 http 监听器。 当监听器接收到数据时,它应该被传递到桌面应用
嘿嘿。 我正在使用 Node.JS 和 child_process 来生成 bash 进程。我试图了解我是否正在执行 I/O 绑定(bind)、CPU 绑定(bind)或两者兼而有之。 我正在使用 p
尝试执行以下操作并出现“Got interpolation ({{}}) where expression was expected”错误。 {{item.name}} 谢谢!
我有一个导入的 Java 库,它是我解决方案中的“绑定(bind)库”项目。 我正在尝试从解决方案中的另一个项目绑定(bind)到第 3 方库中的服务。 第 3 方库文档 [在 java 中] 非常简
我是一名优秀的程序员,十分优秀!