对于页面上的用户控件,我知道每个控件都会通过将自己的状态存储在 ViewState 中来影响内存使用。我的问题是,多少钱?
例如 - 我有一个反馈表作为我的母版页上的控件。默认设置为 Visible="false"。用户单击反馈按钮,控件在需要时变为可见。
通过控制每个页面(因为它位于母版页中)但不可见,相对性能会产生什么影响?我正在开发的网站可能会有大量流量,我想知道如果事情变得缓慢,我是否会让自己头疼。
谢谢
对于页面上的用户控件,我知道每个控件都会通过将自己的状态存储在 ViewState 中来影响内存使用。我的问题是,多少钱?
例如 - 我有一个反馈表作为我的母版页上的控件。默认设置为 Visible="false"。用户单击反馈按钮,控件在需要时变为可见。
通过控制每个页面(因为它位于母版页中)但不可见,相对性能会产生什么影响?我正在开发的网站可能会有大量流量,我想知道如果事情变得缓慢,我是否会让自己头疼。
谢谢
性能可能会影响服务器和客户端。首先,您希望减少发送到客户端的 HTML 数量,包括视图状态。如果这位于每个页面上,那么您将比实际需要更频繁地发送此视图状态信息。
我认为你应该有一些逻辑来确保反馈表单控件只添加到反馈页面。与其使用 visible="false",不如将其放在它自己的页面上并链接到它,或者将控件动态添加到页面中。
主要好处将是减少带宽使用,并在客户端更快地呈现页面。次要好处包括更容易调试和更清晰的代码呈现给客户端。
对于所有性能问题,您应该测试性能并根据硬数据做出判断。在这种情况下,计算客户端上视图状态的大小,然后乘以请求数以查看服务器上带宽使用的大小。在客户端使用像 FireBug 这样的工具来了解客户端收到的整体页面大小。
这取决于控制。具有数百行的 Datagrid 可能会生成 100k 的视图状态。另一方面,复选框不会生成太多。
您可以将反馈表单控件放在空的 aspx 页面上,在浏览器中访问它并检查 __viewstate 隐藏字段。这是您反馈表单将在视图状态方面添加到每个页面的数量。然后你必须决定它是否可以接受。
我不会在一开始就考虑这样的优化。如果以后它会变慢,您可以随时将表单更改为纯 html 并使用 ajax 或其他东西将其数据发布到服务器。只要是用户控制而不是复制粘贴的内容,就很容易优化