initial commit
[home-automation.git] / RGraph / docs / async.html
1 <?php ob_start('ob_gzhandler') ?>
2 <!DOCTYPE html >
3 <html>
4 <head>
5     <meta http-equiv="X-UA-Compatible" content="chrome=1">
6     <!--
7         /**
8         * o------------------------------------------------------------------------------o
9         * | This file is part of the RGraph package - you can learn more at:             |
10         * |                                                                              |
11         * |                          http://www.rgraph.net                               |
12         * |                                                                              |
13         * | This package is licensed under the RGraph license. For all kinds of business |
14         * | purposes there is a small one-time licensing fee to pay and for non          |
15         * | commercial  purposes it is free to use. You can read the full license here:  |
16         * |                                                                              |
17         * |                      http://www.rgraph.net/LICENSE.txt                       |
18         * o------------------------------------------------------------------------------o
19         */
20     -->
21     <title>RGraph: HTML5 canvas graph library - Asynchronous processing</title>
22     
23     <meta name="keywords" content="rgraph html5 canvas graph docs async asynchronous" />
24     <meta name="description" content="RGraph: HTML5 canvas graph software - Documentation about asynchronous processing" />
25
26     <link rel="stylesheet" href="../css/website.css" type="text/css" media="screen" />
27     <link rel="icon" type="image/png" href="../images/favicon.png">
28
29     <script src="../libraries/RGraph.common.core.js"></script>
30     <script src="../libraries/RGraph.line.js"></script>
31     <!--[if IE 8]><script src="../excanvas/excanvas.compressed.js"></script><![endif]-->
32     
33     <script>
34         window.onload = function ()
35         {
36             var duration = (new Date().getTime() - timer.getTime()) / 1000;
37             document.getElementById("waiting").innerHTML = '<span style="color: green">Done! Extra time taken: ' + duration.toFixed(1) + ' seconds</span>';
38             alert('The window.onload event fired, extra time taken: ' + duration.toFixed(1) + ' seconds');
39         }
40
41         // Create a timer to show the difference
42         timer = new Date();
43     </script>
44 </head>
45 <body>
46
47     <!-- Social networking buttons -->
48     <script src="../libraries/RGraph.common.core.js" ></script>
49     
50     <script>
51         function HideTwitterDIV ()
52         {
53             document.getElementById("twitter_div").style.opacity = 0;
54             document.getElementById("twitter_div").style.display = 'none';
55         }
56
57
58         function ShowTwitterDIV (e)
59         {
60             var e   = RGraph.FixEventObject(document.all ? event : e);
61             var div = document.getElementById("twitter_div");
62             var img = document.getElementById("twitter_icon");
63
64             div.style.display = 'block';
65             div.style.left    = (RGraph.getCanvasXY(img)[0] + img.offsetWidth - div.offsetWidth + 110) + 'px';
66             div.style.top     = (RGraph.getCanvasXY(img)[1] - 1) + 'px';
67
68             /**
69             * Fade it in
70             */
71             setTimeout('document.getElementById("twitter_div").style.opacity = 0.2;', 25);
72             setTimeout('document.getElementById("twitter_div").style.opacity = 0.4;', 50);
73             setTimeout('document.getElementById("twitter_div").style.opacity = 0.6;', 100);
74             setTimeout('document.getElementById("twitter_div").style.opacity = 0.8;', 125);
75             setTimeout('document.getElementById("twitter_div").style.opacity = 1.0;', 150);
76
77             e.stopPropagation();
78
79             return false;
80         }
81
82         /**
83         * This code installs the event handler that hides the Twitter DIV
84         */
85         if (RGraph.isIE8()) {
86              window.attachEvent('onload', function () {document.body.attachEvent('onclick', HideTwitterDIV);});
87         } else {
88             window.addEventListener('click', HideTwitterDIV, false);
89         }
90     </script>
91
92     <!-- The twitter DIV --> 
93     <div id="twitter_div" style="position: absolute;top: 0;left: 0;background-color: #eee;border: 2px dashed black;box-shadow: 0 0 15px #aaa;-moz-box-shadow: 0 0 15px #aaa;-webkit-box-shadow: 0 0 15px #aaa;padding: 3px;display: none;opacity: 0;z-index: 99;"> 
94         <a href="http://twitter.com/home/?status=RGraph%3A+HTML5+canvas+graph+library+based+on+the+HTML5+canvas+tag+http%3A%2F%2Fwww.rgraph.net+%23rgraph+%23html5+%23canvas" target="_blank" title="Share on Twitter" rel="nofollow" style="text-decoration: none">Tweet&nbsp;about&nbsp;RGraph</a><br>
95         <a href="http://twitter.com/_rgraph" style="text-decoration: none" rel="nofollow" target="_blank">Follow for HTML5 news</a> 
96     </div>
97
98     <div id="social_icons" class="warning" style="top: 0; left: 5px; position: absolute">
99         <script>
100             // Opera fix
101             if (navigator.userAgent.indexOf('Opera') == -1) {
102               document.getElementById("social_icons").style.position = 'fixed';
103               document.getElementById("twitter_div").style.position = 'fixed';
104     
105             }
106         </script>
107     
108         <b style="display: inline-block; position: relative; top: 1px">Bookmark and share:</b>
109     
110     
111             <div id="social">
112                 <a title="Bookmark with delicious" href="http://delicious.com/save?jump=close&v=4&noui&jump=close&url=http://www.rgraph.net&notes=RGraph%20is%20a%20HTML5%20based%20graph%20library%20supporting%20a%20wide%20range%20of%20different%20graph%20types:Bar,%20Bipolar,%20Donut,%20Funnel,%20Gantt,%20Horizontal%20Bar,%20LED,%20Line,%20Meter,%20Odometer,%20Pie,%20Progress%20Bar,%20Rose,%20RScatter,%20Scatter%20and%20Traditional%20Radar&title=RGraph:%20HTML5%20canvas%20graph%20library%20based%20on%20the%20HTML5%20canvas%20tag" target="_blank">
113                     <img src="../images/delicious.png" alt="Bookmark with delicious" width="22" height="22" border="0" align="absmiddle" /> 
114                 </a> 
115      
116                 <a href="" target="_blank" onmouseover="if (document.getElementById('twitter_div').style.display == 'none') ShowTwitterDIV(event);" onclick="event.stopPropagation(); event.cancelBubble = true; return false">
117                     <img src="../images/twitter.png" id="twitter_icon" alt="tweet this site" width="22" height="22" border="0" align="absmiddle" />
118                 </a>
119     
120     
121 <!--
122                 <a title="Post to Google Buzz!" href="" onclick="window.open('http://www.google.com/buzz/post?url=http://www.rgraph.net&imageurl=http://www.rgraph.net/images/logo.png', 'google_buzz_window', 'width=800,height=400,top=100,left=100'); return false">
123                     <img src="../images/buzz.png" width="22" height="22" alt="Post to Google Buzz!" align="absmiddle" style="position: relative; top: -2px; border: 0" border="0"/>
124                 </a>
125     
126     
127                 <a title="Share RGraph on Facebook" href="" onclick="window.open('http://www.facebook.com/sharer.php?u=http://www.rgraph.net&t=RGraph:%20HTML5%20canvas%20graph%20library', 'facebook_window', 'width=500,height=300,top=100,left=100'); return false">
128                     <img src="../images/facebook.png" width="22" height="22" alt="Post to Facebook" align="absmiddle" style="position: relative; top: -2px; border: 0" border="0"/>
129                 </a>
130     
131                 <a href="mailto:share@friendfeed.com" title="Share on FriendFeed"> 
132                     <img src="../images/friendfeed.png" width="22" height="22" alt="Share on FriendFeed" border="0" align="absmiddle" /> 
133                 </a>
134     
135                 <a href="http://www.stumbleupon.com/submit?url=http://www.rgraph.net" target="_blank" title="Share on StumbleUpon" >
136                     <img src="../images/stumble.png" alt="Stumble! this site" width="22" height="22" border="0" align="absmiddle" /> 
137                 </a>
138 -->
139             </div>
140     </div>
141     <!-- /Social networking buttons -->
142
143     <div id="breadcrumb">
144         <a href="../index.html">RGraph: HTML5 canvas graph library</a>
145         >
146         <a href="index.html">Documentation</a>
147         >
148         Asynchronous processing
149     </div>
150
151     <h1>RGraph: HTML5 canvas graph library - Asynchronous processing</h1>
152
153     <script>
154         if (RGraph.isIE8()) {
155             document.write('<div style="background-color: #fee; border: 2px dashed red; padding: 5px"><b>Important</b><br /><br /> Internet Explorer 8 does not natively support the HTML5 canvas tag, so if you want to see the graphs, you can either:<ul><li>Install <a href="http://code.google.com/chrome/chromeframe/">Google Chrome Frame</a></li><li>Use ExCanvas. This is provided in the RGraph Archive.</li><li>Use another browser entirely. Your choices are Firefox 3.5+, Chrome 2+, Safari 4+ or Opera 10.5+. </li></ul> <b>Note:</b> Internet Explorer 9 fully supports the canvas tag. Click <a href="http://groups.google.com/group/rgraph/browse_thread/thread/c5651ff8c56b8f3c#" target="_blank">here</a> to see some screenshots.</div>');
156         }
157     </script>
158     
159     <p id="waiting" style="; font-weight: bold; font-size: 16pt"><span style="color: #aa0">Waiting for onload event...</span></p>
160
161     <p style="background-color: #eee; border: 1px dashed gray; padding: 5px; height: 50px;">
162         <span style="display: inline-block; margin-left: 10px; float: right">
163             <script>
164                 document.write('<img src="http://ie.microsoft.com/testdrive/HTML5/DOMContentLoaded/whidbey.jpg?' + Math.random() + '" width="50" height="50" />&nbsp;');
165                 document.write('<img src="http://ie.microsoft.com/testdrive/HTML5/DOMContentLoaded/window.jpg?' + Math.random() + '" width="50" height="50" />&nbsp;');
166                 document.write('<img src="http://ie.microsoft.com/testdrive/HTML5/DOMContentLoaded/whidbey2.jpg?' + Math.random() + '" width="50" height="50" />');
167             </script>
168         </span>
169
170         These images are here to pad the page and slow down loading so that the window.onload event is slowed. This makes the
171         difference far more visible.
172     </p>
173
174     <canvas id="myCanvas" width="600" height="250" style="float: right">[No canvas support]</canvas>
175
176     <script>
177         /**
178         * Create the line graph
179         */
180         function CreateLineGraph ()
181         {
182             var line = new RGraph.Line('myCanvas', [1,2,4,2,1,3,5,6,6,5,3,5]);
183             line.Set('chart.title', 'Sales for Acme Inc.');
184             line.Set('chart.labels', ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
185             line.Set('chart.hmargin', 10);
186             line.Set('chart.linewidth', 5);
187             line.Set('chart.shadow', true);
188             line.Set('chart.shadow.offsetx', 0);
189             line.Set('chart.shadow.offsety', 0);
190             line.Set('chart.shadow.blur', 15);
191             line.Draw();
192         }
193     
194         RGraph.Async(CreateLineGraph);
195     </script>
196
197     <p>
198         Asynchronous processing can speed up the display of your graphs, because the browser gets to your code, sets it
199         going and then continues on rendering the page. Particularly if you have a weighty page,
200         it can make quite a difference. The <i>RGraph.Async()</i> function itself is very simple, but because it can make
201         a significant difference to the speed of your page, it is documented here. There's an example of it to the right.
202         One thing to remember is to ensure your canvas tag is defined first before you set the function that creates
203         the graph going.
204     </p>
205     
206     <p>
207         Although asynchronous processing can speed up your pages, it can also give the appearance of slower pages due to partial
208         rendering, (ie your pages render a bit at a time). You therefore will need to experiment to get the best result for you.
209     </p>
210
211     <br clear="all" />
212
213     <pre class="code">
214 &lt;script src="RGraph.common.js"&gt;&lt;/script&gt;
215 &lt;script src="RGraph.line.js"&gt;&lt;/script&gt;
216
217 &lt;canvas id="myCanvas" width="300" height="100"&gt;[No canvas support]&lt;/canvas&gt;
218
219 &lt;script&gt;
220     /**
221     * Create the line graph
222     */
223     function CreateLineGraph ()
224     {
225         var line = new RGraph.Line('myCanvas', [1,2,4,2,1,3,5,6,6,5,3,5]);
226         line.Set('chart.title', 'Sales for Acme Inc.');
227         line.Set('chart.labels', ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
228         line.Set('chart.hmargin', 10);
229         line.Set('chart.linewidth', 5);
230         line.Set('chart.shadow', true);
231         line.Set('chart.shadow.offsetx', 0);
232         line.Set('chart.shadow.offsety', 0);
233         line.Set('chart.shadow.blur', 15);
234         line.Draw();
235     }
236
237     RGraph.Async(CreateLineGraph);
238 &lt;/script&gt;
239 </pre>
240
241     <p><b>Things to remember</b></p>
242     
243     <ul>
244         <li>All your libraries must be loaded first. In the pages &lt;head&gt; for example. If not, you won't be able to create your graphs.</li>
245         <li>Your &lt;canvas&gt; tag must be defined before setting the asynchronous code going. If not, then the canvas may be referenced before it exists, and thus your graphs will not be created.</li>
246         <li>
247             The users connection speed may be a factor. Slower connections may mean, for example, that the onload event doesn't fire very
248             quickly. If you're using the onload event to create your graphs then asynchronous creation instead may give you more
249             apparent speed ups. Alternatively, careful placement of the &lt;canvas&gt; tag and the code that creates the graph may suffice
250             instead.
251         </li>
252         <li>Since the MSIE/ExCanvas combo requires you to use the window.onload event, aynchronous graph creation in this case will probably not be any help.</li>
253         <li>
254             Since a dev release of version 4, Google Chrome has had an issue when aynchronous processing is used, meaning that
255             text isn't always displayed. The solution here is simply to not use asynchronous processing. As of 27th March 2010,
256             Chrome 5 appears to be fine.
257         </li>
258     </ul>
259
260     <h4>See also</h4>
261     
262     You might also be interested in the alternative, <a href="domcontentloaded.html">DOMContentLoaded</a> event.
263
264 </body>
265 </html>