Hey Eli, thanks for going through this. I added my responses inline.
Do you also have suggestions/feedback/opinions on the performance related 
issues?

Thanks,
- Bert

On 17 Apr 2012, at 17:33, Eli Cochran wrote:

> +1 to the entire list.
> 
> I'd like to suggest two changes, one substantive, the other an edit. 
> 
> The edit: break "Avoid using JavaScript in places like hovers, click events 
> on divs (should be button/anchor elements) and use relative positioning where 
> possible." into three issues:
> - Avoid using JavaScript in places like hovers.

Agreed, with issue 3 in mind.

> - No click events on divs (should be button/anchor elements) 

Agreed, part of our review process is to filter these out.

> - Use relative positioning where possible.

Absolutely.

> 
> These are all separate and unrelated suggestions. 
> 
> More substantive: please bring back Christian's list of accessibility 
> suggestions. These should be lost. Accessibility deserves more than just a 
> one liner. 

It does and I don't think otherwise, I added all his suggestions in my 
consolidated list to start up a discussion. What's your take on improving 
accessibility?

> 
> More:
> 
> Before we go with something like SASS, we need to clean up the CSS. I think 
> that the big win for SASS will be for skinning which right now is mired in 
> !important hell, especially for widgets. 
> 
> Current single line CSS formatting is silly, that's what magnification is 
> for. The only thing that it does is make it hard to read. 

Agreed, we're switching over to that style of formatting gradually. SASS would 
be a good move to make at some point, it's proven to be very efficient in the 
widget library.

> 
> I think that there is more to explored with unit testing of front-end code. 
> My totally half-baked suggestions are either much more exposure of internal 
> methods or test blocks that could be automatically removed during deployment. 
> Grunt might be useful here for automated JS unit testing on the server -- for 
> running tests, not writing tests; still a fan of qunit.
> 
> Reuse, reuse, reuse. No copy and paste. You could bring this back from 
> Christian's list as well. 

This is already part of what we check for when reviewing code and why I 
suggested using more central templates throughout the system. 

