简体   繁体   English

基于浏览器的应用程序或独立的GUI应用程序?

[英]Browser-based application or stand-alone GUI app?

I'm sure this has been asked before, but I can't find it. 我确定之前已经问过,但我找不到它。

What are the benefits/limitations of using a browser-based interface for a stand-alone application vs. using a normal GUI framework? 使用基于浏览器的界面进行独立应用程序与使用普通GUI框架相比有哪些好处/限制?

I'm working on a Python program currently implement with wxPython for the GUI. 我正在研究一个目前使用wxPython实现GUI的Python程序。 The application is simply user-entry forms and dialogs. 该应用程序只是用户输入表单和对话框。 I am considering moving to PyQt because of the widgets it has (for future expansion), then I realized I could probably just use a browser to do much of the same stuff. 我正在考虑转移到PyQt,因为它有小部件(为了将来的扩展),然后我意识到我可能只是使用浏览器做很多相同的事情。

The application currently doesn't require Internet access, though it's a possibility in the future. 该应用程序目前不需要访问Internet,但将来可能会有这种情况。 I was thinking of using Karrigell for the web framework if I go browser-based. 如果我基于浏览器,我正在考虑将Karrigell用于Web框架。


Edit For clarification, as of right now the application would be browser-based, not web-based. 编辑为了澄清,截至目前,该应用程序将基于浏览器,而不是基于Web。 All the information would be stored locally on the client computer; 所有信息都将本地存储在客户端计算机上; no server calls would need to be made and no Internet access required (it may come later though). 不需要进行服务器调用,也不需要访问Internet(虽然可能会在以后出现)。 It would simply be a browser GUI instead of a wxPython/PyQt GUI. 它只是一个浏览器GUI而不是wxPython / PyQt GUI。 Hope that makes sense. 希望有道理。

Let's pretend for a moment that the development/deployment/maintenance effort/cost is equal and we look at it from the application user's perspective: 让我们假装开发/部署/维护工作/成本相等,我们从应用程序用户的角度来看待它:

Which UI is the user going to find more useful? 用户会找到哪个UI更有用?

in terms of 就......而言

  • Ease of use 使用方便
  • Responsiveness 响应
  • Familiar navigation/usage patterns 熟悉的导航/使用模式
  • Most like other tools/applications in use on the platform (ie, native) 最像平台上使用的其他工具/应用程序(即本机)

I understand that "useful" is subjective. 我知道“有用”是主观的。 I personally would never use (as a user, not developer) a web interface again if I could get away with it. 如果我能逃脱它,我个人永远不会再次使用(作为用户,而不是开发人员)Web界面。 I hate them. 他们

There are some applications that just don't make sense to develop as browser based apps. 有些应用程序在开发基于浏览器的应用程序时没有意义。

From a development perspective 从发展的角度来看

  • No two browsers available today render exactly the same. 今天没有两种浏览器呈现完全相同
  • Even with Ajax, javascript and dynamic, responsive interfaces are non-trivial to implement/debug. 即使使用Ajax,javascript和动态响应式接口也非常容易实现/调试。

There are many, many standalone GUI applications that are just terrible, no argument. 有很多很多独立的GUI应用程序都很糟糕,没有任何争议。 Development/deployment and maintenance for a multi-platform GUI is non-trivial. 多平台GUI的开发/部署和维护非常重要。

Developing good user-interfaces is hard, period. 开发良好的用户界面是困难的时期。

The reality is that I've made my living over the last 10 years developing mostly web based applications, because they're faster to develop, easier to deploy and provide enough utility that people will use them if they have to. 现实情况是,我在过去10年中一直致力于开发基于Web的应用程序,因为它们开发速度更快,部署更容易并且提供足够的实用程序,人们将在必要时使用它们。

I don't believe that most users would use a web interface if given an alternative. 如果给出替代方案,我不相信大多数用户会使用Web界面。

IMNSHO IMNSHO

The obvious advantages to browser-based: 基于浏览器的明显优势:

  • you can present the same UI regardless of platform 无论平台如何,您都可以呈现相同的UI
  • you can upgrade the application easily, and all users have the same version of the app running 您可以轻松升级应用程序,并且所有用户都运行相同版本的应用程序
  • you know the environment that your application will be running in (the server hardware/OS) which makes for easier testing and support compared to the multitude of operating system/hardware configurations that a GUI app will be installed on. 您知道应用程序将在其中运行的环境(服务器硬件/操作系统),与安装GUI应用程序的众多操作系统/硬件配置相比,这样可以更轻松地进行测试和支持。

