Reliable JavaScript - Lawrence Spencer - E-Book

Reliable JavaScript E-Book

Lawrence Spencer

2,2
34,99 €

oder
Beschreibung

Create more robust applications with a test-first approach to JavaScript Reliable JavaScript, How to Code Safely in the World's Most Dangerous Language demonstrates how to create test-driven development for large-scale JavaScript applications that will stand the test of time and stay accurate through long-term use and maintenance. Taking a test-first approach to software architecture, this book walks you through several patterns and practices and explains what they are supposed to do by having you write unit tests. Write the code to pass the unit tests, so you not only develop your technique for structuring large-scale applications, but you also learn how to test your work. You'll come away with hands-on practice that results in code that is correct from the start, and has the test coverage to ensure that it stays correct during subsequent maintenance. All code is provided both in the text and on the web, so you can immediately get started designing more complete, robust applications. JavaScript has graduated from field-validation scripts to full-scale applications, but many developers still approach their work as if they were writing simple scripts. If you're one of those developers, this book is the solution you need to whip your code into shape and create JavaScript applications that work. * Write more concise and elegant code by thinking in JavaScript * Test the implementation and use of common design patterns * Master the use of advanced JavaScript features * Ensure your code's conformance to your organization's standards If you're ready to step up your code and develop more complete software solutions, Reliable JavaScript is your essential resource.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 603

Bewertungen
2,2 (18 Bewertungen)
0
3
1
10
4



Reliable JavaScript®

Lawrence D. Spencer Seth H. Richards

Reliable JavaScript®

Published by John Wiley & Sons, Inc. 10475 Crosspoint Boulevard Indianapolis, IN 46256 www.wiley.com

Copyright © 2015 by John Wiley & Sons, Inc., Indianapolis, Indiana

Published simultaneously in Canada

ISBN: 978-1-119-02872-7

ISBN: 978-1-119-02873-4 (ebk)

ISBN: 978-1-119-02874-1 (ebk)

Manufactured in the United States of America

No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008, or online at http://www.wiley.com/go/permissions.

Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional services. If professional assistance is required, the services of a competent professional person should be sought. Neither the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or website may provide or recommendations it may make. Further, readers should be aware that Internet websites listed in this work may have changed or disappeared between when this work was written and when it is read.

For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.

Wiley publishes in a variety of print and electronic formats and by print-on-demand. Some material included with standard print versions of this book may not be included in e-books or in print-on-demand. If this book refers to media such as a CD or DVD that is not included in the version you purchased, you may download this material at http://booksupport.wiley.com. For more information about Wiley products, visit www.wiley.com.

Library of Congress Control Number: 2015941920

Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Programmer to Programmer, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. JavaScript is a registered trademark of Oracle America, Inc. All other trademarks are the property of their respective owners. John Wiley & Sons, Inc. is not associated with any product or vendor mentioned in this book.

We dedicate this book to all JavaScript developers who work hard to hone their craft. You are making the world a more beautiful place.

CREDITS

PROJECT EDITORChristina Haviland

TECHNICAL EDITORSKeith Pepin John Peloquin

PRODUCTION MANAGERKathleen Wisor

COPY EDITORNancy Rapoport

MANAGER OF CONTENT DEVELOPMENT & ASSEMBLYMary Beth Wakefield

MARKETING DIRECTORDavid Mayhew

MARKETING MANAGERCarrie Sherrill

PROFESSIONAL TECHNOLOGY & STRATEGY DIRECTORBarry Pruett

BUSINESS MANAGERAmy Knies

ASSOCIATE PUBLISHERJim Minatel

PROJECT COORDINATOR, COVERBrent Savage

PROOFREADERNancy Carrasco

INDEXERJohnna VanHoose Dinse

COVER DESIGNERWiley

COVER IMAGE© Getty Images/Andrew Rich

ABOUT THE AUTHORS

LARRY SPENCER is Vice President of Application Development at ScerIS, a software and services company in Sudbury, Massachusetts. He and his team create browser-based applications in AngularJS, with a C#/Web API/SQL Server back end. Larry's 35-year career has included stints programming in COBOL, C, C++, C#, and even mainframe assembly language, but he says JavaScript is the most fun. A frequent speaker at Code Camps and other gatherings, Larry enjoys sharing his love of software with the development community. You can find his blog at http://FascinatedWithSoftware.com.

Larry's outside interests include philosophy, chess, and classical guitar. He lives in Marlborough, Massachusetts.