> 
> Let's get this list into confluence somewhere. 
> 
> Thanks,
> Eli 
> 
> 
> On Apr 17, 2012, at 4:00 AM, Bert Pareyn wrote:
> 
>> 
>> Hey guys,
>> 
>> I've consolidated the suggestions James, Nico, Christian and I have to 
>> improve performance and optimize the UI. Most of the optimizations are nice 
>> to have but performance should get priority, especially widget loading.
>> 
>> 
>> Performance:
>> 
>> - Reduce the number of requests we do in the UI
>>      - Widget loading should move over to the backend, this would be the 
>> greatest win. Currently the widgets that return on every page are loaded 
>> through the top navigation.
>> 
>>      - Reduce number of POSTS for permissions
>>              - Preferably we'd move this over to the backend and only do one 
>> post (public, private, logged-in). That would allow us to remove all ACL 
>> handling from the front-end and make things more consistent across the UI. 
>> Currently we do at about 3-4 POSTs.
>>                      - When adding a user we could then also limit the UI to 
>> sending out data like {'user1': 'manager'}
>> 
>>      - Reduce number of requests when adding content. We go through a loop 
>> that posts with each content item we upload: 
>>              1. Create the file (only one we can't batch)
>>              2. Post description and basic parameters (batch this together 
>> with all other files)
>>              3. Tag the content (batch this together with all other files)
>>              4. Modify ACL's (preferably move this server side)
>>        A nice side effect of this is that we'll be able to modify the 
>> progress indicator to show the task that is currently being processed (also 
>> add real progress. e.g. uploaded 3 of 14 files).
>> 
>> - Remove unnecessary files and CSS/HTML/JS from the code base to make it 
>> lighter
>>      - Loads of unused CSS files
>>      - Review all CSS and grep for usage
>> 
>> 
>> 
>> Optimizations and nice to haves:
>> 
>> - CSS
>>      - Use CSS sprites and investigate how to best structure these.
>>      - Formatting (trivial but best done in one go)
>>      - For every clickable element we should have a focus (most of them have 
>> hovers)
>> - Permissions
>>      - Consistency checks (labels etc.)
>>      - Use API everywhere (not currently doing this)
>> - Inbox
>>      - Cache messages
>>              - Currently inbox gets reloaded each time you navigate between 
>> pages (e.g. inbox -> sent -> inbox).
>>      - Instead of doing a periodic GET for system/me we could fetch the 
>> inbox feed and update the message counts in the top and left hand nav. Not 
>> really an optimization but a win nevertheless.
>> - Documentation
>>      - Widget SDK
>>              - Complete UI API documentation
>>              - Cross browser guidelines
>>              - How to submit your widget (workflow)
>> - Accessibility
>>      - We have quite a lot of open and resolved tickets for accessibility. 
>> We should look into existing frameworks that can help us in do the work.
>> - Core UI Dev
>>      - Get rid of global variables
>>      - Avoid using JavaScript in places like hovers, click events on divs 
>> (should be button/anchor elements) and use relative positioning where 
>> possible.
>>      - Try to avoid areas in the UI that need to be revisited later on 
>> because of a pending back-end fix
>>      - Go from $.bind/$.live to $.on
>>      - Reusable templates
>>              - Page layouts (similar to what we have in the Widget Library)
>>              - Common template structures (e.g. rendering lists)
>>      - Create API functions
>>              - Drag and drop functionality
>>                      - Collections
>>                      - Uploading content
>>      - Counts
>>              - Counts scattered all over the code base
>>                      - Find way to consolidate, improve handling
>>      - Progress indication
>>              - Especially in the content area (large images, video’s,…) 
>> should show indication that the content is loading
>>      - Sluggish rendering
>>              - Review # requests per page, use tools like YSlow, Speed Index 
>> and Speed Tracer
>> - More unit tests + incorporate that in our daily/weekly development cycle
>>      - Always part of code review and should be done before each pull request
>>      - Automate unit tests
>>      - Automated tests!
>> - Git workflow
>>      - When submitting PR:
>>              - Include PR link in ticket + include ticket in PR
>>              - Commit style: ‘SAKIII-XXXX describing the work done’
>>              - Go into issues tab on Github and set ‘to review’ and 
>> ‘version’ labels
>>              - If pending merge gets more work done, update labels to ‘to 
>> review’ or other appropriate labels.
>> 
>> 
>> - Bert
>> 
>> 
>> 
>> 
>> On 17 Apr 2012, at 06:29, Christian Vuerings wrote:
>> 
>>> Just like the "Making a better server" thread started by Zach, I've been 
>>> thinking about how we can make the front-end better.
>>> 
>>> Lately many people have been wondering about how we might scale/perform 
>>> better.
>>> IMO one of the best things we can do is the following (credits to Nico, 
>>> hope I explain it correctly).
>>> 
>>> We currently have quite a lot of deep dependencies (widget A depends on 
>>> widget B which depends on widget C, ...)
>>> Since that is the case, you'll see the top navigation pretty fast but it 
>>> takes a while before a widget within a page is loaded.
>>> The suggestion would be to go to the deepest level and then render 
>>> everything going up the tree.
>>> When that is finished, we could send everything in one request to the 
>>> client.
>>> It would basically take server side template rendering to the next level.
>>> 
>>> Some things we can do on the front-end to make it better (without server 
>>> changes):
>>> (Warning - Some things on this list may hurt your feelings ^^ [1])
>>> 
>>>     Performance:
>>>     1) Use image sprites + don't allow other images on hover
>>>     2) Only use JavaScript when necessary
>>>         We're currently using JavaScript for things we could be doing in 
>>> CSS and abusing it for other things
>>>         a) Hovers should be done in CSS
>>>         b) Don't add click events & hovers to divs, only to anchor tags
>>>     c) Don't add workarounds for bugs in the back-end
>>>     d) Use CSS relative positioning instead of binding to the 
>>> window.resize() and using global absolute positioning in JavaScript.
>>>     e) Use CSS only dropdown menu's [2]
>>>     3) Remove all the polling - no setTimeout or setIntervals (also the 
>>> ones in plug-ins)
>>>     4) Use tools like Speed Index [3], Speed tracer and YSlow
>>> 
>>>     Avoiding bugs:
>>>     1) Remove all the global variables
>>>         Most of these are exposed by plug-ins that we use but some of them 
>>> are ours.
>>>         We shouldn't allow plug-ins that expose those and in our own code 
>>> we should remove the ones that we have.
>>>     2) Remove the JSHint custom options
>>>     3) Remove unused legacy code (e.g. chat/unused api functions), images 
>>> and CSS
>>>     4) Add more QUnit tests
>>>     5) Run QUnit tests on every commit - the long anticipated test server
>>>     6) Keeping it DRY - never! allow any copy/pasting going on (neither in 
>>> CSS/JavaScript or HTML) - e.g. the error pages (jsp/html versions)
>>>     7) Extend the current API - provide functions like `isUrl` which is 
>>> used by several widgets
>>>     8) Don't use plug-ins that use document.write or do external requests 
>>> (e.g. addthis plug-in)
>>> 
>>>     Accessibility:
>>>     1) For every :hover, we should have a :focus (CSS)
>>>     2) As mentioned in the performance section, no JavaScript hovers (if 
>>> it's a design need, we need to redesign) -> for instance activity buttons 
>>> only showing on hover
>>>     3) Provide a drop target area
>>> 
>>> Feel free to agree/disagree and to add your own thoughts and items.
>>> 
>>> 
>>> -- Christian
>>> 
>>> [1] http://www.flickr.com/photos/codepo8/2051752263/
>>> [2] http://www.cssplay.co.uk/menus/new-dropdown.html
>>> [3] 
>>> https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index
>>> _______________________________________________
>>> oae-dev mailing list
>>> [email protected]
>>> http://collab.sakaiproject.org/mailman/listinfo/oae-dev
>> 
>> _______________________________________________
>> oae-dev mailing list
>> [email protected]
>> http://collab.sakaiproject.org/mailman/listinfo/oae-dev
> 
> . . . . . . . . . . .  .  .   .    .      .         .              .          
>            .
> 
> Eli Cochran
> project manager, CalCentral project
> Educational Technology Services, UC Berkeley
> 
> "Do not solve the problem that’s asked of you. It’s almost always the wrong 
> problem."
>     - Don Norman
> 
> 
> 
> 
> _______________________________________________
> oae-dev mailing list
> [email protected]
> http://collab.sakaiproject.org/mailman/listinfo/oae-dev

_______________________________________________
oae-dev mailing list
[email protected]
http://collab.sakaiproject.org/mailman/listinfo/oae-dev

Reply via email to