And for GUI based: 对于基于GUI:

  • some applications (eg: image editing) arguably work better in a native GUI application 某些应用程序(例如:图像编辑)可以说在本机GUI应用程序中工作得更好
  • doesn't require network access 不需要网络访问

Also see my comments on this question : 另请参阅我对此问题的评论:

Cross-platform GUIs are an age-old problem. 跨平台GUI是一个古老的问题。 Qt, GTK, wxWindows, Java AWT, Java Swing, XUL -- they all suffer from the same problem: the resulting GUI doesn't look native on every platform. Qt,GTK,wxWindows,Java AWT,Java Swing,XUL - 他们都遇到了同样的问题:生成的GUI在每个平台上看起来都不是原生的。 Worse still, every platform has a slightly different look and feel , so even if you were somehow able to get a toolkit that looked native on every platform, you'd have to somehow code your app to feel native on each platform. 更糟糕的是,每个平台的外观和感觉都略有不同,所以即使你能够以某种方式获得在每个平台上看起来都是原生的工具包,你也必须以某种方式编写你的应用程序以在每个平台上感觉原生。

It comes down to a decision: do you want to minimise development effort and have a GUI that doesn't look and feel quite right on each platform, or do you want to maximise the user experience? 这取决于一个决定:您是否希望最大限度地减少开发工作,并且在每个平台上都拥有一个看起来不太合适的GUI,或者您是否希望最大化用户体验? If you choose the second option, you'll need to develop a common backend and a custom UI for each platform. 如果选择第二个选项,则需要为每个平台开发一个通用后端和自定义UI。 [edit: or use a web application.] [编辑:或使用网络应用程序。]

Another thought I just had: you also need to consider the kind of data that your application manipulates and where it is stored, and how the users will feel about that. 我刚想到的另一个想法是:您还需要考虑应用程序操作的数据类型以及存储位置,以及用户对此的感受。 People are obviously okay having their facebook profile data stored on a webserver, but they might feel differently if you're writing a finance application like MYOB and you want to store all their personal financial details on your server. 人们显然可以将他们的Facebook个人资料数据存储在网络服务器上,但如果您正在编写像MYOB这样的财务应用程序并且您希望将所有个人财务详细信息存储在您的服务器上,他们可能会有不同的感受。 You might be able to get that to work, but it would require a lot of effort to implement the required security and to assure the userbase that their data is safe. 您可能能够实现这一点,但需要付出很多努力才能实现所需的安全性并确保用户群的数据安全。 In that situation you might decide that the overall effort is lower if you go with a native GUI app. 在这种情况下,如果使用本机GUI应用程序,您可能会认为总体工作量较低。

When it comes to simple data entry using user-entry forms, I'd argue that using a browser-based solution would probably be easier and faster to develop. 当谈到使用用户输入表单的简单数据输入时,我认为使用基于浏览器的解决方案可能会更容易,更快速地开发。

Unless your core feature is the interface itself (" If it's a core business function -- do it yourself, no matter what. " , see In Defense of Not-Invented-Here Syndrome from Joel on Software ), I feel that the browser will be able to perform the form rendering and handling better than having to develop a GUI from scratch. 除非你的核心功能是界面本身(“ 如果它是一个核心业务功能 - 自己动手,不管是什么。 ”,请参阅Joel on Software 的“未发明 - 这里的综合症防御” ),我觉得浏览器会能够比从头开始开发GUI更好地执行表单呈现和处理。 Also, not to mention the it would take a much longer time to code a GUI as opposed to generating HTML forms and processing them after they are POSTed by the browser. 此外,更不用说编写GUI需要更长的时间,而不是生成HTML表单并在浏览器发布后处理它们。

What I found in the past was that I was asked by a friend to write an application to enter results from a survey. 我过去发现的是,朋友要求我写一份申请来输入调查结果。 At first, I was writing a Java applet to display the survey itself with all the radio boxes, when it hit me that I would be better off writing a simple HTTP server which would generate the forms and process them. 起初,我正在编写一个Java小程序,用所有的无线电盒显示调查本身,当它发现我最好写一个简单的HTTP服务器来生成表单并处理它们。