SETH RICHARDS has been crafting software professionally since 2002. He got his start programming embedded devices for the bar and nightclub industry and transitioned to web application development in 2007. He has worked on numerous web-based applications ranging from an enterprise-class geographic information system–centric physical asset management system to a social network for product discovery and recommendation.

Seth graduated from Plymouth State College (now University) in Plymouth, New Hampshire, where he studied computer science and mathematics. He is currently pursuing his M.S. in Computer Science from the Georgia Institute of Technology. Seth's blog can be found at http://blog.shrichards.com, and he can be followed on Twitter at @shrichards.

ABOUT THE TECHNICAL EDITORS

KEITH PEPIN has been developing sites and applications on the web for over 17 years. Early in his career, he fell in love with JavaScript and has been passionately building dynamic user experiences ever since. He is currently a Senior Software Engineer at Meltwater, and is using HTML5, CSS3, JavaScript, AngularJS, Node.js, and MongoDB to build the next generation of their online marketing intelligence platform. When not coding or spending time with his family, he enjoys other geeky pursuits, including all forms of games, comic books, painting, and sketching.

JOHN PELOQUIN is a software engineer with over 10 years of JavaScript experience ranging across applications of all sizes. John earned his B.A. in Mathematics from U.C. Berkeley and is currently a lead engineer at Spreemo, a healthcare technology startup in NYC. Prior to editing this volume, John edited Professional Website Performance by Peter Smith (Wiley 2012) and Professional JavaScript for Web Developers, 3rd ed. by Nicholas Zakas (Wiley 2012). When he is not coding or collecting errata, John can occasionally be found doing stand-up comedy at an open mic.

ACKNOWLEDGMENTS

Thank you to my wife, Bethany, for her love and support while we wrote this book, and for enduring (or enjoying?) many husband-less nights and weekends while I worked to meet a deadline.

–SETH RICHARDS

Thanks to my family for encouraging me to pursue my dreams. My dreams may include writing a book, but they begin and end with you.

–LARRY SPENCER

This book would not have been possible without the willingness of others to share their knowledge and expertise with us and the community at large in book, blog, and source-code format. Together, we'd like to acknowledge and thank:

Douglas Crockford, for his exposure of good parts of JavaScript and his work on jsLint.

Nicolas Zakas, for the numerous books and blog posts he wrote that acted as guides through JavaScript's sometimes-treacherous waters, and also his maintenance of and contributions to ESLint.

Stoyan Stefanov, for his instruction on applying pattern-based development to JavaScript.

Robert C. Martin, for instilling in us the desire to write clean code.

Fredrik Appelberg, for his creation of, and Dave Clayton for his contributions to, the AOP.js aspect-oriented programming framework.

Mike Bostock, for inspiring us with the D3 library for SVG graphics.

The folks at Pivotal Labs, for the creation of the open-source JavaScript framework Jasmine, and members of the community that have contributed to the framework.

The AngularJS team, for showing the world a great way to build single-page applications.

The vast and growing network of generous people on sites such as Stack Overflow and GitHub. Without you, we'd still be thumbing through manuals.

We would also like to express our appreciation to our project editor, Chris Haviland, who deftly maneuvered us through the writing process from beginning to end. Our copy editor, Nancy Rapoport, has read our book more carefully, and more times, than anyone else ever will. For her dedication and suggestions we offer heartfelt thanks. We would also like to express our sincerest thanks to our technical editors, Keith Pepin and John Peloquin. Their JavaScript prowess helped us avoid more than a few technical errors. Should any errors still exist, it's likely because we didn't follow some of their advice. Our hats are off to you, gentlemen.

Finally, we'd like to thank Carol Long, the Executive Acquisitions Editor at Wiley, who gave us the opportunity to write this book. Without her, we'd still just be a couple of guys that write software for a living. We're still that, but now we're authors, too. Carol announced her retirement from the publishing industry just before we finished the book. We sure hope we weren't the straw that broke the camel's back! Thank you, Carol, and we wish you nothing but sunny days and margaritas in your retirement.

–LARRY AND SETH

CONTENTS

INTRODUCTION

THE RISE OF JAVASCRIPT AS A FIRST-CLASS LANGUAGE

THE EASE OF WRITING TRULY DISASTROUS CODE IN JAVASCRIPT

THE EASE OF UNINTENTIONALLY BREAKING JAVASCRIPT CODE

THIS BOOK'S INTENDED AUDIENCE

