<div class="gmail_quote">On Mon, Nov 30, 2009 at 4:07 PM, Oliver Hunt <span dir="ltr">&lt;<a href="mailto:oliver@apple.com">oliver@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div style="word-wrap:break-word"><br><div><div class="im"><div>On Nov 30, 2009, at 3:43 PM, Dmitry Titov wrote:</div><br><blockquote type="cite">I don&#39;t think it&#39;s correct to say that SharedWorkers are not useful and &quot;we need a SharedScript instead&quot;. They are different things and can address different use cases. For example, SharedWorker is great to make sure there is only one &#39;app instance&#39; running - exactly because it is shared inter-process, it can be used as a &quot;inter-process synchronization primitive&quot; to control how many app instances are opened. SharedScript is a container for data and code shared between pages that comprise a &quot;web application&quot; and normally run in the same process. As in native apps, whether or not multiple instances of the app can run at the same time depends on the author of the app, and can be done either way.<div>

<br></div><div><div>Multi-process browsers are bringing more complexity (and benefits). Not all <a href="http://www.chromium.org/developers/design-documents/process-models" target="_blank">technical issues</a> are completely resolved in Chrome&#39;s implementation, and we might need (or not) some mechanism of saying that a bunch of pages form &quot;an application&quot; and should share a process. Right now, it&#39;s unclear if such mechanism even needed though.</div>

<div><br></div><div>I agreed with you to remove the implementation details from the doc because indeed they do not belong there. Not that they are not existing. For example, the fact that in Chrome SharedWorkers are indeed inter-process theoretically could be different. WebWorkers spec does not specify where and how to look for instances of SharedWorkers, although it implies some useful degree of sharing. The fact that in Chrome they are shared across all processes is a detail of Chrome implementation.</div>
</div></blockquote><div><br></div></div><div>The Worker implementation behaviour is not really relevant to this conversation.  The issue is whether a browser implements a spec in a correct manner, that&#39;s why implementation is not described.  A worker for instance may be per thread, per process, or may not even represent a separate machine thread and could be implemented by in software just running each task in sequence (assuming a sufficiently careful implementation, etc, etc).</div>
<div><br></div><div>The issue we&#39;re discussing however was what Darin bought up -- should a multiprocess browser be allowed to have multiple distinct instances of the same Global/SharedScript?  the answer is clearly no (and that concept has been removed from the spec);</div>
</div></div></blockquote><div><br></div><div><br></div><div>Sorry, I think you misunderstand.  The way Chrome processes are divided is an implementation detail, but it is an important one.  I think it is folly to ignore it when designing web APIs.  We&#39;ll likely *never* implement APIs that involve cross-process, synchronous script evaluation.  We have some experience with that in supporting plugins, and I can tell you that I do not favor it: not just because of implementation complexity but also because of the performance impact it entails.</div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div><div>  The issue being that in regular day to day use such a browser could end up producing behaviour inconsistent with behaviour that of browsers that actually did provide a single shared context -- in effect all users of Global/SharedScript would have to assume that their Global/SharedScript context was not in fact shared.</div>
</div></div></blockquote><div><br></div><div>This is true, but I don&#39;t think it is a big deal.  Processes are roughly divided up into browsing units.  You start a new browsing unit by opening a new tab and navigating it.  By doing so, you are creating a separate world that cannot see other worlds.  SharedWorkers (as well as cookies and other storage mechanisms) provide a bridge between these worlds, but window.open and SharedScripts do not (b/c of the script connection they imply).</div>
<div><br></div><div>Cheers,</div><div>-Darin</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div><div>
<br></div><div>The resultant implication is that a &quot;Shared&quot; or &quot;Global&quot; script would have not need to be shared at all and each page could have it&#39;s own copy -- effectively degenerating to a glorified iframe.</div>
<div><br></div><div>I would consider it to be a warning sign of potential badness in a spec if behaviour was being defined by perceived difficulty in implementing a feature, rather than on the desired end user behaviour.  In general I feel a spec should always favour complexity of implementation over complexity in use, after all if a feature is hard to implement it still only needs to be implemented a relatively small number of times (basically once per browser/engine) pushing the complexity on to end developers however then means thousands (millions?) of developers have to implement the same code and deal with the same complexity over and over again.  Obviously if there&#39;s an option to avoid any complexity that would be best, but i suspect that&#39;s unlikely to exist :-D</div>
<div><br></div><font color="#888888"><div>--Oliver</div><br></font><blockquote type="cite"><div class="im"><div>
<div><br></div><div>Dmitry</div><div><br><div class="gmail_quote">On Mon, Nov 30, 2009 at 3:08 PM, Geoffrey Garen <span dir="ltr">&lt;<a href="mailto:ggaren@apple.com" target="_blank">ggaren@apple.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>&gt; Just a note:<br>
&gt;<br>
&gt; In Chrome, a SharedWorker is reachable from any WebKit process, whereas a SharedScript would only be reachable within a WebKit process.  This is an interesting distinction, and I can imagine some use cases for SharedWorker that SharedScript could not address.  (This distinction arises because we did not want to build a script proxy between WebKit processes as that would be quite costly.)<br>


&gt;<br>
&gt; For example, suppose you wanted to have only one instance of a web app responsible for manipulating a database or communicating with a server.  There&#39;s no guarantee that multiple instances of a web app would all run in the same WebKit process.<br>


<br>
</div>Actually, I objected to that distinction, and it has been removed from the specification.<br>
<br>
You can find the discussion here: <a href="https://bugs.webkit.org/show_bug.cgi?id=31317" target="_blank">https://bugs.webkit.org/show_bug.cgi?id=31317</a>.<br>
<br>
And the specification here: <a href="http://docs.google.com/View?id=dxv3cth_4gvggh3gh" target="_blank">http://docs.google.com/View?id=dxv3cth_4gvggh3gh</a>.<br>
<br>
I&#39;m concerned that a lot of Chrome engineers are speaking for &quot;Google&quot;, but they don&#39;t really have their stories straight. First, a group of Chrome engineers said that &quot;Google&quot; needed SharedWorker, so it was implemented in WebKit. Now, a group of Chrome engineers says &quot;Google&quot; can&#39;t use SharedWorker, and needs SharedScript instead. So, we&#39;re gearing up to implement that. Meanwhile, not all Chrome engineers agree about what SharedWorker is or why it is that way, and we can reasonably assume that the actual Google engineers who have asked for these technologies disagree even more.<br>


<br>
It&#39;s OK to disagree and hash out ideas. But it&#39;s a little weird to try to dictate the direction of WebKit in the name of &quot;Google&quot; and &quot;several major apps with millions of users&quot;, when that standard seems to blow whichever way the wind goes.<br>


<br>
Geoff</blockquote></div><br></div></div></div><div class="im">
_______________________________________________<br>webkit-dev mailing list<br><a href="mailto:webkit-dev@lists.webkit.org" target="_blank">webkit-dev@lists.webkit.org</a><br><a href="http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev" target="_blank">http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev</a><br>
</div></blockquote></div><br></div><br>_______________________________________________<br>
webkit-dev mailing list<br>
<a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
<a href="http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev" target="_blank">http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev</a><br>
<br></blockquote></div><br>