What it really comes down is to whether you are either developing: 它究竟归结为你是否正在开发:

  1. the user interface 用户界面
  2. data-entry application 数据输入应用程序

If you are making a data-entry application, then leave the user interface to the browser, and focus on your core functionality. 如果您正在创建数据输入应用程序,请将用户界面保留在浏览器中,并专注于您的核心功能。

Benefits of browser-based interface: 基于浏览器的界面的好处:

  • Easier to manage: no installation required on user machines, upgrades need only be performed on server side and are immediately available to all users. 易于管理:用户计算机无需安装,升级只需在服务器端执行,并且可立即供所有用户使用。 Data backup can be performed on a single machine as data won't be spread out across multiple clients. 数据备份可以在一台机器上执行,因为数据不会分布在多个客户端上。
  • Application can be accessed from any machine with a browser. 可以使用浏览器从任何计算机访问应用程序。
  • Can easily support multiple platforms consistently. 可以轻松支持多个平台。
  • Memory and CPU requirements may be considerably less on the client side as intensive operations can be performed on the server. 由于可以在服务器上执行密集操作,因此客户端上的内存和CPU要求可能会大大降低。
  • Increased security: data is stored on a single server instead of multiple client machines and access can be better controlled. 提高安全性:数据存储在单个服务器而不是多个客户端计算机上,可以更好地控制访问。
  • Many other benefits of a centralized environment including logging, data entered from multiple sources can immediately be available from other clients, etc. 集中式环境的许多其他好处包括日志记录,从多个源输入的数据可以立即从其他客户端等获得。
  • In my experience, it is often easier to debug and faster to develop web-based solutions. 根据我的经验,通常更容易调试并更快地开发基于Web的解决方案。

Benefits of GUI-based interface: 基于GUI的界面的好处:

  • May be easier to design a more responsive, fluid interface. 可能更容易设计一个响应更快,流畅的界面。
  • Can take advantage of OS-specific functionality that may not be available via a browser. 可以利用可能无法通过浏览器访问的特定于操作系统的功能。
  • Doesn't necessarily require network access. 不一定需要网络访问。
  • Don't need to worry about browser compatibility issues. 不必担心浏览器兼容性问题。
  • No single point of failure if server goes down or becomes unavailable. 如果服务器出现故障或变得不可用,则没有单点故障。

There's pretty good evidence that the trump-card issue in most cases is deployability and supportability. 有很好的证据表明,在大多数情况下,王牌问题是可部署性和可支持性。 Browser apps are lower overhead in general; 浏览器应用程序的开销通常较低; implementing and supporting more than a couple dozen users can end up consuming substantial support resources. 实施和支持超过几十个用户最终可能会消耗大量的支持资源。

I saw a table a year or two ago that showed something like: 我在一两年前看过一张桌子,上面写着:




UI quality - Desktop UI质量 - 桌面
Granularity of validation - Desktop 验证的粒度 - 桌面
Responsiveness - Desktop 响应能力 - 桌面
User acceptance - Desktop 用户接受 - 桌面
etc. - Desktop 等 - 桌面
etc. - Desktop 等 - 桌面
Install & Support - Browser 安装和支持 - 浏览器
and the Browser wins. 并且浏览器获胜。

For this task (form-based text entry) a browser is great. 对于此任务(基于表单的文本输入),浏览器很棒。 You don't need anything that being a desktop app will give you (speed, flexibility) 你不需要任何桌面应用程序会给你的东西(速度,灵活性)

There are draw-backs to being a web-application, such as.. 作为Web应用程序有一些缺点,例如..

It's a web-page. 这是一个网页。 There are things you just cannot (easily) do 有些事你不能(轻松)做

You cannot easily map the ctrl+j key to do something. 您无法轻松映射ctrl + j键来执行某些操作。 For example: Google Spreadsheet tries to map keyboard shortcuts and works most of the time, sometimes the browsers default handling of the shortcut takes over.. 例如:Google Spreadsheet尝试映射键盘快捷键并在大多数情况下工作,有时浏览器默认处理快捷方式接管..