HOW THIS BOOK IS STRUCTURED

WHAT YOU NEED TO USE THIS BOOK

CONVENTIONS

SOURCE CODE

ERRATA

P2P.WROX.COM

PART I: LAYING A SOLID FOUNDATION

CHAPTER 1 PRACTICING SKILLFUL SOFTWARE ENGINEERING

WRITING CODE THAT STARTS CORRECT

WRITING CODE THAT STAYS CORRECT

SUMMARY

CHAPTER 2 TOOLING UP

USING A TESTING FRAMEWORK

USING A DEPENDENCY-INJECTION FRAMEWORK

USING AN ASPECT TOOLKIT

USING A CODE-CHECKING TOOL

SUMMARY

CHAPTER 3 CONSTRUCTING RELIABLE OBJECTS

USING PRIMITIVES

USING OBJECT LITERALS

USING THE MODULE PATTERN

USING OBJECT PROTOTYPES AND PROTOTYPAL INHERITANCE

CREATING OBJECTS WITH NEW

USING CLASSICAL INHERITANCE

USING FUNCTIONAL INHERITANCE

MONKEY-PATCHING

SUMMARY

PART II: TESTING PATTERN-BASED CODE

CHAPTER 4 REVIEWING THE BENEFITS OF PATTERNS

CASE STUDY

PRODUCING MORE ELEGANT CODE BY USING A BROADER VOCABULARY

PRODUCING RELIABLE CODE WITH WELL-ENGINEERED, WELL-TESTED BUILDING BLOCKS

SUMMARY

CHAPTER 5 ENSURING CORRECT USE OF THE CALLBACK PATTERN

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

AVOIDING PROBLEMS

SUMMARY

CHAPTER 6 ENSURING CORRECT USE OF THE PROMISE PATTERN

UNDERSTANDING PROMISES THROUGH UNIT TESTS

CHAINING PROMISES

USING A PROMISE WRAPPER

UNDERSTANDING STATES AND FATES

DISTINGUISHING STANDARD PROMISES FROM JQUERY PROMISES

SUMMARY

CHAPTER 7 ENSURING CORRECT USE OF PARTIAL FUNCTION APPLICATION

UNIT-TESTING A PARTIAL FUNCTION APPLICATION

CREATING AN ASPECT FOR PARTIAL FUNCTION APPLICATION

DISTINGUISHING BETWEEN PARTIAL FUNCTION APPLICATION AND CURRYING

SUMMARY

CHAPTER 8 ENSURING CORRECT USE OF THE MEMOIZATION PATTERN

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

ADDING MEMOIZATION WITH AOP

SUMMARY

CHAPTER 9 ENSURING CORRECT IMPLEMENTATION OF THE SINGLETON PATTERN

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

SUMMARY

CHAPTER 10 ENSURING CORRECT IMPLEMENTATION OF THE FACTORY PATTERN

WRITING UNIT TESTS FOR A FACTORY

IMPLEMENTING THE FACTORY PATTERN

CONSIDERING OTHER FACTORY TYPES

SUMMARY

CHAPTER 11 ENSURING CORRECT IMPLEMENTATION AND USE OF THE SANDBOX PATTERN

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

SUMMARY

CHAPTER 12 ENSURING CORRECT IMPLEMENTATION OF THE DECORATOR PATTERN

DEVELOPING A DECORATOR THE TEST-DRIVEN WAY

SUMMARY

CHAPTER 13 ENSURING CORRECT IMPLEMENTATION OF THE STRATEGY PATTERN

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

SUMMARY

CHAPTER 14 ENSURING CORRECT IMPLEMENTATION OF THE PROXY PATTERN

DEVELOPING A PROXY THE TEST-DRIVEN WAY

SUMMARY

CHAPTER 15 ENSURING CORRECT IMPLEMENTATION OF CHAINABLE METHODS

UNDERSTANDING THE PATTERN THROUGH UNIT TESTS

CHAINING THEN

SUMMARY

PART III: TESTING AND WRITING WITH ADVANCED JAVASCRIPT FEATURES

CHAPTER 16 CONFORMING TO INTERFACES IN AN INTERFACE-FREE LANGUAGE

UNDERSTANDING THE BENEFITS OF INTERFACES

UNDERSTANDING THE INTERFACE SEGREGATION PRINCIPLE

USING TEST-DRIVEN DEVELOPMENT TO CREATE A CONTRACT REGISTRY

SUMMARY:

CHAPTER 17 ENSURING CORRECT ARGUMENT TYPES

UNDERSTANDING THE OPPORTUNITIES AND RISKS POSED BY JAVASCRIPT’S TYPE-FREE PARAMETERS

EXTENDING THE CONTRACTREGISTRY TO CHECK ARGUMENTS

SUPPORTING CONTRACT LIBRARIES

PUTTING IT ALL TOGETHER

COMPARING THE ASPECT-ORIENTED SOLUTION TO A STATIC SOLUTION

SUMMARY

CHAPTER 18 ENSURING CORRECT USE OF CALL, APPLY, AND BIND

EXPLORING HOW THIS IS BOUND

CREATING AND TESTING CODE THAT USES CALL, APPLY, AND BIND

SUMMARY

CHAPTER 19 ENSURING CORRECT USE OF METHOD-BORROWING

ENSURING THE BORROWING OBJECT IS SUITABLE

ANTICIPATING SIDE EFFECTS ON THE BORROWER

ANTICIPATING SIDE EFFECTS ON THE DONOR OBJECT

SUMMARY

CHAPTER 20 ENSURING CORRECT USE OF MIXINS

CREATING AND USING MIXINS

SUMMARY

CHAPTER 21 TESTING ADVANCED PROGRAM ARCHITECTURES

ENSURING RELIABLE USE OF THE OBSERVER PATTERN

ENSURING RELIABLE USE OF THE MEDIATOR PATTERN

SUMMARY

PART IV: SPECIAL SUBJECTS IN TESTING

CHAPTER 22 TESTING DOM ACCESS

UNIT-TESTING UI

OPTIMIZING YOUR CODE WITH A PROFILER

SUMMARY

CHAPTER 23 ENSURING CONFORMANCE TO STANDARDS

USING ESLINT

ENFORCING ARCHITECTURAL DIVISIONS

SUMMARY

PART V: SUMMARY

CHAPTER 24 SUMMARY OF THE PRINCIPLES OF TEST-DRIVEN DEVELOPMENT

RECALLING WHY TEST-DRIVEN DEVELOPMENT IS WORTHWHILE

PRACTICING TEST-DRIVEN DEVELOPMENT

SUMMARY

CHAPTER 25 SUMMARY OF JAVASCRIPT IDIOMS IN THIS BOOK

REVIEWING OBJECTS

REVIEWING VARIABLES

REVIEWING FUNCTIONS

REVIEWING BOOLEAN OPERATIONS

SUMMARY

INDEX

EULA

List of Tables

Chapter 3

Table 3.1

Table 3.2

Table 3.3

Table 3.4

Table 3.5

Table 3.6

Table 3.7

Chapter 4

Table 4.1

Chapter 10

Table 10.1

Chapter 21

Table 21.1

Table 21.2

List of Illustrations

Chapter 1

Figure 1.1

Figure 1.2

Figure 1.3

Figure 1.4

Chapter 2

Figure 2.1

Figure 2.2

Figure 2.3

Figure 2.4

Figure 2.5

Figure 2.6

Figure 2.7

Figure 2.8

Figure 2.9

Figure 2.10

Figure 2.11

Figure 2.12

Figure 2.13

Chapter 3

Figure 3.1

Figure 3.2

Figure 3.3

Chapter 5

Figure 5.1

Figure 5.2

Figure 5.3

Figure 5.4

Figure 5.5

Figure 5.6

Figure 5.7

Figure 5.8

Chapter 6

Figure 6.1

Chapter 7

Figure 7.1

Chapter 8

Figure 8.1

Figure 8.2

Chapter 9

Figure 9.1

Figure 9.2

Figure 9.3

Figure 9.4

Chapter 10

Figure 10.1

Chapter 11

Figure 11.1

Figure 11.2

Figure 11.3

Figure 11.4

Figure 11.5

Figure 11.6

Figure 11.7

Figure 11.8

Figure 11.9

Chapter 12

Figure 12.1

Figure 12.2

Figure 12.3

Figure 12.4

Figure 12.5

Figure 12.6

Figure 12.7

Chapter 13

Figure 13.1

Figure 13.2

Figure 13.3

Figure 13.4

Chapter 14

Figure 14.1

Figure 14.2

Figure 14.3

Figure 14.4

Figure 14.5

Figure 14.6

Figure 14.7

Figure 14.8

Figure 14.9

Figure 14.10

Figure 14.11

Chapter 15

Figure 15.1

Figure 15.2

