【问题标题】:Windows Phone 7 Web Browser Updating Too SlowlyWindows Phone 7 Web 浏览器更新太慢
【发布时间】:2012-02-13 04:03:51
【问题描述】:

我有一个带有 XNA 应用程序的 Windows Phone 7 Silverlight。 我还使用了一项服务,该服务使用 javascript 将动态图像呈现到屏幕上。

在 PC 上,javascript 流畅流畅,我可以流畅地在图像之间跳转。但是,我需要把这个功能带到手机上。

到目前为止,我已经设法使用 Silverlight 中的 Web 浏览器控件来加载我的 HTML 文件并执行脚本。问题在于,一旦应用程序的“动态”部分启动,Web 控件的更新速度就不够快。与 PC 版本产生的平滑滑动动画不同,我变得口吃,类似于游戏中的低 FPS。

所以,我想知道:有没有办法提高网络浏览器控件的更新率?

我的另一个想法(但实施失败)是在应用程序的 XNA 页面中嵌入 Web 浏览器并使用 XNA 的更新率,这要高得多(我猜是标准的 60帧数)。但是,Silverlight Web 浏览器控件似乎没有更新呈现功能,而且我找不到将 Web 浏览器嵌入 XNA 应用程序本身的库。

有谁知道如何让我的动态 HTML 文件使用 javascript 流畅流畅地呈现?

编辑: webBrowser.InvalidateArrange() 在 30 FPS 下使用 Timer 似乎加快了浏览器刷新速度,但它仍然很跳跃。如果我尝试增加 FPS,浏览器会恢复缓慢。

【问题讨论】:

  • 这可能只是手机硬件和JS引擎慢的问题。您可以尝试使用 CSS 转换来制作动画 - 这对大多数移动设备都有很大帮助。
  • 由于我使用的是第三方 javascript 库(它为我提供了一个控件),所以我不能使用除 JS 之外的任何东西。

标签: javascript silverlight-4.0 windows-phone-7.1 windows-phone-7


【解决方案1】:

我猜是标准的 60 fps

标准是 30 FPS

我找不到在 XNA 应用程序本身中嵌入 Web 浏览器的库。

我认为它不会有任何改进。

所以,我想知道:有什么办法可以提高 网页浏览器控制?

  1. 制作一个在主页上只有一个 Web 浏览器控件的测试应用 - 确保除了 Web 控件之外没有任何东西占用资源。
  2. 检查应用程序的执行情况。如果它足够好,请在用户使用“动态”部分时减少应用中的任何其他处理
  3. 如果性能仍然很差,你唯一能做的就是优化javascript本身
  4. 如果仍然无法接受,请删除该功能或制作一个原生功能。
  5. 利润!

【讨论】:

  • 目前浏览器应用程序是主页上唯一的东西。浏览器启动时没有其他处理。我无法优化 javascript,因为它是第三方库并且我无权访问它(它是由 Google 提供的,所以我想它已经非常优化了)。我无法删除该功能,因为这是该功能。我不能制作原生的,没有资源/不能违反 Google TOS。 Re XNA 性能:XNA 游戏更新非常快。我想为 XNA 构建的网络浏览器会运行良好。我只是还没找到。
  • Google 的目标浏览器范围很广,不太可能针对 WP7 进行优化。 Web Control 是原生的,不管它在哪里托管。如果你不能重新设计/削减/优化你注定要失败。
【解决方案2】:

使用设置为 17 毫秒 (60 FPS) 的计时器,我强制浏览器失效,这会导致它重绘。除此之外,我还消除了不需要重新绘制浏览器的框架。

    DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 0, 0, 17); // 30 FPS 
    timer.Tick += new EventHandler(timer_Tick);
    timer.Start();

    void timer_Tick(object sender, EventArgs e)
    {
        if (loaded && coded && needToUpdate)
        {
                webBrowser.InvokeScript("setPitch", pitch.ToString());
                webBrowser.InvokeScript("setHeading", heading.ToString());
                Redraw();

                needToUpdate = false;
        }
    }

    void Redraw()
    {
        webBrowser.InvalidateMeasure();
        webBrowser.InvalidateArrange();
        webBrowser.Visibility = System.Windows.Visibility.Visible;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多