You cannot make Growl alerts (An OS X notification framework). 您无法生成Growl警报(OS X通知框架)。 You cannot access the filesystem. 您无法访问文件系统。 It's difficult to allow access while offline. 离线时很难允许访问。

Javascript is very CPU-heavy. Javascript非常重CPU。

Try resizing a Google Spreadsheet document, or load a page on Digg (a very javascript heavy site) - the browsers CPU usage will be at 100% for a while.. Doing the same in a native desktop application is trivial 尝试调整Google电子表格文档的大小,或者在Digg(一个非常大的javascript网站)上加载页面 - 浏览器的CPU使用率将在一段时间内达到100%。在本机桌面应用程序中执行相同操作是微不足道的

When you perform upgrades, you force them on all your users. 执行升级时,会强制所有用户使用它们。 With a desktop application, they have the choice of not upgrading. 使用桌面应用程序,他们可以选择不升级。 For example, I didn't like one of the Google Reader upgrades, but I was stuck. 例如,我不喜欢谷歌阅读器升级之一,但我被卡住了。 Using NetNewsWire (a desktop application), if I don't like a change in the newest version, I can quite easily keep using this one (or try it, and downgrade) 使用NetNewsWire(桌面应用程序),如果我不喜欢最新版本的更改,我可以很容易地继续使用这个(或尝试它,并降级)

You web-server must be accessible at all times, for ever 您的Web服务器必须始终可以访问

If the server disappears, your users have no recourse. 如果服务器消失,则您的用户无法追索。 The application is gone. 申请已经不见了。 If it's down for 10 minutes, they cannot use it. 如果它停机10分钟,他们就无法使用它。


With your application, while I'm not too sure what it is, none of the above seems like its going to be an issue. 有了你的应用程序,虽然我不太清楚它是什么,但上述所有内容似乎都不会成为一个问题。