Figure 15.3

Figure 15.4

Figure 15.5

Figure 15.6

Chapter 16

Figure 16.1

Figure 16.2

Figure 16.3

Figure 16.4

Figure 16.5

Chapter 17

Figure 17.1

Figure 17.2

Chapter 18

Figure 18.1

Figure 18.2

Figure 18.3

Figure 18.4

Figure 18.5

Figure 18.6

Figure 18.7

Figure 18.8

Figure 18.9

Figure 18.10

Figure 18.11

Figure 18.12

Figure 18.13

Figure 18.14

Figure 18.15

Chapter 19

Figure 19.1

Figure 19.2

Figure 19.3

Figure 19.4

Figure 19.5

Figure 19.6

Figure 19.7

Chapter 20

Figure 20.1

Figure 20.2

Figure 20.3

Figure 20.4

Figure 20.5

Figure 20.6

Figure 20.7

Figure 20.8

Figure 20.9

Figure 20.10

Figure 20.11

Figure 20.12

Figure 20.13

Figure 20.14

Figure 20.15

Figure 20.16

Figure 20.17

Figure 20.18

Figure 20.19

Figure 20.20

Chapter 21

Figure 21.1

Figure 21.2

Figure 21.3

Figure 21.4

Figure 21.5

Figure 21.6

Chapter 22

Figure 22.1

Figure 22.2

Figure 22.3

Figure 22.4

Figure 22.5

Figure 22.6

Figure 22.7

Figure 22.8

Figure 22.9

Figure 22.10

Figure 22.11

Figure 22.12

Figure 22.13

Figure 22.14

Figure 22.15

Chapter 23

Figure 23.1

Figure 23.2

Figure 23.3

Figure 23.4

Figure 23.5

Figure 23.6

Figure 23.7

Figure 23.8

Figure 23.9

Figure 23.10

Figure 23.11

Figure 23.12

Figure 23.13

Figure 23.14

Figure 23.15

Figure 23.16

Guide

Cover

Table of Contents

Part

Pages

xxi

xxii

xxiii

xxiv

xxv

xxvi

xxvii

xxviii

xxix

1

3

4

5

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

105

107

108

109

110

111

112

113

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

140

141

142

143

144

145

146

147

148

149

150

151

152

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

173

174

175

176

177

178

179

180

181

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

199

200

201

202

203

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

256

257

258

259

260

261

262

263

264

265

266

267

269

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

306

307

308

309

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

373

374

375

376

377

378

379

380

381

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

401

402

403

404

405

406

407

408

409

411

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

439

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

463

465

466

467

468

469

470

471

472

473

475

476

477

478

479

480

481

482

483

484

485

486

487

489

490

491

492

493

494

495

496

497

INTRODUCTION

WHEN WE SHARED THE TITLE OF THIS BOOK, Reliable JavaScript, with fellow developers, we received feedback such as:

“Now

there's

a juxtaposition!”

“It must be a very short book.”

“Will I find it next to the latest John Grisham thriller in the fiction section of the bookstore?”

No, this book is not a work of fiction.

The feedback we received about the title of the book illustrates a broader perception about JavaScript that some developers with experience in classical, compiled languages have: JavaScript is used to create flashy portfolio websites or simple to-do apps; it has no business in my mission-critical enterprise application.

In the past that was true, but no more.

THE RISE OF JAVASCRIPT AS A FIRST-CLASS LANGUAGE

JavaScript's reputation as a wild child is well-deserved, and we hope to amuse you with some of its exploits in the next two sections. However, like a spoiled heiress who inherits the family business and surprises everyone by rising to the challenge, she has turned serious and responsible, lately showing herself capable of true greatness.

Her early life was as a dilettante, rarely entrusted with anything more than short “scripting” tasks. The decisions she made were simple: If a required field was not filled in, she should color it red; if a button was clicked, she should bring another page into view. Although her responsibilities were limited, she was easy to get along with and made many friends. To this day, most programmers' experience of her is primarily of this sort.

Then, in the shift that was to redefine her life, the world turned to the web. This had been her playground, her little place to amuse herself while members of The Old Boys Club did the real work on the server.

The wave started to break in the late 1990s when Microsoft introduced first iframes and then XMLHTTP. When Google made Ajax part of its Gmail application in 2004 and Google Maps in 2005, the wave came crashing down. The world was suddenly aware of just how much richer the web experience could be when the browser was entrusted with more than just displaying whatever the server dispensed.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!