"It's a web -page" : Forms and dialogue boxes are easy to do in HTML and javascript (or even using server-side scripting, for example <?php if($_POST["email"] ==""){echo("Are you sure you want to continue?); ?> ) “这是一个网页” :表格和对话框很容易用HTML和javascript(甚至使用服务器端脚本,例如<?php if($_POST["email"] ==""){echo("Are you sure you want to continue?); ?>

"Javascript is very CPU-heavy" : Doesn't sound like your application will require any Javascript (maybe some client-side input-validation when the user clicks "Submit", to warn them about any input errors?) “Javascript非常耗费CPU” :听起来你的应用程序不需要任何Javascript(当用户点击“提交”时可能需要一些客户端输入验证,以警告他们任何输入错误?)

"Forced upgrades" : I imagine this may be desirable, as you wouldn't want users inputing data in the old way. “强制升级” :我认为这可能是可取的,因为您不希望用户以旧方式输入数据。

"Server must be accessible" : Could be an issue, but I don't think it'll be a large one.. Say you want to store all the users data in a central database, this issue becomes inescapable anyway - keeping a web and database server running isn't much more work than only a database (for the GUIs to connect to) “服务器必须是可访问的” :可能是一个问题,但我不认为它会是一个大问题。假设你想将所有用户数据存储在一个中央数据库中,这个问题无论如何都变得不可避免 - 保持一个网络并且数据库服务器运行的工作量不仅仅是数据库(用于连接的GUI)

Also, you get the benefits others have posted - you develop it once, and it runs identically on every operating system that can run a sane browser. 此外,您可以获得其他人发布的好处 - 您只需开发一次,并且在每个可以运行理智浏览器的操作系统上运行相同。

One of the things I hate about web based UIs is the fact that they run inside another window. 我讨厌基于Web的UI的一个原因是它们在另一个窗口内运行。 Meaning, you have controls -- maybe dozens of them -- that have nothing to do with your application. 意思是,你有控件 - 可能有几十个 - 与你的应用程序无关。 From a usability point of view this can be confusing though most of us have adapted by "tuning out" the extra stuff. 从可用性的角度来看,这可能令人困惑,尽管我们大多数人都通过“调出”额外的东西进行了调整。

As I look at my browser window as I type this, the window is perhaps 12 inches tall, but the window in which I type is only maybe 3 inches. 当我打开我的浏览器窗口时,窗口可能是12英寸高,但我输入的窗口可能只有3英寸。 And out of that 12 inches overall, perhaps two full inches are taken up with browser toolbars, tabs, rows of bookmarks and the statusbar, none of which have anything to do with the web app I'm interacting with. 在整个12英寸中,可能有两英寸用浏览器工具栏,标签,书签行和状态栏,这些都与我正在交互的网络应用程序无关。 There's a lot of wasted space (the edit window isn't as wide as the window as a whole, for example), space filled with stuff I don't need, etc. Some of the most fundamental controls (back button, I'm looking at you) can completely break poorly designed web applications. 有很多浪费的空间(编辑窗口不像整个窗口那么宽),空间充满了我不需要的东西等等。一些最基本的控件(后退按钮,我'我看着你)可以彻底打破设计不佳的网络应用程序。

Not to mention the fact that if I type a sufficiently long response I now end up with two sets of scrollbars. 更不用说如果我输入足够长的响应,我现在最终得到两组滚动条。 stackoverflow.com partially addresses that by giving me a resizable text area but I still have to interact with the inner scrollbar to scroll the text I'm editing, then scroll the whole window up or down to access the app controls at the top or bottom of the editing window. stackoverflow.com通过给我一个可调整大小的文本区域来部分解决这个问题,但我仍然需要与内部滚动条进行交互以滚动我正在编辑的文本,然后向上或向下滚动整个窗口以访问顶部或底部的应用程序控件编辑窗口。

All in all, a web based application just can't compare to the usability of a desktop application. 总而言之,基于Web的应用程序无法与桌面应用程序的可用性进行比较。 For me, then, the question simply becomes "are you more interested in usability, or in making your (as the developer) life easier". 那么,对我来说,问题只是变成“你对可用性更感兴趣,或者让你(作为开发人员)生活更轻松”。

If you want usability, go with a desktop application, hands down. 如果您想要可用性,请使用桌面应用程序。 If you're concerned with deployment and support a web app is something to consider, but there are still many easy ways to deploy desktop apps, including creating apps that can update themselves over the net at runtime. 如果您关注部署和支持,则需要考虑Web应用程序,但仍有许多简单的方法来部署桌面应用程序,包括创建可在运行时通过网络自行更新的应用程序。

My solution is this 我的解决方案是这个

  1. Website applications obviously go on browsers 网站应用程序显然是浏览器
  2. Networked applications that do not need accessing client's computer goes by browser 不需要访问客户端计算机的联网应用程序通过浏览器进行访问
  3. Any application that need to be accessed by more than a client at a time goes by browser 任何需要一次超过客户端访问的应用程序都是通过浏览器进行的
  4. Applications that will be used per client with no obvious need for network stays with gui and this may include software that needs a lot of security on its use (same security can be addressed for browser based though). 每个客户端将使用的应用程序没有明显需要使用gui进行网络保留,这可能包括需要大量安全性的软件(尽管可以针对基于浏览器来解决相同的安全性)。

This is something learnt through the hard way. 这是通过艰难的方式学到的东西。 One main reason for this is that customers find it easier to install and manage browser based apps much easier than gui based eg where using JavaWebStart means the client will need to have a minimum JRE and their likes whereas the browser based only needs a link. 其中一个主要原因是客户发现安装和管理基于浏览器的应用程序比基于gui更容易,例如使用JavaWebStart意味着客户端需要最少的JRE和他们的喜欢,而基于浏览器只需要一个链接。

IN all the decision is really yours!. 在所有的决定是真的你的! As a Java developer using JavaFX and Swing can solve my problem with this issue. 作为使用JavaFX和Swing的Java开发人员可以解决我的问题。

Browsers can be accessed anywhere with internet and you deploy it on the server. 可以通过Internet访问浏览器,并将其部署在服务器上。 The desktop app has to be deployed to their computers and each computer somehow has its own uniqueness even with same OS and same version. 桌面应用程序必须部署到他们的计算机上,并且即使在相同的操作系统和相同版本的情况下,每台计算机都有其独特之处。 This could bring you lots of hassles. 这可能会给你带来很多麻烦。 Go for web. 去寻找网络。

Everything has advantages and disavantages, but: 一切都有优点和缺点,但是:

I have yet to use a single browser-based application on localhost, intranet, or internet that feels nice to use, is responsive, and who's user interface isn't strictly limited by the limitations of HTML/JS/CSS. 我还没有在localhost,intranet或者互联网上使用一个基于浏览器的应用程序,感觉很好用,反应灵敏,而且用户界面的用户界面并没有受到HTML / JS / CSS限制的严格限制。

Note: Flash/Java-based UI is an exception (but that's even worse in some regards and I don't think it's really what you are talking about here). 注意:基于Flash / Java的UI是一个例外(但在某些方面甚至更糟,我认为这不是你在这里谈论的)。

The rich client GUI will generally be faster and better integrated with the look and feel the user is accustomed to deal with - this does not only mean bells and whistles, but also means a lot of time saving features like keyboard shortcuts. 富客户端GUI通常会更快,更好地与用户习惯处理的外观和感觉集成 - 这不仅意味着花里胡哨,还意味着节省大量时间等功能,如键盘快捷键。

The web based UI will be more portable since does not bound the development to a single platform, and if the application runs in remote it is easier to update and to test all of it (excluding the GUI...) on a consistent environment (your server). 基于Web的UI将更具可移植性,因为它不会将开发限制在单个平台上,如果应用程序在远程运行,则更容易更新并在一致的环境中测试所有(不包括GUI ...)(你的服务器)。 But you should understand that while all of that is great and really groundbreaking, it also comes with some serious drawbacks. 但你应该明白,虽然所有这些都是伟大的,并且真正具有开创性,但它也带来了一些严重的缺点。 You should not only debug the application under all the target systems, but also under each single browser running on each single target system... and don't forget many versions of the same browser may coexists for some time, and that each browser's settings will be probably running different sets (and versions) of popular plugins which makes it behave differently, and probably network settings will be customized by users. 您不仅应该在所有目标系统下调试应用程序,还应该在每个单个目标系统上运行的每个浏览器下调试...并且不要忘记同一浏览器的许多版本可能共存一段时间,并且每个浏览器的设置将可能运行不同的流行插件集(和版本),使其行为不同,并且可能由用户自定义网络设置。 If the application is in remote it opens a lot of interesting new problem, starting from different ISP that will drop different problems in the middle, or services downtimes due to network problems of you server, the user's machines or anywhere in the middle. 如果应用程序位于远程,它会打开很多有趣的新问题,从不同的ISP开始,会在中间丢弃不同的问题,或者由于服务器,用户的计算机或中间的任何地方的网络问题导致服务停机。 A remote application is not an option for all the users in countries where the network service is of low quality, or is not reasonably priced; 远程应用程序不适用于网络服务质量低或价格合理的国家/地区的所有用户; the same is true for you: you can start providing such a service only if in your country bandwidth is reasonable and reasonably priced. 对您来说也是如此:只有在您的国家带宽合理且价格合理的情况下,您才能开始提供此类服务。 And if the application has to do something nontrivial on the user's system, you will be probably doomed in creating a lot of platform dependent code anyway. 如果应用程序必须在用户的系统上做一些非常重要的事情,那么无论如何,您可能注定要创建许多与平台相关的代码。

As bottom line, today there are advantages and disadvantages in any of the two solutions. 作为底线,今天两种解决方案中的任何一种都有优点和缺点。 There are some applications that really need to be developed under the rich client model, and there are applications that really need to be developed under the web based paradigm. 有些应用程序确实需要在富客户端模型下开发,并且有些应用程序确实需要在基于Web的范例下开发。 It's good to have both the options, it is critical to have a clear idea of what is the way fitting best our development / deployment / support strategy, and, I may add, it is silly to go after one or the other as if it is the definitive silver bullet following the fashion of the moment. 拥有两个选项是很好的,关键是要清楚地了解最适合我们的开发/部署/支持策略的方式,而且,我可以补充一点,追求一个或另一个是愚蠢的是当下时尚的最终银弹。

I think the browser based UI concept is here to stay. 我认为基于浏览器的UI概念仍然存在。 There is nothing more portalble than the web itself, and as long as one stays within the boundaries of decent javascript libraries...the rendering would be almost the same. 没有什么比网络本身更具门户性,只要一个人留在体面的javascript库的边界......渲染几乎是一样的。 Plus since the rendering is not your headache, you can concern yourself more with developing the business logic itself. 此外,由于渲染不是您的头疼,您可以更多地关注自己开发业务逻辑。

I am all for it... 我完全同意...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM